PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Atmega-EEPROM



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

Dino Dieter
03.04.2005, 16:28
Hallo

Anscheinend arbeitest du mit einer alten Version von WINAVR.


sbi(DDRD,PD5);
sbi(PORTD,PD5);

Da sollte normalerweise Fehlermeldungen kommen, da es diese Befehle in der neuen Version nicht mehr gibt.

Heute schreibt man das so


DDRD |= (1<<PD5);




EEPROM_read(0x00);

Das paßt nicht zu deiner Funktions Deklaration.

Probier das mal so


OCR1A = EEPROM_read(0x00);

Arbeite auch mit dem Code aus dem Datenblatt und es klappt ohne Probleme.

Gruß
Dieter