www.mikrocontroller.net

Forum: Compiler & IDEs kleine timer frage


Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.