Exemplo EEPROM Code Vision

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Exemplo EEPROM Code Vision

Mensagempor tmarchesi2 » 07 Set 2008 19:53

BOm dia a Todos;

Alguém teria alguma rotina de escreita e leitura em C de como gravar na eeprom do atmega 8 com o compilador Code Vison ? Gostaria de algo simples e funcional.

Obrigados a todos


T+
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor Maurício » 07 Set 2008 22:15

Experimenta isto:

Código: Selecionar todos
#include <mega8.h>

eeprom char var;

void main ( void )
{
    char var_local;

    var = 0xFF;
    var_local = var;
    var_local = 0;
    var = var_local;
    while ( 1 );
}


xau.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor tmarchesi2 » 08 Set 2008 00:39

Está rotina seria de escrita ou leitura ?

Se possível me passe as duas, estou bem leigo neste assunto de memória, escrever, ler.


Muito grato pela ajuda;

Estou terminado de montar meu kit, e testarei a rotina


ABraço
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor Maurício » 08 Set 2008 04:12

Código: Selecionar todos
#include <mega8.h>

eeprom char var;

void main ( void )
{
    char var_local;

    var = 0xFF;    // ESCRITA
    var_local = var;    // LEITURA
    var_local = 0;
    var = var_local;    // ESCRITA
    while ( 1 );
}


[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor Maurício » 11 Set 2008 23:08

Ei, tmarchesi2.

Valeu a dica, hein?!?!

Deu tudo certo aqui!

Tou te mandando essa mensagem, só como um feedback, mesmo!

Tudo certinho!!

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor tmarchesi2 » 12 Set 2008 18:53

Boa tarde Mauricio;

A placa do meu Kit chegou esta semana,

Estou curioso pra testar a rotina !


Vou compilar no AVR Studio, e posto os resultados


Abraço
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor Maurício » 13 Set 2008 00:02

Ops!

Descurpem a nossa fáia! eheheheheheh

Mas é só isso, mesmo! AVR e CodeVision tornam as coisas tão simples, que chega a dar raiva!

Não sei de qual outro MCU vc veio, mas, vai ver que AVRs são OS CARAS! ehehehehehe

Boa sorte!

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor Nik » 19 Out 2012 14:53

Desculpem reabrir um tópico tão antigo, mas nesse exemplo mostrado não entendi como fazer para gravar num endereço específico da eeprom.

No meu caso por exemplo, quero gravar um byte qualquer no endereço 0x03, e ler um byte do endereço 0x09. Como fazer isso no CodeVision?

No Mikroc é assim:
EEPROM_Write(adress, data);
data=EEPROM_Read(adress);

Parece que no Codevision não tem como fazer isso, alguém saberia dizer?
Nik
Bit
 
Mensagens: 42
Registrado em: 07 Nov 2006 06:04

Mensagempor RobL » 20 Out 2012 21:08

Código: Selecionar todos
// EEPROM access example

// CodeVisionAVR C Compiler

// Chip: ATmega8515

flash char f[] = "This is a test";
#pragma warn-
eeprom char e[16];  // aqui define um vetor na eeprom
#pragma warn+
char r[16];

void main(void)
{
    char flash *ptr_to_flash; // ponteiro para flash
    char eeprom *ptr_to_eeprom; // ponteiro para eeprom
    char *ptr_to_ram; // ponterio para ram

    // copy the string f from FLASH to
    // the string e in EEPROM
    ptr_to_flash = f;
    ptr_to_eeprom = e;
    while (*ptr_to_flash) // lembre que no final da string fica falso (NULL).
        *ptr_to_eeprom++ = *ptr_to_flash++;
    // NULL terminate the string in EEPROM
    *ptr_to_eeprom = 0;

    // copy the string e from EEPROM to
    // the string r in RAM
    ptr_to_eeprom = e;
    ptr_to_ram = r;
    while (*ptr_to_eeprom)
        *ptr_to_ram++ = *ptr_to_eeprom++;
    // NULL terminate the string in RAM
    *ptr_to_ram = 0;

    // stop here
    while (1);
}


Note que precisa definir "eeprom tipo nomevar". O compilador coloca automaticamente os endereços. Basta ler usando as variáveis definidas para escrever.
Não é necessário escrever em determinado endereço, como 0x03, vai ficar bagunçado, use um nome para uma var, conforme acima.
Nota: Não uso codevision, portanto ...
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor Nik » 21 Out 2012 11:42

RobL, obrigado pela informação.

Mas realmente eu preciso ler e gravar num endereço específico, indicando o endereço através de uma variável.

Inclui essas funções abaixo, e consegui resolver meu problema. Gravo o endereço na variável "adress" e o dado na variável "data", e chamo a função para gravar. Para ler coloco o endereço em address, e o resultado da leitura coloco em data. Na verdade copiei essas funções do próprio datasheet do componente.

Valeu,



void EEPROM_Write()
{
/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set Programming mode */
EECR = (0<<EEPM1)|(0<<EEPM0);
/* Set up address and data registers */
EEARL = adress;
EEDR = data;
/* Write logical one to EEMPE */
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
}


unsigned char EEPROM_Read()
{
/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set up address register */
EEARL = adress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}
Nik
Bit
 
Mensagens: 42
Registrado em: 07 Nov 2006 06:04

Mensagempor Maurício » 22 Out 2012 14:20

Boas!

Nik. Esse código que vc postou é a maneira mais bruta de acessar EEPROM com endereço específico. Isso é do mais baixo nível pra poder acessar a memória.
Acho que isso daqui é mais prático, experimenta ai:

Código: Selecionar todos
#include <mega16.h>

eeprom unsigned char x @0x03;
eeprom unsigned char y @0x09;

void main ( void )
{
    unsigned char var = 0;

    // pra ler:
    var = y;

   // pra escrever na EEPROM:
   x = 0xBC;

   while ( 1 );
}


[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor Nik » 22 Out 2012 19:42

Vlw Mauricio,

Realmente sua solução é melhor, e dá bem certo com minha necessidade.

Abçs
Nik
Bit
 
Mensagens: 42
Registrado em: 07 Nov 2006 06:04


Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x