roboforum.ru

Технический форум по робототехнике.

Как правильно прочитать данные из Eeprom?

Как правильно прочитать данные из Eeprom?

bgn62 » 04 мар 2007, 12:59

В CV написано, симулирую в протеусе
Не могу понять  как правильно прочитать!?
Я так понимаю читается с первого адреса Eeprom,
Объясните  пожалуйста если можно,
Спасибо.


#include <mega8.h>
// Alphanumeric LCD Module functions
#asm
  .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <delay.h>
#include<stdio.h>
#include<math.h>
 #include<MEM.H>
// Declare your global variables here
eeprom unsigned int   e=555;
char lcd_buffer[33];
void ini(void)
{
// Global enable interrupts
#asm("sei")    
}
///////////////////////////////
void main(void)
{ unsigned int temp;
ini();
lcd_init(16);
temp=e;
while (1)
{
lcd_gotoxy(0,0);
       sprintf(lcd_buffer,"R-%x\n\r %i",temp,temp);
       lcd_puts(lcd_buffer);    
      delay_ms(300);
     };
}


насколько я понимаю CV записывает в eeprom еще дополнительную информацию (количество байтов, и наверно контрольную сумму). Поясните пожалуйста как все таки правильно считать данные из eeprom, используя CV.
Спасибо.
Вложения
proba_eeprom.rar
(71.42 КиБ) Скачиваний: 42

Re: Как правильно прочитать данные из Eeprom?

Vooon » 04 мар 2007, 13:34

bgn62 писал(а):В CV написано, симулирую в протеусе
Не могу понять  как правильно прочитать!?
Я так понимаю читается с первого адреса Eeprom,
Объясните  пожалуйста если можно,
Спасибо.

{code}

насколько я понимаю CV записывает в eeprom еще дополнительную информацию (количество байтов, и наверно контрольную сумму). Поясните пожалуйста как все таки правильно считать данные из eeprom, используя CV.
Спасибо.


мне не приходилось из программы читать строки (пишу туда только числа)
но уверен что делается через ссылку

Код: Выделить всёРазвернуть
...
eeprom char epr[] = "some string";
...
void main(void)
{
   char eeprom *temp = epr;   // берем адресс строки
   while(*temp++)
   {
      putchar(*temp);   // отправляем (куда нужно)
   }
}

отправляет строку в терминал, аналогичто можно и вашу задачу решить
проверить сейчас не могу

нет CV не пишет в ппзу ничего кроме самих чисел (проверьте - посмотрите файл *.eep)

bgn62 » 04 мар 2007, 14:29

Не понимаю пока как пользоваться этими кнопками при
ответе, простите начинающему, если чего не так

Содержение *.еер

:020000002B02D1
:00000001FF

Первая строка 02-кол-во байтов
2B02 собственно 555
D1- незнаю
Вторая строка наверно для чего-то нужна
Если понимаете объясните пожалуйста,
спасибо.[/quote]
Вложения
proteus.rar
(290.38 КиБ) Скачиваний: 36

avr123.nm.ru » 04 мар 2007, 14:37

пример для CVAVR в папке

C:\CVAVR\examples\EEPROM

=========

в  даташите в разделе

"EEPROM Data Memory"

примеры на АСМ и на Си для любых компиляторов
 
(чтоб работал в CVAVR скачай мой хидер с заглавной
страницы курса avr123.nm.ru  -  m8_128.h)


вот чтение мз даташита :

unsigned char EEPROM_read(unsigned int uiAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));

/* Set up address register */
EEAR = uiAddress;

/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);

/* Return data from data register */
return EEDR;
}

bgn62 » 04 мар 2007, 15:40

Вставил код
На жки выводит в первой строке  ff
Во второй 255
Тоесть, как правильно задать адрес?
Спасибо.

#include <mega8.h>

// Alphanumeric LCD Module functions
#asm
  .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <delay.h>
#include<stdio.h>
#include<math.h>
 #include<m8_128.h>

// Declare your global variables here
eeprom unsigned int   e=555;
char lcd_buffer[33];
unsigned char EEPROM_read(unsigned int uiAddress);

void ini(void)
{
// Global enable interrupts
#asm("sei")    
}
//////////////////////////////////
unsigned char EEPROM_read(unsigned int uiAddress) ///////////////////////////////
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));
/* Set up address register */
EEAR = uiAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}
///////////////////////////////
void main(void)
{ unsigned int temp;
ini();
lcd_init(16);
temp=EEPROM_read( e);
while (1)
{
lcd_gotoxy(0,0);
       sprintf(lcd_buffer,"R-%x\n\r %i",temp,temp);
       lcd_puts(lcd_buffer);    
      delay_ms(300);
     };
}
Вложения
proteus.JPG
proteus.JPG

romashkin » 05 мар 2007, 12:00

Это все проколы Протеуса. Я правда писал программку на Микропаскале, если я читаю в программе с $00 то в Протеусе получается с $01, короче на единицу смещается вперед. А реальном устройстве все нормально.
Работал с 8515.

avr123.nm.ru » 05 мар 2007, 12:53

Proteus 7.1 sp0 - DEMO

downloads.labcenter.co.uk/prodemo.exe

Советую скачать. Пример работы с PROTEUS    http://proteus123.narod.ru/01.htm

bgn62 » 06 мар 2007, 20:10

УВАЖЕЕМЫЙ avr123.nm.ru ТАК ПРАВ ИЛИ НЕТ
romashkin, ВАМ КАК ЗНАТОКУ ПРОТЕУСА НЕСЛОЖО
ОТВЕТИТЬ ИЛИ ЭТО ВСЕТАКИ НЕЗНАНИЕ СИ

bgn62 » 11 мар 2007, 17:02

думаю тема закрыта сам разобрался
протеус не виноват
жаль некому было подсказать

avr123.nm.ru » 11 мар 2007, 17:16

Дак расскажите.

bgn62 » 12 мар 2007, 08:36

необходимо перекодировать
из формата *.eep  в*.bin


Rambler\'s Top100 Mail.ru counter