-
        

Ergebnis 1 bis 2 von 2

Thema: Problem mit Atmega-EEPROM

  1. #1

    Problem mit Atmega-EEPROM

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    51
    Beiträge
    247
    Hallo

    Anscheinend arbeitest du mit einer alten Version von WINAVR.

    Code:
     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

    Code:
    DDRD |= (1<<PD5);


    Code:
    EEPROM_read(0x00);
    Das paßt nicht zu deiner Funktions Deklaration.

    Probier das mal so

    Code:
     OCR1A = EEPROM_read(0x00);
    Arbeite auch mit dem Code aus dem Datenblatt und es klappt ohne Probleme.

    Gruß
    Dieter

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •