Forum: Compiler & IDEs OCR1A Wert in Simulator falsch?


von Jorge (Gast)


Lesenswert?

Hallo,

bei meinen ersten Versuchen eine Mega8 mit gcc zu programmieren bin ich 
beim Simulieren auf folgendes Problem gestoßen:

Ich setze den OCR1A mit
1
OCR1A=400;

während der Simulation zeigt mir der AVR-Studio Simulator jedoch als 
OCR1A Wert 144, also genau 256 (8 Bit) zu wenig, an. Der gcc-Doku habe 
ich entnommen, dass das Schreiben des Low- und High-Byts automatisch 
geschieht.

Mache ich was falsch, muß ich noch irgendetwas einstellen oder stimmt 
etwas mit dem Simulator nicht?

Freue mich auf Eure Hilfe. Vielen Dank ... Jorge

von Lutz (Gast)


Lesenswert?

Welchen uC benutzt Du denn bzw. etwas prüziser: Wie viel bit hat Dein 
Timer denn? 8, 16, 32, ...

von Lutz (Gast)


Lesenswert?

Okay, wer lesen kann ist klar im Vorteil, mega8. Ich ziehe die Frage 
zurück. Der Timer1 hat dort 16 bit, meine Vermutung eines 8 bit-timers 
ist also falsch (denn der könnte ja nur von 0-255 zählen).

von Johannes M. (johnny-m)


Lesenswert?

Hmmm, ich hab grad mal ein Projekt (allerdings mit nem Mega16) 
durchlaufen lassen, und bei mir wird das korrekt angezeigt. AVRStudio 
neueste Version (4.14) mit allem, was dazugehört...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Vielleicht solltest du dir ja außer OCR1AL auch noch OCR1AH ansehen?
Das Pseudo-16-Bit-Register gibt's nur für den Compiler, in Wirklichkeit
sind es zwei 8-Bit-Register.

von Johannes M. (johnny-m)


Lesenswert?

Jörg Wunsch wrote:
> Vielleicht solltest du dir ja außer OCR1AL auch noch OCR1AH ansehen?
> Das Pseudo-16-Bit-Register gibt's nur für den Compiler, in Wirklichkeit
> sind es zwei 8-Bit-Register.
Der Simulator zeigt es zumindest im I/O-View aber komplett an (als ein 
Register). Ich weiß natürlich nicht, wo Jorge den angegebenen Wert 
gesehen hat...

von Jorge (Gast)


Lesenswert?

Hallo Jörg,

der Simulator zeigt mir OCR1AL und OCR1AH an und ergibt dann die 144 für 
OCR1A.

von Fred S. (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

unter XP und AVRStudio v.4.14 (ATmega8 eingestellt) stimmt's bei mir 
(siehe Bild).

Gruß

Fred

von Johannes M. (johnny-m)


Lesenswert?

@Fred:
Genau so sieht es bei mir auch aus.

von Fred S. (Gast)


Lesenswert?

Hallo Jorge,

ehe wir hier weiter im Dunkeln tappen und das Problem nicht 
reproduzieren können: zeig doch mal bitte Deinen Code und die Ausgabe 
des Simulators. Welche Version verwendest Du?

Gruß

Fred

von Jorge (Gast)


Lesenswert?

Hallo,

Lutz hat mich auf die Idee gebracht nach einem 8/16 Bit Problem zu 
suchen...

Ich habe es im Setzen der TCCR1A mit CS00 gefunden:

Das war mein Code:
1
TCCR1A|=(1<<CS00);//Prescale 1
2
TCCR1B|=(1<<WGM12);//CTC
3
OCR1A=400;

aber mit TCCR1A|=(1<<CS00) setze ich den Timer scheinbar in den 8-Bit 
PWM Modus. So funktioniert´s jetzt:
1
TCCR1B|=(1<<CS00);//Prescale 1
2
TCCR1B|=(1<<WGM12);//CTC
3
OCR1A=400;

Vielen Dank nochmal für Eure Hilfe .... Jorge

von Fred S. (Gast)


Lesenswert?

Hi Jorge,

>
1
> TCCR1A|=(1<<CS00);//Prescale 1
2
> TCCR1B|=(1<<WGM12);//CTC
3
> OCR1A=400;
4
>
CS00 ist ja auch kein Name eines Bits in TCCR1A, bezeichnet aber Bit0, 
so dass Dein Code identisch ist mit
1
TCCR1A|=(1<<WGM10); // PWM, phase-correct 8-bit mode !!!!

> aber mit TCCR1A|=(1<<CS00) setze ich den Timer scheinbar in den 8-Bit
> PWM Modus.
Genau, s.o.

>
1
> TCCR1B|=(1<<CS00);//Prescale 1
2
> TCCR1B|=(1<<WGM12);//CTC
3
> OCR1A=400;
4
>
Sei vorsichtig mit dem "Mischen" der Bit-Namen: CS00 gehört nicht zu 
TCCR1B. Das Ergebnis ist zwar das gleiche als wenn Du CS10 nimmst, aber 
man kann sich leicht Probleme (s.o.) einhandeln, wenn man die Bit-Namen 
nicht sauber trennt.

Gruß

Fred

von saiboT (Gast)


Lesenswert?

hallo Jorge,

Hat sich das Problem schon gelöst?
Und hats jetzt wirklich an dem "TCCR1A" gelegen?

Habe bei mir das gleiche Problem wenn ich dem ASM code hier aus dem 
Tutorial verwende.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM

Gibt es irgendwelche Hinweise das bei älteren Versionen des AVR Studio 
hier ein Fehler vorliegt?


Gruß saiboT

von Jorge M. (jorge)


Lesenswert?

Hallo saiboT,

ja, es lag am TCCR1A. Ich verwende AVR-Studio 4.14.

Gruß ... Jorge

von die ??? (Gast)


Lesenswert?

Das Problem scheint zwar gelöst, aber noch ein Wort dazu: Der Simulator 
im AVR Studio ist buggy und verhält sich in vielen Fällen nicht wie die 
echte Hardware - der Grund warum ich den Simulator so gut wie nie 
benutze.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Für die AVRs, wo er vorhanden ist, sollte der sogenannte Simulator
Version 2 deutlich besser gehen.  Der komplette Digitalteil müsste
darin (prinzipbedingt) korrekt abgebildet sein.

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.