Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 22.03.2011, 21:10  
maw_1961
Прохожий
 
Регистрация: 20.05.2009
Сообщений: 6
Сказал спасибо: 2
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
maw_1961 на пути к лучшему
По умолчанию Проблемы с чтением блоков EEPROM MEGA128 под WinAVR

Не получается правильно читать информацию из EEPROM блоками.
Программа должна считывать из EEPROM 40 блоков по 16 байт и
обрабатывать их в функции modul_1(). Если произвести чтение
в цикле while (1), то данные читаются неправильно и микроконтроллер
не работает. Не помогает отключнеие прерываний, ожидание готовности
EEPROM. Если прочитать любой блок из EEPROM до цикла, то брабатывается всё правильно.
Адрес информации в EEPROM превышает 8 бит и при обработке используются 8ми и 16 разрядные переменные.
Пожалуйста, подскажите способ решения проблемы или в чём у меня ошибка ?

#include ‹avr/interrupt.h›
volatile unsigned char EEPR_array[15];
int main(void)
{
modul = 1 ;
// чтение настроек модуля из ЕЕПРОМ
m2 = modul - 1 ;
adr_modul = m2*16;
eeprom_busy_wait();
eeprom_read_block((void*)&EEPR_array, (const void*)adr_modul, 16);
while (1)
{
// чтение настроек модуля из ЕЕПРОМ
/*
cli ();
m2 = modul - 1 ;
adr_modul = m2*16;
eeprom_busy_wait();
eeprom_read_block((void*)&EEPR_array, (const void*)adr_modul, 16);
sei ();
*/
modul_1(modul) ;
if ( modul ›= 40 ) modul = 0 ; // ограничение количества модулей 4м
modul++ ;
}
}
Реклама:
maw_1961 вне форума  
Непрочитано 22.03.2011, 23:14  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Проблемы с чтением блоков EEPROM MEGA128 под WinAVR

Попробуйте так
Код:
#include ‹avr/io.h›
#include ‹avr/eeprom.h›

uint16_t  adr_modul;

volatile unsigned char EEPR_array[15];

int main(void)
{
	adr_modul=0;
	
	while (1)
    {
		eeprom_busy_wait();
		eeprom_read_block(&EEPR_array, (uint8_t*)adr_modul, 16);
		adr_modul+=16;
    }
}
В протеусе работает.
Вложения:
Тип файла: rar at128.rar (24.8 Кб, 57 просмотров)

Последний раз редактировалось CodeNameHawk; 22.03.2011 в 23:20.
CodeNameHawk вне форума  
Непрочитано 23.03.2011, 10:36  
maw_1961
Прохожий
 
Регистрация: 20.05.2009
Сообщений: 6
Сказал спасибо: 2
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
maw_1961 на пути к лучшему
По умолчанию Re: Проблемы с чтением блоков EEPROM MEGA128 под WinAVR

У меня есть возможность пользоваться аппаратным JTAG.
В нём пошагово и моя программа работает.
Я, конечно, попробую Ваш вариант, но, по-моему, возможно проблема в том, что данные считывавются в массив переменных а надо считывать в адрес ОЗУ. Возможно-ли привязать массив переменных к конкретному адресу ОЗУ и считывать данные из EEPROM туда ?
maw_1961 вне форума  
Непрочитано 23.03.2011, 11:05  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Проблемы с чтением блоков EEPROM MEGA128 под WinAVR

У Вас массив на 15 значений, а читаете Вы 16.
kison вне форума  
Сказали "Спасибо" kison
maw_1961 (23.03.2011)
Непрочитано 23.03.2011, 12:19  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Проблемы с чтением блоков EEPROM MEGA128 под WinAVR

maw_1961, а смысл ?
Вы хотите что-то типа этого ?
union{
struct{
uint8 var1;
uint8 var2;
uint16 var3;
}str;
char cByte[4];
}un;
разнополые переменные в одном байтовом массиве.
Не помню, нужно ли выравнивать структуру по байту, посмотрите в самплах.
__________________
warez
urry вне форума  
Непрочитано 23.03.2011, 12:33  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Проблемы с чтением блоков EEPROM MEGA128 под WinAVR

Сообщение от urry Посмотреть сообщение
Не помню, нужно ли выравнивать структуру по байту
В 8-ми битниках не нужно. Да и union тут тоже не нужен
Код:
typedef struct
{
uint8_t var1;
uint16_t var2;
float var3;
uint8_t var4[8];
} var_t;

var_t var;
var_t EEMEM var_eep;

...
eeprom_read_block((void*)&var, (void*)&var_eep, sizeof(var));
kison вне форума  
Непрочитано 23.03.2011, 13:00  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Проблемы с чтением блоков EEPROM MEGA128 под WinAVR

угу, согласен, юнион уже на автомате пишу
__________________
warez
urry вне форума  
Непрочитано 23.03.2011, 21:26  
maw_1961
Прохожий
 
Регистрация: 20.05.2009
Сообщений: 6
Сказал спасибо: 2
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
maw_1961 на пути к лучшему
По умолчанию Re: Проблемы с чтением блоков EEPROM MEGA128 под WinAVR

Сообщение от kison Посмотреть сообщение
У Вас массив на 15 значений, а читаете Вы 16.
БОЛЬШОЕ СПАСИБО !!!
Именно в этом и была шибка
( недочитал учебник....)
maw_1961 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Библиотеки для Xmega под WinAVR harchenko_pavel AVR 21 15.03.2013 23:00


Часовой пояс GMT +4, время: 19:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot