ich wollte Daten in das EEPROm meines ATmega 16s schreiben um diese dann
am PC auszulesen.
Doch obwohl die LED-Anzeige das Beenden des Programmes angezeigt hat,
zeigt Ponyprog den Speicher als leer an, wenn man den Blauen Teil der
geladenen Daten als EEPRom verstehen kann.
Der Code ist:
.include "m16def.inc"
Ldi r16, 0XFF
.def temp = r16
out DDRA, r16
ldi temp, LOW(RAMEND) ; LOW-Byte der obersten
RAM-Adresse
out SPL, temp
ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten
RAM-Adresse
out SPH, temp
call Verzoegerung
LDI r16, 0b00100000
Out PortA, r16
LDI r20, 0xF0
Write: SBIC EECR,EEWE
RJMP Write
LDI r16,0
LDI r17,0
OUT EEARH,r16
OUT EEARL,r17
OUT EEDR,r20
SBI EECR,EEWE
LDI r16, 0b00010000
Out PortA, r16
end:
jmp end
Verzoegerung:
push r16
push r17
push r18
ldi r16,20
Schlr16:
ldi r17,255
Schlr17:
ldi r18,255
Schlr18:
nop
dec r18
BRNE Schlr18
dec r17
BRNE Schlr17
dec r16
BRNE Schlr16
pop r18
pop r17
pop r16
ret
Oder kann Pony Prog den EEprom gar nicht richtig auslesen und zeigt mir
deshalb nur FF?
Du hast vergessen, das Master-Write-Bit (EEMWE) vor dem EEWE zu setzen:
SBI EECR,EEMWE ;Erst Schreibschutz deaktivieren
SBI EECR,EEWE ;Dann innerhalb von 4 Takten schreiben
Steht auch im Datasheet:
The EEMWE bit determines whether setting EEWE to one causes the EEPROM
to be written. When EEMWE is set, setting EEWE within four clock cycles
will write data to the EEPROM at the selected address If EEMWE is zero,
setting EEWE will have no effect.
When EEMWE has been written to one by software, hardware clears the bit
to zero after four clock cycles. See the description of the EEWE bit for
an EEPROM write procedure.
MfG
Andi
Also muss man diesen Internen Speicher wie einen Externen behandeln->
Erstmal Aktivieren, alle Daten anlegen und dann die Aktivierungsleitung
EEWE kurz auf High setzen.
Zum Wiederholen müsste man dann EEWE wieder löschen, neue Daten anlegen
und wieder auf High setzen, oder?
Danke!
P.S.: Kann man einen Avrbraten, indem man ihn in einen Sockel steckt, an
dem die Spannung angelegt ist und dann beim einsetzen sich für eine Sek
um einen Pin versieht?
Ich glaube nämlich einer meiner zwei AVRs ist jetzt hinüber und ich
weis nicht warum, wenn es nicht durch dieses zitterige reinsetzen
passiert ist.
Baldrian wäre nicht schlecht für Dich ;-)
Kann schon passieren das der AVR beim versetzten reinstöpseln in den
Sockel bei Power On defekt geht.
Man setzt auch erst mal 2 der äußeren Pins an, legt ihn flach auf alle
und dann rein.
Nach dem Schreib-Prozedere in das EEPROM mit setzten von EEMWE und EEWE
brauchst Du nix mehr machen.
Eine Prüfung, ob noch ein Schreibvorgang besteht, hast Du am Anfang
sowieso schon durch das Testen von EEWE.
Ist der Schreibvorgang beendet (von der Hardware), werden EEMWE und
EEWE automatisch auf 0 gesetzt.
Ich weis jetzt gerade nicht, wie lange ein Schreibvorgang (1 Byte)
dauert, aber es sind schon ein paar Millisekunden.
MfG
Andi
Der AVR ist anscheinend doch heil geblieben. Ich sollte mir mal richtige
Sockel kaufen, wo der Kontakt keine Glückssache ist grr
Danke für die Tipps. Jetzt kann ich alle Debuginfos, welche ich nicht
per LED ausgeben kann im EEPROM speichern, solange ich den code für das
Display am Schiftregister noch nicht fertig getippt habe :-)
Naja, Spannung aus, einsockeln, nochmal gucken, Spannung an ist auch
ziemlich sicher... Ach und bitte daran denken, daß das EEPROM nur etwa
100.000 Schreibzugriffe pro Speicherzelle verkraftet, also wenn Du
vergißt, die EEPROM-Adresse zu verändern und in einer zufälligen
Endlosschleife ständig die gleiche Zelle beschreibst, ist diese sehr
schnell kaporus und somit auf ewig aus dem EEPROM ausmaskiert...
Eine eigene Frage?
Dieser Thread ist über 21 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.