Forum: Mikrocontroller und Digitale Elektronik PIC timer0 Probleme


von latissimo (Gast)


Lesenswert?

hallo! HILFE!!!!

folgender Code läuft in einer endlosschleife

PORTC.4 = 1;
OPTION = 2;
TMR0 = 246;
while(TMR0);

PORTC.4 = 0;
OPTION = 2;
TMR0 = 246;
while(TMR0);

das oszilloscop zeigt leider unterschiedliche Zeiten zwischen HI und LOW

warum???

ich habe einen PIC der mit FOSC von 4MHz läuft. Aalso wirkt 
1MHz/prescaler auf den TMR0

warum so unterschiedliche Zeiten??

von Severino R. (severino)


Lesenswert?

Kann es sein, dass der Compiler etwas wegoptimiert?

Ich würde mal ins Assemblerlisting schauen, ob die Schleifen dort auch 
gleich lang sind.

von Εrnst B. (ernst)


Lesenswert?

Wie hoch ist dein Prescaler?
Wenn der Timer zu schnell läuft, kann dein
1
while(TMR0);
schon mal den Moment verpassen, in dem TMR0 == 0 ist. Dann wartets 
nochmal nen ganzen Timerdurchlauf.

Schau mal nach obs da nicht ein Overflow-Bit o.ä. gibt, was du 
stattdessen abfragen kannst.

von Gast (Gast)


Lesenswert?

Bei Timerzugriffen die Timer-enable Bits abschalten.
Führt auch als zu Ausführungsproblemen.
Un wie schon gesagt, das Overflow-Bit abfragen und danach löschen.

von Master S. (snowman)


Lesenswert?

> while(TMR0);
wird nur unterbrochen, wenn genau bei der abfrage von TMR0 eben TMR0 == 
0 ist. die chance, dass das nicht der fall ist, ist sehr hoch. in einem 
solchen fall zählt der timer0 noch eine runde und vielleicht ist dann 
beim zeitpunkt TMR0 = 0 eventuell die abfrage TMR0 == 0, eventuell auch 
diesmal nicht -> noch ne runde usw.

wenn schon dann:
TMR0 = 246;
while(TMR0 >= 246);

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.