Hallo zusammen, ich als absoluter µC Neuling weiss nicht mehr weiter und brauche einen guten Rat. Mein Problem, ich bekomme diesen Code auf dem mega8 nicht zum laufen: .include "m8def.inc" ldi R16, 0xFF out DDRB, R16 ; Port B: Ausgang ldi r16, HIGH(daten) ; Adresse laden out EEARH, r16 ldi r16, LOW(daten) out EEARL, r16 sbi EECR, EERE ; Lesevorgang aktivieren in r16, EEDR out PORTB, r16 loop: rjmp loop .eseg daten: .db 0b10101010 dieser ist aus dem Beispiel des AVR-Tutorials, und sollte ja eigentlich laufen. Ich benutze AVR-Studio 4.12 SP3 und PonyProg 2000 Vers.2.06f Beta. Sowohl in der Simulation als auch auf dem µC kein Erfolg. Was mache ich falsch??? Bin über jegliche Infos sehr sehr dankbar. Gruß happeen
google sagt: sbi EECR,EERE ; read enable _eee1: in temp,EECR andi temp,EERE tst temp brne _eee1 in temp,EEDR Fazit: Du muß wohl warten bis das Byte da ist...
danke für die Info, ein guter Tip, leider hat es auch trotz Schleife nicht funktioniert. Laut I/O View im AVR-Studio scheint das EECR-Register nicht zu reagieren. Ich habe versucht, es mit EERE bzw. mit 0 zu beschreiben, leider kein Erfolg. An was kann das liegen? Kann es an AVR-Studio 4.12 SP3 liegen? --brauche Hilfe--
Hallo, Die folgende Funktion habe ich für den mega16 geschrieben, sie funktioniert auch auf einem mega128: .def gen1 = r16 .def gen2 = r17 .def gen3 = r18 .def gen4 = r19 eeprom_read: ; gen2:gen1 (in): address ; gen1 (out): data push gen3 ; eeprom access is timing critical ; disable interrupts in gen3, SREG cli ; read eeprom out EEARH, gen2 out EEARL, gen1 sbi EECR, EERE in gen1, EEDR ; restore interrupts out SREG, gen3 pop gen3 ret Eventuell kannst Du ein anderes Ausgaberegister verwenden, um die Leseadresse nicht zu zerstören. Gruß, Roland
Hallo Roland, danke für deine Antwort, leider wachsen die meinigen µC-Kenntnisse nur langsam, aber hoffentlich sicher. Also, dein Programmvorschlag habe ich leider nicht verstanden (da fehlen mir wohl noch so einige Stunden der Zweisamkeit mit google und Co). Jedoch ein kleiner Erfolg war da. Wer lesen kann ist klar im Vorteil, so habe ich diesmal das hiesige Beispiel aus dem Tutorial richtig abgeschrieben, und siehe da, es tut, zumindest im Simulator. .include "m8def.inc" ldi R16, 0xFF out DDRB, R16 ; Port B: Ausgang ldi r16, HIGH(daten) ; Adresse laden out EEARH, r16 ldi r16, LOW(daten) out EEARL, r16 sbi EECR, EERE ; Lesevorgang aktivieren _eee1: sbic EECR, 1 ; ... und auf das EEPROM warten rjmp _eee1 in R16,EEDR out PORTB, R16 loop: rjmp loop .eseg daten: .db 0b10101010 nun muss mir bloß noch jemand sagen, wie um Gottes Hilfe ich des µC's eeprom dazu überreden kann, auch das anzuzeigen was ich möchte. Fuse-Bits sind wohl richtig. Keine Ahnung, gibt es noch eine Alternative zu PonyProg? gruß happeen
juhu, mit YAAP hat's funktioniert (mit dem Pony leider nicht), nun weiss ich auch das, danke für die Hilfe Gruß happeen
Die Schleife sbic EECR, 1 rjmp _eee1 kannst Du Dir vorerst sparen. Die wartet nämlich auf die Vervollständigung einer evtl. vorhergehenden Schreiboperation. Da es diese bei Dir nicht gibt, kannst Du das weglassen. Und wenn Du sie behalten willst, solltest Du sie vor den Start des Lesevorgangs verschieben. Aus dem mega8 Datenblatt S. 19: The EEPROM read access takes one instruction, and the requested data is available immediately. When the EEPROM is read, the CPU is halted for four cycles before the next instruction is executed. .include "m8def.inc" ldi r16, 0xff out DDRB, r16 ; Port B: Ausgang ldi r16, LOW(daten) ; Adresse laden ldi r17, HIGH(daten) out EEARL, r16 out EEARH, r17 sbi EECR, EERE ; Lesevorgang aktivieren in r16, EEDR out PORTB, r16 loop: rjmp loop .eseg daten: .db 0b10101010 .cseg
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.