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...
was heisst denn kaporus? Ich kanns mir zwar denken, was du meinst - aber welche Sprache ist denn das?
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.