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
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
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
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.
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.