Hallo zusammen,
ich versuche leider weit einiger Zeit vergeblich, das EEPROM meines Atmegas anzusprechen. Das Problem ist, dass der Code aus dem Datenblatt kommt, aber trotzdem irgendetwas falsch läuft. In dem Beispielprogramm wird das EEPROM beschrieben, ausgelesen und das Ergebnis als PWM-Signal ausgegeben - was bei mir immer 0x00 ist.
Hier der Code:
#include <avr/io.h>
void pwm_init (void);
void EEPROM_write (unsigned short EEPROM_adresse, unsigned char EEPROM_data);
unsigned char EEPROM_read (unsigned short EEPROM_adresse);
int main(void)
{
pwm_init();
EEPROM_write(0x00,0xF0);
EEPROM_read(0x00);
OCR1A = EEDR;
for(;;
} //End of main
void pwm_init (void)
{
sbi(DDRD,PD5);
sbi(PORTD,PD5);
TCCR1A = _BV(WGM10) | _BV(COM1A1) | _BV(COM1A0) |_BV(COM1B1) | _BV(COM1B0);
TCCR1B = _BV(CS11) | _BV(WGM12);
} //End of pwm_init
void EEPROM_write (unsigned short EEPROM_adresse, unsigned char EEPROM_data)
{
while (EECR & (1<<EEWE));
EEAR = EEPROM_adresse;
EEDR = EEPROM_data;
EECR |= (1<<EEMWE);
EECR |= (1<<EEWE);
}
unsigned char EEPROM_read (unsigned short EEPROM_adresse)
{
while (EECR & (1<<EEWE));
EEAR = EEPROM_adresse;
EECR |= (1<<EERE);
return EEDR;
}
Gruß
Christoph
Hallo
Anscheinend arbeitest du mit einer alten Version von WINAVR.
Da sollte normalerweise Fehlermeldungen kommen, da es diese Befehle in der neuen Version nicht mehr gibt.Code:sbi(DDRD,PD5); sbi(PORTD,PD5);
Heute schreibt man das so
Code:DDRD |= (1<<PD5);
Das paßt nicht zu deiner Funktions Deklaration.Code:EEPROM_read(0x00);
Probier das mal so
Arbeite auch mit dem Code aus dem Datenblatt und es klappt ohne Probleme.Code:OCR1A = EEPROM_read(0x00);
Gruß
Dieter
Lesezeichen