Avatar billede oleoleo1 Nybegynder
02. april 2008 - 17:35 Der er 1 kommentar og
1 løsning

Programere EEPROM til Atmega8515L

Hej eksperter (forhåbentlig)..

Jeg sidder og roder med et projekt i C, på en Atmel Atmega8515L (denne sad på boardet, og ligenu skal jeg bare i gang, så kan det være jeg skifter processor senere).

Er der nogen som ved hvordan man skriver og læser til EEPROM'en? jeg har databladet og der står følgende (tilsyneladende halve?) eksempel:

cSREG = SREG; /* store SREG value */
/* disable interrupts during timed sequence */
_CLI();  //disabler alle interrupts immidiately (har jeg læst
        // idatablad)

EECR |= (1<<EEMWE); /* start EEPROM write */
EECR |= (1<<EEWE);

/*Det er så her jeg antager at man skal skrive til en adresse, og skrive noget data, men hvordan??, og hvorfor bliver _CLI() ikke kørt igen til sidst, interrupts'ne skal vel slåes til igen?*/

SREG = cSREG; /* restore SREG value (I-bit) */
Avatar billede oleoleo1 Nybegynder
03. april 2008 - 08:23 #1
Never mind! Jeg har fundet de fede tutorialzzz: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=61728
(du skal nok være oprettet som bruger for at se dem)..
Avatar billede oleoleo1 Nybegynder
05. april 2008 - 09:38 #2
//----HELLO EEPROM (eqipment: Stk500/Atmega8515L) --------

#include <avr/io.h>
#include <avr/eeprom.h>
#define switches PIND
#define leds PORTB

uint8_t EEMEM addr;
unsigned char testChar = 110;  //= 0x6E = 0110 1110
uint8_t recieveDataByte;

enum
{   
    //setting up the leds, so we can use them as a 'display'
    ld1 = (unsigned char) ~0x01,
    ld2 = (unsigned char) ~0x02,
    ld3 = (unsigned char) ~0x04,
    ld4 = (unsigned char) ~0x08,
    ld5 = (unsigned char) ~0x10,
    ld6 = (unsigned char) ~0x20,
    ld7 = (unsigned char) ~0x40,
    ld8 = (unsigned char) ~0x80,
    ldOff = 0xFF
   
};

void pause()
{
    int i;
    for (i = 0; i<5; i++);
}


int main()
{
    DDRB = 0xFF;  //PORTB out

    eeprom_write_byte(&addr, testChar);  //writing 'testChar' to the EEPROM on adr. 'addr'

    pause();                         //just to be safe

    recieveDataByte = eeprom_read_byte((uint8_t*)&addr); //reading from the EEPROM at adr. 'addr'
   
   
    leds = ~recieveDataByte; //show value on leds (should be 110 = 0x6E = 0110 1110)
   

    return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester