- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Timer geht nicht?

  1. #11
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    30
    Beiträge
    656
    Anzeige

    E-Bike
    Bei deinem Code verstehe ich manches nicht
    #define COUNT F_CPU/(8ul*256ul) was wirt hier gemacht ?
    Hier wird ausgerechnet, nach wie vielen Timerüberläufen eine Sekunde vergangen ist.

    SIGNAL (SIG_OVERFLOW0) das müsste glaube ich die alte Bezeichnung sein ist das das gleiche wie ISR(TIMER0_OVF_vect) ?
    Ich nehme immer SIGNAL(...) und das funktioniert, ich sehe keinen Grund darin, das mit ISR(...) zu machen, da mir diese Interruptbezeichnungen nicht gefallen. Aber sonst bewirkt beides das gleiche.

    #define DIVIDER 0x2 was ist das für ein wert und wie kommst du darauf ?

    TCCR0 |= DIVIDER; // Timer aktivieren, Du verknüpfst das mit einem ODER und der Timer soll ab dem 0x2; beginnen zu zahlen warum machst du das auf diese art ?
    Der Teiler des Timers wird auf 64 gesetzt, um ihn zu starten. DIVIDER ist nur ein Symbol, das ich verwende, um bei einer Änderung nicht jede Codestelle einzeln ersetzen zu müssen.

    welche unterschiede siehst du in meinem Code zu deinem Code ?
    Ich verstehe in deinem Code deine Berechnungen nicht und denke, dass sie nicht ganz richtig sind. In meinem Code sind sie auf jeden Fall richtig, da er bei mir funktioniert.

    takt--;
    if(takt == 0)
    {
    takt=COUNT;
    sec++;
    ...
    } diese Prozedur kann ich nicht nachvollziehen was ereichst du damit ?
    Damit erreiche ich, dass bei jedem Timerüberlauf takt dekrementiert wird. Wenn takt 0 ist, ist eine Sekunde vergangen, da dies durch COUNT festgelegt wurde (nach wie vielen Überläufen eine Sekunde vergangen ist). Wenn takt nun 0 ist, wird die wieder Variable auf COUNT gesetzt, damit das ganze wieder von vorne beginnen kann und sec wird um eins erhöht, da eine weitere Sekunde verangen ist.

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    12.11.2009
    Beiträge
    29
    wie geht den das mit der Berechnung,
    ( F_CPU / Prescaler = Frequenz mit der gezählt wirt )*(TCCRx bis 256) = ISR

    ich glaube ich habe das noch nicht ganz verstanden?

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    http://www.avr-praxis.de/forum/showthread.php?t=74
    Guck dir den Timer Calculator mal an, der is echt top!

  4. #14
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    30
    Beiträge
    656
    #define COUNT F_CPU/(8ul*256ul)
    F_CPU = Systemtakt
    8 = Prescaler
    256 = 0x100 = 0b100000000 (wegen 8 Bit Timer, bei 256 gibt es einen Überlauf)

    Formel
    Anzahl der Überläufe, bis eine Sekunde vergangen ist = Systemtakt / (Prescaler * 256)

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress