- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Mega8 als Uhr über LCD?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162

    Mega8 als Uhr über LCD?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Servus!

    Ich will mir für mein Terrarium eine einstellbare Zeitschaltuhr basteln, die mehrere Verbraucher ein/aus schaltet.

    Folgendes Problem - die Uhr.

    Ich will keine DCF77-Dekodierung machen, da aufwändig + Speicherintensiv (Bascom-Beispiel aus RNWissen belegte ca. 48 % des AVR). Jetzt hab ich mal ganz simpel eine Do Loop (Wait 1) Schleife programmiert, die mir jede Sekunde die Sek.-Var. um 1 erhöht, dann bei 59 die Min.-Var. um ein erhöht, usw.
    Ich hab die Schaltung um 19.30h gestartet. Als es auf meiner Uhr dann 21.50h war, hat die "AVR-Uhr" 21.42h angezeigt. Also ein Zeitunterschied von ca. 8 min.

    Wie könnte ich das Problem lösen, das ich zwar eine genaue Uhr haben will, aber nicht über DCF77 gehen muss?
    Ich hab mir schon überlegt, ich könnte einen Uhrenbaustein holen, den dann über den INT0 vom Mega8 laufen lassen. Bei jeden INT0 (also jede Sekunde) soll er mir dann die Sek.-Var. um 1 erhöhen, usw. Wenn diese Idee laut eurem ermessen gut ist, welchen Uhrenbaustein sollte ich nehmen? Oder hat jemand noch eine bessere Idee?

    mfg,
    CapSob.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2006
    Ort
    Gratkorn
    Alter
    35
    Beiträge
    207

  3. #3

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    das mit der softclock hört sich meines erachtens nach sehr interessant an. muss ich aber dann eine 32.xx kHz quarz oder kann ich auch den internen 1MHz / externen 16 MHz quarz nehmen? hättest du eine bsp.-schaltung?

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    51
    Beiträge
    2.253
    der Quaz 32,768KHz kommt zusätzlich zum Quarz für die CPU dran.
    Du kannst auch die Takterzeugung intern mit RC auf 1MHz laufen lassen, das juckt
    die Softclock mit dem 32,768KHz nicht weiter.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    54
    Beiträge
    2.807
    kommt zusätzlich zum Quarz für die CPU
    ...nein, das stimmt nicht - er kommt stattdessen an die Pins XTAL1/2

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2006
    Ort
    Gratkorn
    Alter
    35
    Beiträge
    207
    Schau mal in meinem Link, der braucht keinen zusätzlichen Quarz....

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    51
    Beiträge
    2.253
    halt Moment, stimmt, wir sind ja bei Mega8, ich war gerade beim
    Mega16. Beim Mega8 kommt der Uhrenquarz an
    TOSC1 / TOSC2, die pinidentisch mit XTAL1 und XTAL2 sind,
    nur dann halt ohne externe Kapazitäten.

    Datenblatt:
    For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the
    crystal is connected directly between the pins. By programming the CKOPT Fuse, the
    user can enable internal capacitors on XTAL1 and XTAL2, thereby removing the need
    for external capacitors. The Oscillator is optimized for use with a 32.768 kHz watch crystal.
    Applying an external clock source to TOSC1 is not recommended.
    In dem Fall geht halt der Systemtakt nur noch mit RC-Osz bis 8MHz
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    also sozusagen klemm ich den uhrenquarz (32.768 kHz) ohne kondensatoren zwischen xtal1 und xtal2, lass den uC mit 1 MHz laufen (ist bei der anwendung kein prob) und hab dann mit der softclock eine genaue uhr? hört sich sehr gut an! muss jetzt bloß mal schauen, wo ich so nen "uhrenquarz" herbekomme.

    @Razer: sorry, aber die rechnung ist mir um die zeit irgendwie zu kompliziert, und von c hab ich keine ahnung, deswegen fällt mir auch die interpretation sehr schwer. trotzdem danke für deinen post.

    edit: uhrenquarz, reichelt, best.nr. 0,032768, preis: 0,14 euro.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    gut, die schaltung ist soweit aufgebaut.

    - mega8 in auslieferungszustand
    - ein 20*4 lcd ist erfolgreich angeschloseen
    - ein uhrenquarz (32, 7... kHz) ist an xtal angeschlossen ohne externe kondensatoren

    hier mein code:
    Code:
    ' +-------------------------------------------------------------------------------+
    ' | Projektname: Terrarium Kontroll Einheit                                       |
    ' | Projektbeschreibung: Steuereinheit mit Temperaturmessung und Relaissteuerung. |
    ' |                      Zeitsteuerung über Softclock und Uhrenquarz              |
    ' |                                                                               |
    ' | Dateiname: tke.bas                                                            |
    ' | Version: 0.2                                                                  |
    ' |                                                                               |
    ' | Author: René Brixel                                                           |
    ' | Kontakt: rbrixel@capsob.de                                                    |
    ' |                                                                               |
    ' | Start des Projekts: 27.04.2007                                                |
    ' | Ende des Projekts:  --.--.----                                                |
    ' +-------------------------------------------------------------------------------+
    
    '--------------- AVR Einstellungen ---------------
    $regfile = "m8def.dat"                                      'AVR ATMega 8...
    $crystal = 1000000                                          '...mit internen 1 MHz
    Config Date = Mdy , Separator = /
    Config Clock = Soft
    Enable Interrupts
    
    '--------------- PORT Einstellungen ---------------
    Ddrb = &B00000000                                           '1 = Ausgang; 0 = Eingang
    Portb = &B00000001                                          'Wenn Eingang, dann 1 = PullUp aktiviert
    
    Ddrd = &B01111111                                           '1 = Ausgang; 0 = Eingang
    Portd = &B10000000                                          'Wenn Eingang, dann 1 = PullUp aktiviert
    
    Taster_enter Alias Pind.7                                   'Taster Enter / Set
    Taster_menu Alias Pinb.0                                    'Taster Setup / Menu
    
    '--------------- LCD Einstellungen ---------------
    Config Lcd = 20 * 4                                         'Ein 20 * 4 Zeilen LCD
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.6
    Config Lcdbus = 4                                           '4 Bit Modus
    Cursor Off                                                  'Cursor des LCDs ausschalten
    
    '--------------- Variablen Deklaration ---------------
    Time$ = "00:00:00"                                          'Setzen auf Startwert
    Date$ = "00/00/00"                                          'Setzen auf Startwert
    
    '--------------- HAUPTPROGRAMM ---------------
    Do
       Locate 1 , 1
       Lcd Time$                                                'Zeige Zeit in Zeile1
       Locate 2 , 1
       Lcd _day ; "/" ; _month ; "/0" ; _year                   'Zeige Datum in Form DD/MM/YY in Zeile2
    
       If Taster_menu = 0 Then Gosub Time                       'wiederhole Anzeige bis Taster 1 zum Stellen gedrückt, springe nach Sub "Time"
       Waitms 200
    Loop
    End
    
    'Stunde
    Time:
    Waitms 200
    Cls                                                         'lösche Zeilen
    Do
    Locate 1 , 1
    Lcd "Stunde einstellen:"                                    'Stunden setzen
    Locate 2 , 1
    Lcd _hour
             If Taster_enter = 0 Then                           'Mit Taster 2
               Incr _hour                                       'hochzählen
               Locate 2 , 1
               Lcd _hour
               Waitms 200
             End If
    If _hour > 23 Then                                          'Zählt bis Max, danach wieder ab 0
    Cls
    _hour = 00
    End If                                                      'solange, bis Taster 1 gedrückt
    Loop Until Taster_menu = 0
    Waitms 200
    
    'Minute
    Cls
    Do
    Locate 1 , 1
    Lcd "Minute einstellen:"
    Locate 2 , 1
    Lcd _min
             If Taster_enter = 0 Then
               Incr _min
               Locate 2 , 1
               Lcd _min
               Waitms 200
             End If
    If _min > 59 Then
    Cls
    _min = 00
    End If
    Loop Until Taster_menu = 0
    Waitms 200
    Cls
    
    'Tag
    Cls
    Do
    Locate 1 , 1
    Lcd "Tag einstellen:"
    Locate 2 , 1
    Lcd _day
             If Taster_enter = 0 Then
               Incr _day
               Locate 2 , 1
               Lcd _day
               Waitms 200
             End If
    If _day > 31 Then
    Cls
    _day = 01
    End If
    Loop Until Taster_menu = 0
    Waitms 200
    Cls
    
    'Monat
    Cls
    Do
    Locate 1 , 1
    Lcd "Monat einstellen:"
    Locate 2 , 1
    Lcd _month
             If Taster_enter = 0 Then
               Incr _month
               Locate 2 , 1
               Lcd _month
               Waitms 200
             End If
    If _month > 12 Then
    Cls
    _month = 01
    End If
    Loop Until Taster_menu = 0
    Waitms 200
    Cls
    
    'Jahr
    Cls
    Do
    Locate 1 , 1
    Lcd "Jahr einstellen:"
    Locate 2 , 1
    Lcd _year
             If Taster_enter = 0 Then
               Incr _year
               Locate 2 , 1
               Lcd _year
               Waitms 200
             End If
    If _year > 10 Then
    Cls
    _year = 00
    End If
    Loop Until Taster_menu = 0
    Waitms 200
    Cls
    
    _sec = 00                                                   'Springe Nach Setzen Von Zeit / Datum Wieder Zurueck
    Return
    thx an andree-hb.

    PROBLEM: die uhr lässt sich zwar einstellen, aber die zeit wird nich hochgezählt. sozusagen - die uhr steht. hat jemand eine idee?

    cap.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests