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
> Ich verstehe kein Wort, was willst du???
eine Zeitschaltuhr in Assembler programieren.
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
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
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
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
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?
Hi Der EEPROM wird beim Programmieren des Flashs gelöscht. Das kann man vermeiden, in dem man das EESAVE-Fusebit setzt. MfG Spess
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...'
Hi Im Prinzip ja. Aber ich kenne PonyProg nicht. Da müssten andere helfen. MfG Spess
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.