- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Interrupt Probleme -> LED blinkt nicht

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Beiträge
    178
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Die Konstante wurde wie gesagt von dem Programm rnAVR berechnet, was du hier im Forum auch als Download findest.
    Die Konstante ist glaube ich da zu da, damit man die Auflösung feiner einstellen kann.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Nun, wenn ich das richtig sehe, wird der Timer nach seinem Interrupt mit diesem Wert geladen, somit vergeht weniger Zeit bis zu seinem nächsten Interrupt.

    "Const" deklariert die Variable "Timervorgabe" als Konstante, damit ist sie sozusagen schreibgeschützt und man kann nicht einfach im Programm einen neuen Wert drüberbügeln.

    Allerdings dürfte der erste Zyklus nach dem Anlauf nicht stimmen, weil der Timer bei 0 startet, sonst ist der erste Timerdurchlauf zu lang.

    Etwa so müsste es aber von Anfang an richtig gehen:

    $regfile "m8def.dat"
    $crystal = 8000000

    Config Portd = Output

    led alias portd.0

    Config Timer1 = Timer, Prescale = 256
    Const Timervorgabe = 3036


    on timer1 ontimer1
    enable timer1
    enable interrupts

    Timer1=Timervorgabe


    do

    loop


    ontimer1:

    Timer1 = Timervorgabe

    Toggle Led

    Return

    Ich hab mal einfach hardstyler´s Programm geklaut...

    Viele Grüße

    Torsten

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272
    Hallo,

    habe jetzt mal das programm rnavr probiert. ein feines tool. meine uhr läuft schon.

    lasse die jetzt mal laufen um rauszubekommen wie genau die läuft. werde ich dann morgen früh mitbekommen.

    cu arno

  4. #14
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272
    habe die uhr jetzt ne weile laufen lassen und rausbekommen das die ca nach 7 stunden ( da ist die nacht vorbei *grins*) 20sekunden falsch geht.

    das ist ne ganz schön große Abweichung. woran kann das liegen?

    ich würde ja mal vermuten, das der interrupt zwar korekt funktioniert aber ebend ne mini sekunde ungenau geht und dadurch bei hoch rechnen und zählen sich fehler einschleichen. weil die ganzen werte habe ich mit dem tool rnavr berechnet. danke also mal das es stimmt

    mir würde am ende adann nur einfallen das ich die stunden anders hochrechne und dort ebend so 2-3 sekunden unter den tisch fallen lasse damit die zeit wieder stimmt, nur wäre das für mich keine richtige lösung.

    achja, das programm soll einfach eine zeit zählen, es läuft bis 9999h und so. deswegen sind halt bei 7h 20 sekunden fehler schon ne menge.

    hier mein Programm:

    Code:
    '********************************
    '*       Atmega8 mit 8MHz       *
    '*         Uhrenbeispiel        *
    '********************************
    
    $regfile "m8def.dat"
    $crystal = 8000000
    
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.2 , Rs = Portd.0
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    
    Dim S As Byte , M As Byte , H As Byte , G As Byte           'Zeit definieren
    S = 0
    M = 0
    H = 0
    G = 0
    
    Config Timer1 = Timer , Prescale = 256
    Const Timervorgabe = 34286
    
    On Timer1 Ontimer1
    Enable Timer1
    Enable Interrupts
    
    Cls
    
    Do
    
    Waitms 200
    Locate 1 , 1
    Lcd "UHR-Zeit"
    
    Locate 2 , 2
    Lcd ; G ;
    Locate 2 , 4
    Lcd ; H ;
    Locate 2 , 7
    Lcd ; M ;
    Locate 2 , 10
    Lcd ; S ;
    
    Loop
    
    
    '*******************************************************************************
    Ontimer1:
    
    Timer1 = Timervorgabe
    
    S = S + 1
         If S = 60 Then                                         'Sekunde
           S = 0
           M = M + 1
    
           If M = 60 Then                                       'Minute
           M = 0
           H = H + 1
             If H = 100 Then                                    'Zehner Stunde
             G = G + 1
    
               If G = 99 Then                                   'hunderter stunden
    
         End If
        End If
       End If
      End If
    
    Return
    '*******************************************************************************
    thx für eure hilfe

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Der interne Quarz des Mega 8 ist nicht so genau wie ein Externer.

    Schau doch mal ins Datenblatt, da steht die Abweichung drin.

    Viele Grüße

    Torsten

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Zitat Zitat von Olle_Filzlaus
    habe die uhr jetzt ne weile laufen lassen und rausbekommen das die ca nach 7 stunden ( da ist die nacht vorbei *grins*) 20sekunden falsch geht.

    das ist ne ganz schön große Abweichung. woran kann das liegen?
    Erstmal keine Panik.

    Grundsätzlich gehts ja richtig.
    Nun kommt die Feinabstimmung.

    Thorsten hats ja schon gesagt das der Interne Schwinger nicht gerade ein Muster an Genauigkeit ist was übrigens auch im Datenblatt behandelt wird.

    Wenn du deine Schaltung bei unterschiedlichen Temperaturen betreibst (Mal ne Nacht auffer Heizung bzw. im Gemüsefach vom Kühlschrank) wirst du feststellen das der interne Schwinger auch recht Temperaturabhängig ist.

    Für eine Anwendung die auf ein genaues Timing setzt ist ein genauerer Takt unbedingt nötig.
    Also ein Quarz ist da minimum.
    der wird dir schon bessere und Temperaturstabilere Werte liefern.
    Was dann noch an Ungenauigkeit übrigbleibt kannst du dann ausgleichen indem du ihn "ziehst".
    dh. mit einem kleinen Drehkondensator (Oder ausgemesenem Festkondensator) wird die Schwingfrequenz etwas angepasst.


    Dabei gilt natürlich auch hier die Regel des Aufwandes.
    Je genauer du es brauchst desto mehr must du anstellen.

    Die Steigerung für einen quarz ist ein Qarzofen (Ein Kästchen in dem die Temperatur konstant gehalten wird) oder ein speziell Kompensierter Schwinger.
    Natürlich schlägt das im Preis nieder also sollte man sich genau überlegen was man braucht.

    Ich würde erstmal ,zwecks Erfahrungswerte,mit nem quarz und nem Trimmerkondensator anfangen.
    Gruß
    Ratber

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress