kleine timer frage

Gast #1648558
Lesenswert?

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.
Gast #1651405
Lesenswert?

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.
Gast #1652564
Lesenswert?

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ß.
#1654035
Lesenswert?

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.
Gast #1654077
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren