mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeitschaltuhr ASM Atmega8


Autor: Axel H. (mf-futzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

seit einigen Monaten beschäftige ich mich jetzt mit dem Atmega8 und dem 
Assembler-Tutorial. Ich habe jetzt als erstes Projekt eine Uhr mit 
LCD-Anzeige fertiggestellt, an der ich über 4 Tasten auch Uhrzeit und 
Datum einstellen kann.
Jetzt würde ich meine Uhr gerne als Zeitschaltuhr erweitern. Ich habe 
hier schon im Forum gesucht, aber nichts Passendes gefunden.
Das Meisste ist in C ;-)

Also nach meiner Überlegung brauche ich dazu den Wochentag, die Uhrzeit 
und die Einschaltdauer. Diese Daten muss ich dann im Eeprom ablegen:
Tag, Std, Min, Dauer
1,16,5,10  (für Montag, 16:05 Uhr, Einschaltdauer 10 Min.)
2,6,20,5   (für Dienstag, 6:20 Uhr, Einschaltdauer 5 Min.)

Ist das so richtig? Muss ich dann jede Minute die aktuelle Uhrzeit (und 
Wochentag) mit allen Einträgen im Eeprom vergleichen? Wieviele Einträge 
passen dann in den Eeprom? (Atmega8, Eeprom 512 byte)

Also ich will natürlich keine Anleitung von Euch, sondern nur wissen, ob 
meine Überlegungen in die richtige Richtung gehen.


Danke im Voraus

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe kein Wort, was willst du???

Autor: Axel H. (mf-futzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich verstehe kein Wort, was willst du???

eine Zeitschaltuhr in Assembler programieren.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wochentag,Stunde und Minute brauchen je ein Byte. Wenn die 
Einschaltdauer 255 min nicht überschreitet dann auch nur ein Byte, also 
zusammen 4. Ansonsten bei maximal 65535 min 5 Bytes. Den Rest kannst du 
dir ausrechnen.
An deiner Stelle wurde ich die Zeiten beim Programmstart aus dem EEPROM 
in den RAM laden und nur bei Änderungen auf den EEPROM zugreifen.

MfG Spess

Autor: Axel H. (mf-futzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Spess,

danke für deine Antwort. Das mit dem RAM ist eine gute Idee. Also dann 
werd ich mich mal am Eeprom versuchen. Hab bis jetzt noch nichts damit 
gemacht. Mal sehen, ob ich mit dem Tutorial klarkomme.
(Für die Einschaltdauer werde ich auf jeden Fall 2 Bytes verwenden, 
damit ich auch z.B. mal 8 Std schalten kann).

VG Axel

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du kannst auch die Routinen aus dem Datenblatt verwenden.
Übrigens würde ich beim Übertragen der EEPROM-Daten in den RAM, diese 
gleich zu sortieren. Das erleichtert die spätere Abarbeitung.

MfG Spess

Autor: Axel H. (mf-futzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich brauche nochmal Eure Hilfe. Ich habe nach Vorlage der AVR 
Application Note(AVR 100 Accessing the EEPROM) folgenden Code in meinen 
Atmega8 geladen (Auszug):

...
main:

;-------------- Einzelnen Tastendruckauswerten -----------------
        cli
        mov     temp1, key_press
        clr     key_press
        sei


        cpi     temp1, 1<<Taste1       ; wenn Taste 1 gedrückt wurde
        breq    EEPROM_read

        cpi     temp1, 1<<Taste2       ; wenn Taste 2 gedrückt wurde
        breq    EEPROM_write

        rjmp     main

;----------------------------------------------------------------------- 
---------
EEPROM_write:
        sbic    EECR, EEWE
        rjmp    EEPROM_write

        ldi     r18, high(daten)
        out     EEARH, r18
        ldi     r17, low(daten)
        out     EEARL, r17

        out     EEDR, r16

        cli                                     ; Interrupts ausschalten

        sbi     EECR, EEMWE
        sbi     EECR, EEWE

        sei                                     ; Interrups einschalten

        ret
; 
------------------------------------------------------------------------ 
-------

EEPROM_read:
        sbic    EECR, EEWE                      ; EEWE = 0?
        rjmp    EEPROM_read

        ldi     r16, high(daten)
        out     EEARH, r16
        ldi     r16, low(daten)
        out     EEARL, r16

        sbic    EECR, EEWE      ; set EERE

        in      r16, EEDR      ; Daten in r16 laden
        out     led_port, r16                   ; 0b01010101 in LEDs 
ausgeben


        ret
; 
------------------------------------------------------------------------ 
-------
...

Also nach meinem Plan sollte beim Drücken der Taste 2 das Muster 
0b01010101 in den EEPROM geladen werden, und beim Drücken von Taste 1 
vom EEPROM gelesen werden. D.h. ich habe am PortC Leds angeschlossen. 
Das Datenmuster sollte nun in den Leds erscheinen. Tut's aber leider 
nicht :-(
Also die Tasten habe ich zuvor mit Leds geprüft. Die reagieren auf 
Tastendruck. Weis jemand, was ich falsch gemacht habe?

Danke im Voraus

Autor: Axel H. (mf-futzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also mit meinem Eeprom komme ich einfach nicht weiter :-(
Ich lade mit Ponyprog die eep-Datei in das eeprom (ich kann auch im 
PonyProg-Fenster die Daten im Hex-Format sehen).

Wenn ich dann aber in PonyProg ein neues Fenster öffne und die Daten aus 
dem Eeprom wieder lade, wird nur 'FF FF...' angezeigt, d.h. der Eeprom 
ist leer???

Was mach ich nur falsch?

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Der EEPROM wird beim Programmieren des Flashs gelöscht. Das kann man 
vermeiden, in dem man das EESAVE-Fusebit setzt.

MfG Spess

Autor: Axel H. (mf-futzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Spess,

das EESAVE-bit hatte ich schon gesetzt. Also sofort nach dem Brennen in 
den Eeprom lese ich wieder zurück nach PonyProg (Read Data Memory 
EEPROM). Da müsste ich die Daten doch sehen, oder??? Aber alles 'FF 
FF...'

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Im Prinzip ja. Aber ich kenne PonyProg nicht. Da müssten andere helfen.

MfG Spess

Autor: Axel H. (mf-futzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also das Schreiben des Eeproms per Tastendruck habe ich nun hinbekommen. 
Ausserdem muss man im PonyProg-Fenster mit der Laufleiste nach unten 
fahren. Dort stehen die ' blauen FF's ' und meine Datenbytes sind dort 
sichtbar.

Aber das Vorbelegen des Eeprom mit brennen der eep-Datei klappt leider 
noch nicht.

Als nächstes stellt sich für mich die Frage, wie ich die Daten vom 
Eeprom in den SRAM bekomme. Ganz zu Schweigen dabei zu Sortieren. Klar 
ist mir nur , dass ich das nur einmal beim Programm-Start durchführen 
muss. Wenn ich das richtig verstanden habe, dann müssten auch alle Daten 
des Eeprom (512Byte) in den SRAM passen (1k Byte).

Für einige Tipps wäre ich sehr dankbar.


Axel

Autor: Axel H. (mf-futzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

also das Vorbelegen des Eeproms hab' ich mittlerweile auch hinbekommen. 
War mein Fehler. Im PonyProg muss die eep-Datei mit der Taste 'Open Data 
Memory File' geöffnet werden. Ich hatte zuvor die 'normale' Öffnen-Taste 
(Open Device File) verwendet.

Wenn mir jetzt noch jemand einen Tipp geben könnte, wie man die Daten 
vom Eeprom in den SRAM bekommt, wäre ich sehr dankbar.


Axel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.