Budel
03.04.2005, 16:35
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
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