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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Как правильно прочитать данные из 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
bgn62
 
Сообщения: 16
Зарегистрирован: 04 мар 2007, 12:20
Откуда: украина,херсон

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)
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Сообщение bgn62 » 04 мар 2007, 14:29

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

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

:020000002B02D1
:00000001FF

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

Сообщение 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;
}
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение 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
bgn62
 
Сообщения: 16
Зарегистрирован: 04 мар 2007, 12:20
Откуда: украина,херсон

Сообщение romashkin » 05 мар 2007, 12:00

Это все проколы Протеуса. Я правда писал программку на Микропаскале, если я читаю в программе с $00 то в Протеусе получается с $01, короче на единицу смещается вперед. А реальном устройстве все нормально.
Работал с 8515.
romashkin
 
Сообщения: 4
Зарегистрирован: 20 фев 2007, 00:18
Откуда: Ukraine

Сообщение 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
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение bgn62 » 06 мар 2007, 20:10

УВАЖЕЕМЫЙ avr123.nm.ru ТАК ПРАВ ИЛИ НЕТ
romashkin, ВАМ КАК ЗНАТОКУ ПРОТЕУСА НЕСЛОЖО
ОТВЕТИТЬ ИЛИ ЭТО ВСЕТАКИ НЕЗНАНИЕ СИ
bgn62
 
Сообщения: 16
Зарегистрирован: 04 мар 2007, 12:20
Откуда: украина,херсон

Сообщение bgn62 » 11 мар 2007, 17:02

думаю тема закрыта сам разобрался
протеус не виноват
жаль некому было подсказать
bgn62
 
Сообщения: 16
Зарегистрирован: 04 мар 2007, 12:20
Откуда: украина,херсон

Сообщение avr123.nm.ru » 11 мар 2007, 17:16

Дак расскажите.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение bgn62 » 12 мар 2007, 08:36

необходимо перекодировать
из формата *.eep  в*.bin
bgn62
 
Сообщения: 16
Зарегистрирован: 04 мар 2007, 12:20
Откуда: украина,херсон


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9