www.mikrocontroller.net

Forum: GCC OCR1A Wert in Simulator falsch?

Autor: Jorge (Gast)
Datum: 14.05.2008 11:00

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
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
Autor: Lutz (Gast)
Datum: 14.05.2008 12:08

Welchen uC benutzt Du denn bzw. etwas prüziser: Wie viel bit hat Dein
Timer denn? 8, 16, 32, ...
Autor: Lutz (Gast)
Datum: 14.05.2008 12:12

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).
Autor: Johannes M. (johnny-m)
Datum: 14.05.2008 12:19

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...
Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum: 14.05.2008 13:14

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.
Autor: Johannes M. (johnny-m)
Datum: 14.05.2008 14:06

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...
Autor: Jorge (Gast)
Datum: 14.05.2008 15:06

Hallo Jörg,

der Simulator zeigt mir OCR1AL und OCR1AH an und ergibt dann die 144 für
OCR1A.
Autor: Fred S. (Gast)
Datum: 14.05.2008 16:58
Dateianhang: OCR1A.png (8 KB, 39 Downloads)
preview image for OCR1A.png

Hi,

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

Gruß

Fred
Autor: Johannes M. (johnny-m)
Datum: 14.05.2008 18:39

@Fred:
Genau so sieht es bei mir auch aus.
Autor: Fred S. (Gast)
Datum: 14.05.2008 18:45

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
Autor: Jorge (Gast)
Datum: 15.05.2008 21:53

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:
TCCR1A|=(1<<CS00);//Prescale 1
TCCR1B|=(1<<WGM12);//CTC
OCR1A=400;

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

Vielen Dank nochmal für Eure Hilfe .... Jorge
Autor: Fred S. (Gast)
Datum: 16.05.2008 07:55

Hi Jorge,

>
> TCCR1A|=(1<<CS00);//Prescale 1
> TCCR1B|=(1<<WGM12);//CTC
> OCR1A=400;
> 
CS00 ist ja auch kein Name eines Bits in TCCR1A, bezeichnet aber Bit0,
so dass Dein Code identisch ist mit
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.

>
> TCCR1B|=(1<<CS00);//Prescale 1
> TCCR1B|=(1<<WGM12);//CTC
> OCR1A=400;
> 
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
Autor: saiboT (Gast)
Datum: 16.05.2008 08:12

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
Autor: Jorge Me (jorge)
Datum: 16.05.2008 08:27

Hallo saiboT,

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

Gruß ... Jorge
Autor: die ??? (Gast)
Datum: 16.05.2008 11:34

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.
Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum: 16.05.2008 12:26

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.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net