- 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

    Praxistest und DIY Projekte
    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