Hallo Ich habe ein Problem mit dem Attiny2313 und dem EEprom lesen/schreiben. Meine Routinne zu lesen: unsigned char EEGET(int location) { while(EECR & (1<<EEPE)); /* Check if EEPROM is ready*/ EEAR = location; /* Write EEPROM address register*/ EECR |= (1<<EERE); /* Set the read strobe*/ return EEDR; } und die zum schreiben: void EEPUT(int location, unsigned char byte) { while (EECR & (1<<EEPE)); /* Check if EEPROM is ready*/ EEAR = location; /* Write EEPROM address register*/ EEDR = byte; /* Write EEPROM data register*/ EECR |= (1<<EEMPE); /* Set master write enable signal*/ EECR |= (1<<EEPE); /* Set write strobe*/ } Beide Routinen sind die denem Handbuch zum attiny2312 ähnlich. Allerdings steht im Handbuch diese readRoutine: unsigned char EEPROM_read(unsigned int uiAddress) { /* Wait for completion of previous write */ while(EECR & (1<<EEWE)); /* Set up address register */ EEAR = uiAddress; /* Start eeprom read by writing EERE */ EECR |= (1<<EERE); /* Return data from data register */ return EEDR; } Das EEWE Bit gibt es aber meiner meinung nach nicht, ist wohl ein fehler... Wenn ich nun meine Routinen Teste mit: EEPUT(1,5); myDelay(); //mal kurz warten... if (EEGET(1)== 5) { PORTB |= (1<<PB3); } leuchtet die LED an PORTB3 nie... (ich kann sie manuell schalten, richtungsregister usw. alles i.o.). Ich bin am verzweiffeln mit diesem EEprom und hoffe auf Eure Hilfe! Ach ja, ich verwende einen externen 10Mhz Quaz zur Taktung des Tini2313, kann es sein das die 10Mhz Taktung das Problem für die EEprom zugriffe ist? Was muss ich evtl. noch einstellen das das mit dem 10MHz takt funktioniert? Vielen Dank schon mal... MfG dg1leo
Warum nimmst du nicht die fertigen EEPROM-Routinen aus der avr-libc?
Weil er erstmal seine avr-libc auf 1.2.5 hochziehen müsste...
Hallo, ich hatte vor kurzem auch ein Problem mit dem EEPROM beschreiben. (http://www.mikrocontroller.net/forum/read-2-253001.html) Hab auch alles so gemacht, wie es in dem Datenblatt stand. Dummerweise ging es trotzdem nicht. Wie vorhin von Jörg vorgeschlagen, hab ich die libc auf 1.2.5 gebracht und siehe da, die Standardroutinen fürs EEPROM haben auf einmal funktioniert. Warum und wie auch immer: es hat geholfen. Was ich nicht ausprobiert habe, die Routinen in Assembler zu schreiben.
Dank euch... Ich hab den Fehler gefunden, es hing bei mir dann doch mit der takfrequenz zusammen. Ich hatte mein makefile für das projekt per editor richtig angepasst (10MHz) und in das von avr studio 4 angelegte verzeichniss gespeichert. Allerdings hatte mir wohl avr-studion beim builden das makefile geändert, da ich unter den projektoptionen im avr-studio nicht noch mal extra die 10MHz angegeben hatte... Die avr-libc hatte ich schon auf den stand 1.2.5 gebracht nachdem ich beim suchen nach lösungen für mein problem schon über den thread gestossen bin, hatte aber auch nichts geändert. Da ich aber genau wissen wollte was wann wie passiert hab ich zunächst die EEPUT und EEGET routine verwendet. Ich geh mal stark davon aus das jetzt die EEprom-Routinnen auch funktionieren. Habt Dank... Leo
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.