- Labornetzteil AliExpress         
Ergebnis 1 bis 3 von 3

Thema: Timer1 Läuft nicht richtig

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.12.2004
    Beiträge
    77

    Timer1 Läuft nicht richtig

    Anzeige

    E-Bike
    Hallo Leute,

    ich baue eine Uhr die Relativ genau gehen soll.
    Mit dem Sourcecode ist eine Sekunde leider 16 Sekunden lang ;-(
    Was mache ich falsch?
    Benutze einen ATINY2313-20PU mit 16 Mhz extern Quarz.

    Danke für die hilfe

    Hier der Sourcecode:


    Code:
    #include <main.h>
    #include <lcd.c>
    
    
     uint8_t second=0;
     uint8_t secled=0;
     uint8_t minute=0;
     uint8_t hour=0;
    
    SIGNAL (SIG_OVERFLOW1)
    {
       second ++;   
       if(second == 60)
       {
          second = 0;
          minute ++;
       };
       if(minute == 60)
       {
          minute = 0;
          hour ++;
       };
       if(hour == 24)
       {
          hour = 0;
       };
    
    }; 
    
    //Hauptprogramm
    int main (void)
    {
    
      DDRD  = 0x00; /* alle Pins von Port D als Eingang */
      PORTD = 0xff; /* interne Pull-Ups an allen Port-Pins aktivieren */
    
      //Initzialisierung des LCD - Displays
      LCD_Init();
      LCD_Print(1,0,"Clock");
      
       OCR1AL = 0x09;
       OCR1AH = 0x3d;
       TCNT1L = 0xf7;
       TCNT1H = 0xc2;   
       TCCR1B |= (1<<CS10)|(1<<CS12); //1024
       TIMSK |= (1 << TOIE1);
       sei(); 
      
      unsigned char count;
      //Hauptprogramm läuft ständig in einer schleife
      while (1)
        {
        /*       if ( !(PIND & (1<<PIND4)) ) {
               count++;
             {
             if ( !(PIND & (1<<PIND5)) ) {
               count--;
             { */        
            LCD_Print(0,1,"Time: %i:%i:%i",hour,minute,second);
        }
    return (1);
    };
    Kann das vielleicht sein das ich im Makefile AT90S2313 benutzte für den ATTINY2313? Weil man im MFile [WinAVR] keinen ATTINY2313 auswählen kann.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    28.12.2004
    Beiträge
    77
    weiss keiner bescheid?

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Der Overflow-Interupt ist für sowas nicht geeignet, das Richtige Zeitintervall hast du nur beim ersten Mal, danach läuft der Zähler wieder zu 0 über. Du müsstest in der ISR von Hand TCNT1 neu sezuen, das ist ungenau. Schau mal ins Wiki:
    https://www.roboternetz.de/wissen/in...R_%28Blinky%29
    Disclaimer: none. Sue me.

Berechtigungen

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

12V Akku bauen