- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 9 von 9

Thema: Timer Atmega16 NiboBee

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Ich habe den Code mal zerlegt, ist vielleicht übersichtlicher...

    Code:
    void main (void)
    {
    //Timerinitialisierung
    	TCCR2 = 0b001;
    	TIMSK |= (1<<TOIE2);
    	sei();
    
    while(1)
    {}
    
    }
    
    ISR (TIMER2_OVF_vect)
    {
    	counter = counter + 1;
    }
    Dieser Timer sollte bei 15MHz Takt alle 17µs die ISR aufrufen, stimmt das?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von PinQin Beitrag anzeigen
    Dieser Timer sollte bei 15MHz Takt alle 17µs die ISR aufrufen, stimmt das?
    Würd ich rein nach Datenblatt auch so sehen. Allerdings kenne ich mich mit C und den Nibobee Funktionen nicht aus. Nicht, daß da irgendeine Funktion den Timer2 auch noch nutzt.

    Kommt auf eine Interruptfrequenz von ca. 58,5kHz und damit ist der µC schon gut beschäftigt und man könnte mal überprüfen, ob das in Zusammenarbeit mit übrigem Programm und Interrupts nicht zuviel ist?

    TCCR2 = 0b001; find ich nicht so gut. Binärzahl entsprechend der Registerbreite angeben, also 0b00000001 oder gleich übersichtlich mit TCCR2 |= (1<<CS20); (wenn andere Bits nicht beeinflußt werden sollen)

    PS: 15MHz ist eine unübliche Taktfrequenz?

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Da die ISR recht kurz ist, sollte es auch mit einer so hohen Frequenz noch funktionieren. Einfach nur in der ISR Zählen ist aber ggf. auch unnötig - das kann der Timer auch in Hardware. Also einfach den Vorteiler um den Faktor 256 höher setzen und dann das Timer register auslesen statt der Variabele Counter. Besser wäre es da aber den 16 Bit timer(1) zu nutzen - dann hätte man auch da 16 Bit Auflösung. Oft reicht das. Der Timer direkt hätte auch noch gleich den Vorteil, das da Hardware für den ungestörten Zugriff auch 16 Bit werte vorhanden ist. Bei der Softwarelösung müsste man die Zugriffe auf Counter im Hauptprogramm noch alle mit Cli() ... Sei() schützen, wenn es nicht zu seltenen Ausreißern kommen darf.

  4. #4
    Den 16-bit Timer kann ich leider nicht nutzen, da der schon verwendet wird. Ich habe es jetzt mit dem 8er Vorteiler realisiert. Die Auflösung reicht noch nicht ganz aus, aber vorerst haben mich eure Antworten ein ganzes Stück weiter gebracht. Ich kann die Distanz jetzt auf ein paar cm genau einstellen. Ich werde in den nächsten Tagen noch die Idee den Zählerwert direkt zu verwenden umsetzen, dann müsste das Ganze noch genauer werden. Der Counterwert wäre dann ja Counter + (überlauf*256)?!

    Vielen Dank,

    PinQin!

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Im Prinzip stimmt das mit Counter + (überlauf*256), aber man muss aufpassen ob ggf. noch ein Überlauf Interrupt ansteht, also der counter schon wieder klein ist, aber die ISR für den Überlauf noch nicht aufgerufen wurde.

Ähnliche Themen

  1. Atmega16 - Zwei Timer verwenden. - Nur einer funktioniert
    Von Kesandal im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 24.06.2011, 13:52
  2. [ERLEDIGT] ATMEGA16 - Timer zerschossen?
    Von Kesandal im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 19.06.2011, 19:50
  3. NIBOBee und Timer- für Anfänger
    Von Rabenauge im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 24
    Letzter Beitrag: 26.03.2010, 11:07
  4. ATMega16 und Timer Verständnisproblem
    Von -tim- im Forum Assembler-Programmierung
    Antworten: 14
    Letzter Beitrag: 30.12.2006, 12:03
  5. 1 MHz Clock Signal mit ATMega16 Timer erzeugen ?
    Von LySsA im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 30.05.2005, 19:22

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests