реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Не получается читать и писать массив в eeprom
-=Женек=-
сообщение May 1 2010, 09:54
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



Господа, пытасюь записать массив в eeprom, прочитать его и вывести на экран. Выводятся нули.
Вот код.
Где я не прав?
Код
#include <mega32.h>
#include <delay.h>
#include <stdlib.h>
#include <stdio.h>


#include <disp.h>

#define MAX_DEVICES 5
#define SEARCH_ROM 0xF0
#define DS1990_FAMILY_CODE 1

//Global vaiable defination
unsigned char devices;

// 1 Wire Bus functions
#asm
   .equ __w1_port=0x12;PORTD
   .equ __w1_bit=2
#endasm
#include <1wire.h>

unsigned char rom_code[MAX_DEVICES,9];

  
u08 variable;  
ui16 textcolor;    // color of text
ui16 backcolor;    // color of background

ui16 varvar;  
unsigned char str;
unsigned char i,j,a,b,c,d;
unsigned long serial;


eeprom unsigned char E_rom_code[5,9];
unsigned char eeprom *ptr_to_eeprom;
unsigned char *ptr_to_ram;
unsigned char rom_code2[MAX_DEVICES,9];


void main(void)
{

backcolor=0xBDF7;
textcolor=blue;

DDRA.0=1;
PORTA.0=1;
DDRD.2=0;          

lcd_init();
lcd_clr();        
fill_screen(0xbdf7);



for (i=0;i<5;i++)                //Заполняю массив
{
for (j=0;j<9;j++)
  {
   rom_code[i][j]=i;
   }
}

for (i=0;i<5;i++)                 //Вывожу содержимое массива в левую часть экрана
{
for (j=0;j<9;j++)
  {
    lcd_setxy(10+j*7,120-i*20);
    lcd_str_ram(rom_code[i][j],f8x14, textcolor);                  
  }
}


ptr_to_ram=rom_code;                  // Записываю переменную rom_code в eeprom
ptr_to_eeprom=E_rom_code;
while (*ptr_to_ram)
      *ptr_to_eeprom++=*ptr_to_ram++;

// copy the string e from EEPROM to
// the string r in RAM
ptr_to_eeprom=E_rom_code;                  // читаю из eeprom в новый массив rom_code2
ptr_to_ram=rom_code2;
while (*ptr_to_eeprom)
      *ptr_to_ram++=*ptr_to_eeprom++;


for (i=0;i<5;i++)                              // Вывожу в правую чать экрана содержимое  rom_code2
{
for (j=0;j<9;j++)
  {
    lcd_setxy(100+j*7,120-i*20);
    lcd_str_ram(rom_code2[i][j],f8x14, textcolor);                    //выводятся нули
  }

}
}
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 1 2010, 10:23
Сообщение #2


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Какая EEPROM? Почему вы с ней как с RAM обращаетесь?
Go to the top of the page
 
+Quote Post
-=Женек=-
сообщение May 1 2010, 11:03
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



У меня ATMega32, в дальнейшем будет ATTiny26. ПЛатформа - Codevision
есть переменная unsigned char rom_code[5,9].
Как ее записать и как ее прочитать?
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 1 2010, 12:20
Сообщение #4


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(-=Женек=- @ May 1 2010, 20:33) *
У меня ATMega32


С атмегами не работал. Тем не менее, во всех МК EEPROM является "специальной" памятью, с которой надо работать совсем не так, как с RAM. Читайте даташит стр.18-19. Для записи в EEPROM и чтения из нее вам надо обращаться в регистры EEARH, EEARL, EEDR и EECR. А в вашем коде я что-то не вижу, чтобы вы к ним обращались.
Go to the top of the page
 
+Quote Post
-=Женек=-
сообщение May 1 2010, 12:37
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



Это Codevision. Он якобы заботится обо всем сам.
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 1 2010, 12:46
Сообщение #6


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(-=Женек=- @ May 1 2010, 22:07) *
Это Codevision. Он якобы заботится обо всем сам.

А-а. Ну тогда и обращайтесь в ихний тексуппорт.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 1 2010, 13:53
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(-=Женек=- @ May 1 2010, 18:37) *
Это Codevision. Он якобы заботится обо всем сам.


Наверное сначала ему надо как-то сказать о том, что переменная расположена в eeprom, а не просто unsigned char rom_code[5,9]. Должно быть какое-то волшебное слово, типа unsigned char eeprom rom_code[5,9]


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
-=Женек=-
сообщение May 1 2010, 13:59
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



А есть разница между вариантами записи unsigned char eeprom rom_code[5,9] и eeprom unsigned char rom_code[5,9] ??

P.S. проблему решил поставив галку "preserve EEPROM" в настройках программирования. ВРодебы что-то получается, продолжаю экспериментировать.
Go to the top of the page
 
+Quote Post
e_one
сообщение May 3 2010, 14:04
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 14-03-09
Пользователь №: 46 084



в codeVisionAVR проще записать
eeprom unsigned char rom_code[MAX_DEVICES,9];
и переменная unsigned char rom_code[MAX_DEVICES,9]; будет находится в eeprom
Дальнейшая работа с переменной, как с обычной.

Сообщение отредактировал e_one - May 3 2010, 14:06
Go to the top of the page
 
+Quote Post
SysRq
сообщение May 4 2010, 13:38
Сообщение #10


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Отстаньте от EEPROM'а.
Здесь и сам алгоритм копирования принципиально не подходит для копирования таких данных, и название функции "lcd_str_ram" подсказывает, что оно принимает скорее строку, чем то что ей отдают тут...
Go to the top of the page
 
+Quote Post
V_G
сообщение May 5 2010, 00:46
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(-=Женек=- @ May 2 2010, 00:59) *
P.S. проблему решил поставив галку "preserve EEPROM" в настройках программирования.

Ну ясен перец, эту галку всегда надо ставить первым делом. Программа может быть правильная или нет, но сам процесс заливки новой версии программы без этой галки сотрет EEPROM.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01428 секунд с 7
ELECTRONIX ©2004-2016