Forum: Mikrocontroller und Digitale Elektronik PIC16F1827 Problem mit TMR1 Gate Control


von Ottmar K. (wil1)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
Derzeit arbeite ich mich in den vielseitigen PIC 16F1827 ein. Bis jetzt 
bin ich gut vorangekommen, aber bei der Pulsweitenmessung komme ich 
nicht weiter - Vielicht auch ein Fall von Betriebsblindheit. Etwas 
Unterstützung von seiten des Forums würde mich sehr freuen!

Pulsweitenmessung - Funktion:
Timer 1 erhält sein Clock-Signal vom internen Oszillator/4. Timer 1 
verfügt über ein Gate-Control-Register mit Pin T1G (RB0) als 
Clock-Eingang. Wird über RB0 (T1G) nun ein HIHG- oder LOw-Signal 
angelegt, beginnt oder stoppt Timer 1 den Zählvorgang. Das hängt von der 
Einstellung des Bits T1GCON,T1GPOL ab.  Der Zählerstand von Timer 1 ist 
das Maß für die Pulsweite.

Das Problem:
Setze ich dieses T1GCON,T1GPOL auf Low, dann zählt TMR1 zwar los, aber 
nur wenn von vorneherein RB0 auf 0 ist. Anhalten mit HIGH an RB0 
afunktioniert nicht.

Gehe ich in die Messung mit H-Pegel an RB0 läuft der Timer 1 erst gar 
nicht los Irgendwas mache ich wohl falsch. Vielleicht hat einer von Euch 
eine Lösung für mich.

Ich habe die Initialisierung der Register mehrfach geprüft, finde aber 
den Fehler nicht. Möglicherweise gibt es auch einen Bug im Simulator, 
daran glaube ich jedoch zuletzt, zudem konnte ich im Netz nichts darüber 
finden.

Schon mal besten Dank im Voraus für einen guten Rat!

mfg Ottmar

von pic (Gast)


Lesenswert?

Errata ansehen, hilft warscheinlich.

von Ottmar K. (wil1)


Lesenswert?

pic schrieb:
> Errata ansehen, hilft warscheinlich.

OK - da bin ich auch schon drauf gekommen: Leider treffe die dort 
besprochenen Probleme (Dokument 80485K) zum "Togggle-Mode" nicht mein 
Problem. Ich wäre für eine konkrete Information - ohne nebulösen Hinweis 
- wirklich sehr dankbar.

mfG Ottmar

von Erich (Gast)


Lesenswert?

Falls es um die ERFASSUNG eines PWM Signals geht,
so findet sich hier
http://www.technik.dhbw-ravensburg.de/~lau/wetterstation.html
eine gute Applikation mit einem Microchip uC.

Allerdings in C
Ich habe die dortige Vorlage ("Quelltext") erfolgreich auf einen 1827 
übernommen (für das Signal vom SMT160 Temperatursensor -- dieser liefert 
das PMW Signal).

Das gezeigte Prinzip "CCP1 capture mode" ist generell das für die PWM 
Auszählung geeigneste.

Gruss

von pic (Gast)


Lesenswert?

Wollte nur sichergehen, daß es nicht ein Errata ist bevor ich das 
durchsehe.
Anscheinend hast du das T1GGO Bit vergessen.
Du solltest di Register vor starten des Timers initialisieren und nicht
nachher.
Simulator, das meinst du nicht ernst, für solche Sachen ist dieser
unbrauchbar, er simuliert nur das nötigste.

von Ottmar K. (wil1)


Lesenswert?

Erich schrieb:
> Das gezeigte Prinzip "CCP1 capture mode" ist generell das für die PWM
> Auszählung geeigneste.
>
Ja, danke Erich,
mit dem CCP1-Module werde ich mich noch später befassen, erst aber 
möchte ich so wie im Datenblatt des 16F1827 beschrieben, mittels Gate 
Control und Timer 1 eine Pulsbreite / Pulspause /Periodendauer erfassen. 
Es geht mir in erster Linie darum die Funktionen des PIC zunächst zu 
verstehen.

---------------

pic schrieb am 27.07.2012 10:56
>Anscheinend hast du das T1GGO Bit vergessen.
>
Danke für diesen Hinweis zum T1GGO/DONE - Bit! Das habe ich noch nicht 
versucht! - Wohl schlichtweg übersehen/nicht beachtet/als "read only" im 
Unterbewußtsein abgetan!
Sobald ich wieder zuhause bin, probiere ich das aus. Ich melde mich 
wieder mit dem dann vorliegenden Ergebnis!

>"Simulator, das meinst du nicht ernst"
>er simuliert nur das nötigste
>
Deiner Äußerung zum Stimulus kann ich nicht zustimmen. Werden die 
Möglichkeite des Stimulus genutzt, läßt sich eine Menge damit anstellen. 
Bis jetzt hatte ich nie das Gefühl an eine Grenze zu stoßen Ich habe so 
eine komplette DCF77-Uhr, ADC und LED-Cube-PWM(16F628) duchsimuliert.

Nochmals Danke an Euch beide für die Infos ! ;-)

mfG Ottmar

von Ottmar K. (wil1)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!
Leider führten die Tips welche ich erhalten habe bisher nicht zum 
Erfolg. Daher brauche ich noch immer Eure Hilfe! Das aktuelle ASM-File 
habe ich wieder beigefügt.

Alle Voreinstellungen laut Datenblatt wurden von mir vorgenommen und zig
Mal anhand des Datenblatts kontrolliert. Dazu in zig Variationen 
ausprobiert. - Fehlanzeige - Klappt nicht!

Problembeschreibung:
Wird "T1GCON,T1GPOL" = High gesetzt, zählt Timer 1 nicht Wird 
"T1GCON,T1GPOL" = LOW gesetzt, dann zählt Timer 1, aber beendet das 
Zählen nicht mehr beim Flankenwechsel
Dasselbe Problem im Toggle-Mode. Auch wenn ich im Stimulus den 
Eingangspin für das Gate, RB0 (T1G-Pin) auf H oder L setzte dasselbe 
Ergebnis. Entweder stimmt das Datenblatt/der Stimulus nicht oder ich 
blicke bei irgendeiner Einstellung nicht durch.

Wer kann mir bitte weiterhelfen?

mfG Ottmar

von pic u. (pic_user)


Lesenswert?

Fig 21-5 sollte deine Zweifel bez Stimulus beseitigen,
Du solltest jedoch auch T1SYNC setzen, TMR1GIF löschen
und den Timer Löschen und erst danach das T1GGO setzen,
dies sind aber nebensächliche Details.

Weiters, wenn du den Toggle Modus benutzt, siehe Errata !
Stimmt, dein Simulator sollte es richtig anzeigen, auch wenn es
in der realen HW falsch funktioniert.

Das sind deine Register:
  banksel  T1CON      ;bank 0
  CLRF  T1CON      ;
  bsf    T1CON,TMR1ON  ;Bit0=1 TMR 1 ENABLED
  clrf  T1GCON
  bsf    T1GCON,TMR1GE  ;Bit7=1 TMR1 Gate is ENABLED
  bsf    T1GCON,T1GSPM  ;Bit4=1 Gate single pulse ENABLED
  bsf    T1GCON,T1GGO  ;Bit3=1 Single pulse AITING FOR AN EDGE
              ;Bit2   Gate current state

Scheint OK, zu sein, bis auf das löschen des Timers nach dem samplen.
Ich nehme mal an, daß im Simulator T1GVAL falsch angezeigt wird,
TMR1GIF sollte aber funktionieren setze aber zur Sicherheit TMR1GIE,
denn auch da differiert der Simulator mit der realen HW.

von Ottmar K. (wil1)


Angehängte Dateien:

Lesenswert?

Besten Dank an  pic user!

PROBLEM GELÖST!
Der letzte Beitrag hat mir endlich auf die Sprünge geholfen! Allerdings 
erst nachdem ich den Simulator beseite gelassen und das Programm in 
einen realen PIC gebrannt habe. Der Simulator schaltet das Bit 
TG1CON,TIGGO nicht auf Low-Pegel nachdem der Gate-Impuls seinen 
Flankenwechsel ausgeführt hat!

Wenn's jemand interessiert: Der maßgelbliche Code ist als Anlage 
beigefügt.
Nochmals Dankeschön für die Hilfe!

mfG Ottmar

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.