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
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, ...
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).
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...
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.
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...
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.
Datum: 14.05.2008 16:58
Hi, unter XP und AVRStudio v.4.14 (ATmega8 eingestellt) stimmt's bei mir (siehe Bild). Gruß Fred
Datum: 14.05.2008 18:39
@Fred: Genau so sieht es bei mir auch aus.
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
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
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
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
Datum: 16.05.2008 08:27
Hallo saiboT, ja, es lag am TCCR1A. Ich verwende AVR-Studio 4.14. Gruß ... Jorge
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.
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



