- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 15

Thema: 1 Interrupt pro Sekunde

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.06.2010
    Ort
    78xxx
    Alter
    32
    Beiträge
    73

    1 Interrupt pro Sekunde

    Hy,
    ich brauche einen Interrupt pro Sekunde. Mein uC läuft mit 1MHz und soll später mit 16MHz takten. Nach meinem Brechnungen müsste ich bei 1MHz (16MHz) Takt, einen Prescaler von 64 (1024) benutzen und, 1 000 000 / 64 = 15 625 (16 000 000 / 1024 = 15625), einen 16 Bit Timer von 49911 (65536 - 15625) zählen lassen um einen Interrupt pro Sekunde zu bekommen.

    Zum Testen lasse ich in diesem Interrupt eine LED Blinken, die gefühlt aber nur alle 2-3 Sekunden wechselt.

    Hab ich einen Fehler in meiner Rechnung, oder muss ich den Fehler woanders suchen?
    MfG Icon

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    49911 /15625 ergibt zufällig gefühlte 2-3 Sekunden. Läuft dein Timer vielleicht im CTC-Modus mit OCRx=49911? Dein Rechenweg scheint mir richtig.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Aus folgendem Grund:
    Timer startet und nach 1 Sekunde kommt ein Interrupt der die LED anschaltet. Danach startet der Timer neu und nach nochmal 1 Sekunde geht die LED wieder aus. Meinst du das vielleicht?
    Weil die Rechnung ist richtig. Wenn es nicht es nicht geht liegt es an deiner Timerkonfiguration.

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Selbstverständlich mußt du in der Überlauf-ISR das Zählregister des Timers wieder mit dem errechneten Startwert laden. Aber das weißt du ja sicher alles. Vielleicht solltest du uns noch dein Testprogramm zeigen.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    08.06.2010
    Ort
    78xxx
    Alter
    32
    Beiträge
    73
    So hier ein Auschnitt aus meinen Code, ich hab eine LED Matrix:
    Code:
    #if F_CPU == 1000000
    #    define PRESCALER (1 << CS10) | (1 << CS11)
    #elif F_CPU == 16000000
    #    define PRESCALER (1 << CS12) | (1 << CS10)
    #endif
    
    /*
     ...
    */
    
    ISR(TIMER0_OVF_vect)
    {
        ml_plex();
        px_send();
    }
    
    ISR(TIMER1_OVF_vect)
    {
        TCNT1     =  49911; // 65536 - 15625
    
        ml_write [0] = ~(ml_write[0]);
        ml_write [1] = ~(ml_write[1]);
        ml_write [2] = ~(ml_write[2]);
        ml_swap = 1;
    }
    
    void init(void)
    {
        TCCR0     |= (1 << CS01);
        TCCR1B     |= PRESCALER;
        TCNT1     =  49911; // 65536 - 15625
        TIMSK     |= (1 << TOIE1) | (1 << TOIE0);
        sei( );
    }
    Ich benutze den 8Bit Timer um die LED Matrix zu multiplexen und den 16Bit Timer um das Bild umzuschalten. Ich denke das wird der wichtige Teil sein. Davor wird nur der ml_write buffer befüllt, so dass alle LEDs brennen und es wird eine Endlosschleife durchlaufen.

    Wenn die Rechnung stimmt muss der Fehler ja irgendwo im Programm liegen oder?

    EDIT1: Es sind eher gefühlte 2 Sekunden wie 3, aber definitiv länger als 1 Sekunde

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    08.06.2010
    Ort
    78xxx
    Alter
    32
    Beiträge
    73
    Hier noch ein kleines Video vom Testaufbau. Dann könnt ihr euch von der Zeit selbst ein Bild machen.

    PS: Sry für die Quali, die Kamera vom Galaxy S schafft wohl die kurze Entfernung nicht.


Ähnliche Themen

  1. Genaue Sekunde mit 4,194304 Mhz Quarz
    Von Draconix im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 03.01.2010, 12:01
  2. messungen pro sekunde
    Von ikarus_177 im Forum Sensoren / Sensorik
    Antworten: 5
    Letzter Beitrag: 14.04.2008, 18:54
  3. Frage timervorgabe für eine Sekunde?
    Von alper im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 21.11.2006, 23:55
  4. Jede Sekunde ein Timer Interrupt
    Von Johannes G. im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 06.10.2006, 17:52
  5. Wie viele Messungen maximal mit dem internen ADC pro Sekunde
    Von Florian im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 03.04.2005, 00:13

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress