Hallo Leute, Kann mir einer sagen ob und was ich bei unten stehendem Code falsch gemacht haben könnte? - Habe in AVR-Studio den Timer auf 1.000.000hz gestellt - Prescaler auf 64 ergibt für den 16bit TCNT1 nen Wert von 15624. - sprich der timer soll bei 1sek. 1hz. reagieren. 1. Frage: meine Led bei PC5 blinkt schneller als ich für 1sek. vermuten wurde. sieht für mich eher nach 500ms aus?! 2. Frage: kann es sein das der Timer beim Atmega8 NUR für PB2 gilt? also dort wo auch tatsächlich der Timer liegt? #include <avr/io.h> int main (void) { DDRB |= (1 << PB2); // Set Motor as output DDRC |= (1 << PC5); // Set LED as output TCCR1B |= (1 << CS10) | (1 << CS11) ; // Set up timer with // a prescaler of 64 for (;;) { // TCNT1 as 16bit can only count to 65535! if (TCNT1 >= 15624) //15624 is 1 count of the actual //clock at 1Mhz = 1ms { PORTB ^= (1 << PB2); // Toggle Motor PORTC ^= (1 << PC5); // Toggle LED TCNT1 = 0; // Reset timer value } } } Bin Euch für jede Antwort dankbar... Gruß R.
r4m0n schrieb: > - Habe in AVR-Studio den Timer auf 1.000.000hz gestellt Wie? > - Prescaler auf 64 ergibt für den 16bit TCNT1 nen Wert von 15624. > - sprich der timer soll bei 1sek. 1hz. reagieren. > > 1. Frage: meine Led bei PC5 blinkt schneller als ich für 1sek. > vermuten wurde. sieht für mich eher nach 500ms aus?! Dann ist anscheinend dein Prozessortakt falsch. Das Programm sieht soweit gut aus. > 2. Frage: kann es sein das der Timer beim Atmega8 NUR für PB2 gilt? > also dort wo auch tatsächlich der Timer liegt? Ich verstehe nicht, was du damit meinst.
Hallo Rolf, zu 1. Habe den Timer im AVR Studio unter "project configuration" auf 1000000hz gestellt. War eigentlich der Meinung das würde soweit reichen!? Oder muss ich den noch explizit im Code selbst mit angeben? zu 2. Hat sich erledigt. Habe da etwas falsch verstanden und mit dem PWM durcheinandergebracht der laut Datenblatt nicht auf jedem Pin zu belegen ist. Gruß.
r4m0n schrieb: > Hallo Rolf, > > zu 1. Habe den Timer im AVR Studio unter "project configuration" auf > 1000000hz gestellt. Du stellst nicht den 'Timer' auf 1 Mhz sondern du teilst dem AVR_Studio mit, mit welcher Taktfrequenz der komplette Prozessor läuft. Und du kannst dort nichts in dem Sinne einstellen, dass ein anderer Zahlenwert dort etwas magisch verändern würde. Dieses Feld ist ein Informationsfeld für den Compiler. D.h. dort wird eingetragen, was Sache ist und nicht ich stelle dort ein was ich haben möchte. In einem gewissen Sinne stellst du dort ein: Meine Uhr macht 60 mal Tick in der Minute. Aber selbst wenn du dort 80 eintragen würdest, macht deine wirkliche Uhr immer noch 60 mal tick. Der Unterschied: Dein Compiler/Programm glaubt dir das du eine seltsame Uhr hast, die wirklich 80 mal in der Minute tick macht und rechnet dann mit falschen Werten.
Wenn dein Programm die LED mit 2Hz blinken lässt, läuft der Prozessor mit 2MHz. Warum er das tut, musst du rausfinden. Läuft er mit dem internen Oszillator, schau dir die Fuses an (CKSEL3..0), läuft er mit einer externen Taktquelle, schau nach, was da drauf steht. Oliver
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.