schamp
03.08.2005, 08:47
Hi Leutz !
Versuch hier grad was ins EEPROM vom Mega88 zu schreiben und dieses dann wieder auszulesen. Die ausgelesenen Werte werden dann einfach ans Terminal geschickt.
Die Funktionen EEPROM_write und EEPROM_read hab ich aus dem Datenblatt.
Leider erscheint nichts am Terminal... :-k
Hab auch schonmal das EEPROM Hexfile mit AVR Studio ausgelesen, welches aber dann nicht wirklich so aussieht wie ichs eigntlich erwarten würde.
Könnt ihr ma drüberschauen ??
#include <iom88.h>
#include <ina90.h>
#include "sw_uart.h"
void EEPROM_write(unsigned int adress, char data);
char EEPROM_read(unsigned int adress);
__task void main(void)
{
unsigned int adresse=0;
char datenbyte=0;
char byte1=0;
char byte2=0;
char byte3=0;
char byte4=0;
__enable_interrupt();
/* AFFE ins EEPROM schreiben */
adresse = 0x0000;
datenbyte = 0x0A;
EEPROM_write(adresse, datenbyte);
adresse = 0x0008;
datenbyte = 0x0F;
EEPROM_write(adresse, datenbyte);
adresse = 0x0010;
datenbyte = 0x0F;
EEPROM_write(adresse, datenbyte);
adresse = 0x0018;
datenbyte = 0x0E;
EEPROM_write(adresse, datenbyte);
/* AFFE wieder auslesen */
byte1 = EEPROM_read(0x0000);
byte2 = EEPROM_read(0x0008);
byte3 = EEPROM_read(0x0010);
byte4 = EEPROM_read(0x0018);
/* und ans Terminal senden */
while(1)
{
send_one_byte(byte1);
send_one_byte(byte2);
send_one_byte(byte3);
send_one_byte(byte4);
send_one_byte('\r');
send_one_byte('\n');
}
}
void EEPROM_write(unsigned int adress, char data)
{
/* Warten bis vorheriger Schreibvorgang beendet */
while(EECR & (1<<EEPE));
EEAR = adress; // Adresse an der das Byte im EEPROM geschrieben werden soll
EEDR = data; // Datenbyte, welches im EEPROM gespeichert werden soll
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE); // Starte EEPROM Write
}
char EEPROM_read(unsigned int adress)
{
while(EECR & (1<<EEPE));
EEAR = adress; // Adresse an der Byte im EEPROM ausgelesen werden soll
EECR |= (1<<EERE); // Auslesen starten
return EEDR;
}
Gruß schamp
Versuch hier grad was ins EEPROM vom Mega88 zu schreiben und dieses dann wieder auszulesen. Die ausgelesenen Werte werden dann einfach ans Terminal geschickt.
Die Funktionen EEPROM_write und EEPROM_read hab ich aus dem Datenblatt.
Leider erscheint nichts am Terminal... :-k
Hab auch schonmal das EEPROM Hexfile mit AVR Studio ausgelesen, welches aber dann nicht wirklich so aussieht wie ichs eigntlich erwarten würde.
Könnt ihr ma drüberschauen ??
#include <iom88.h>
#include <ina90.h>
#include "sw_uart.h"
void EEPROM_write(unsigned int adress, char data);
char EEPROM_read(unsigned int adress);
__task void main(void)
{
unsigned int adresse=0;
char datenbyte=0;
char byte1=0;
char byte2=0;
char byte3=0;
char byte4=0;
__enable_interrupt();
/* AFFE ins EEPROM schreiben */
adresse = 0x0000;
datenbyte = 0x0A;
EEPROM_write(adresse, datenbyte);
adresse = 0x0008;
datenbyte = 0x0F;
EEPROM_write(adresse, datenbyte);
adresse = 0x0010;
datenbyte = 0x0F;
EEPROM_write(adresse, datenbyte);
adresse = 0x0018;
datenbyte = 0x0E;
EEPROM_write(adresse, datenbyte);
/* AFFE wieder auslesen */
byte1 = EEPROM_read(0x0000);
byte2 = EEPROM_read(0x0008);
byte3 = EEPROM_read(0x0010);
byte4 = EEPROM_read(0x0018);
/* und ans Terminal senden */
while(1)
{
send_one_byte(byte1);
send_one_byte(byte2);
send_one_byte(byte3);
send_one_byte(byte4);
send_one_byte('\r');
send_one_byte('\n');
}
}
void EEPROM_write(unsigned int adress, char data)
{
/* Warten bis vorheriger Schreibvorgang beendet */
while(EECR & (1<<EEPE));
EEAR = adress; // Adresse an der das Byte im EEPROM geschrieben werden soll
EEDR = data; // Datenbyte, welches im EEPROM gespeichert werden soll
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE); // Starte EEPROM Write
}
char EEPROM_read(unsigned int adress)
{
while(EECR & (1<<EEPE));
EEAR = adress; // Adresse an der Byte im EEPROM ausgelesen werden soll
EECR |= (1<<EERE); // Auslesen starten
return EEDR;
}
Gruß schamp