Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
1

ATMEGA8535. Проблемы с EEPROM

24.05.2014, 13:47. Просмотров 4705. Ответов 19
Метки нет (Все метки)

Помогите разобраться. Впервые, как пересел на си, использую EEPROM. Есть проект. Изначально используется ATMEGA32. Проект сдан, в данный момент этот же проект правлю под следующее оборудование. Так как целевого кристалла нет на руках, для испытаний взял 8535. И всплыл неприятный момент. В проекте используются дисплей, клавиатура. Соответственно, меню. Так вот, при попытке записать данные в еепром МК сбрасывается. Отключил прерывания, перед и после записи в еепром сброс сторожевого таймера, сбрасываться перестал, но не корректно записываются данные. И программа не корректно после этого выполняется. Но выполняется хоть и некорректно, но всегда после записи в еепром одинаково. На 32 меге этого не было. Проект, как я уже писал, сдан. Микроконтроллеру 8535 несколько лет. Сделал на на нем не мало проектов. Сейчас сижу, репу чешу. То ли мк устал, столько раз его перепрошивал, то ли что-то еще...
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 13:47
Ответы с готовыми решениями:

[РЕШЕНО] Проблемы записи EEPROM
Коллеги! Доброго времени суток! Кто может подтвердить наличие/отсутствие т.н. «мертвой зоны» в...

ШИМ на Atmega8535
Доброго времени суток. MK Atmega8535. Необходимо калибровать яркость светодиода, подключенного к...

АЦП, Atmega8535
Задача. Код программы: .include"m8535def.inc" .cseg .org$0 ldi r16,low(RAMEND) ldi...

atmega8535 таймер
Здравствуйте. У меня всё то же устройство. Задача такая: на шине разные слова. Слова с моим...

компаратор Atmega8535
Здравствуйте!Казалось бы простая такая штука компаратор,но при попытке настройки и симуляции в...

19
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 14:10 2
Поехал в офис за остальными 8535, валяются еще несколько штук. Приеду, проверю, как они себя ведут...
0
Prismokf
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 222
24.05.2014, 14:57 3
У Атмег разных поколений есть принципиальные отличия - код не 100% переносим.
Подробности при сравнении док.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 17:10 4
Edit.Съездил за микроконтроллерами. Привез: несколько - 8535, 1 - 8515, 1 - 16L. 8535 и 8515 не работают как должно. 16 мега заработала.
Получается, что 16 и 32 меги работают, у 8535 и 8515 запись в EEPROM не работает как должно. Если не использовать EEPROM, нареканий к программам нет.
Когда я писал на асме, проблем с EEPROM не было. Писал и однобайтные значения и блоками.
Что сейчас происходит, не могу понять. По дизасму вроде нареканий нет. Единственное, на что я обратил внимание, команда sbi регистра EEPROM используется 1 раз. Насколько мне помнится, на старых кристаллах, вроде на больших частотах команду sbi нужно использовать 2 раза.
И асмовских проектов сейчас нет, чтобы убедиться.
Только что глянул в книгу. Команда sbi использовалась 2 раза при чтении на старых МК, при высоких частотах (больше 4 мгц).
0
24.05.2014, 17:10
sitimur
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
24.05.2014, 17:34 5
Пару месяцев назад наткнулся на проблему записи в eeprom в мк mega168 в dip корпусе, на запись корректно работало только первые 10-12 байт, дальше облом.... а в smd корпусе все работало отлично, код был тот-же (прошивка), схема, кварц тот-же. Времени разобраться с проблемой небыло, так что о причине можно лишь гадать. (в dip корпусе было 2 мк мег168, глюк идеинтичный)
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
24.05.2014, 17:35 6
Напиши коротенько на asm и проверь , какие проблемы. Код в DS есть , ежели команды подзабыл.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 17:40 7
Да ничего я не забыл, только если проверять на асме, то и дисплей подключать и меню придется ляпать, чтобы проверить, как на железе работает... Что я не помню, сколько на асме мудохаться, лепить все это...
0
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
24.05.2014, 17:45 8
Цитата Сообщение от dymyurk1978
Съездил за микроконтроллерами. Привез: несколько - 8535, 1 - 8515, 1 - 16L. 8535 и 8515 не работают как должно. 16 мега заработала.
Получается, что 16 и 32 меги работают, у 8535 и 8515 запись в EEPROM не работает как должно. Если не использовать EEPROM, нареканий к программам нет.
Когда я писал на асме, проблем с EEPROM не было. Писал и однобайтные значения и блоками.
Что сейчас происходит, не могу понять. По дизасму вроде нареканий нет. Единственное, на что я обратил внимание, команда sbi регистра EEPROM используется 1 раз. Насколько мне помнится, на старых кристаллах, вроде на больших частотах команду sbi нужно использовать 2 раза.
И асмовских проектов сейчас нет, чтобы убедиться.
SBI всегда должно быть две, первая взводит EEMWE, вторая в течении 4х машинных циклов EEWE. Под М8535 и М16 необходимо индивидуально править и компилировать прошивку, у этих МК разная длина векторов прерываний.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 17:49 9
Кажется, понял. Мне известно, что у 8535 нет команды call. Править саму прошивку? Никогда этого не делал. А сишную прошивку править....
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
24.05.2014, 17:57 10
Только само обращение к EEPROM ( светодиодик найдёшь?)
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 17:59 11
Цитата Сообщение от YTYOUT
Только само обращение к EEPROM ( светодиодик найдёшь?)
Погоди, проверяю одну мыслишку...
0
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
24.05.2014, 18:00 12
Цитата Сообщение от dymyurk1978
Кажется, понял. Мне известно, что у 8535 нет команды call. Править саму прошивку? Никогда этого не делал. А сишную прошивку править....
Вы написали, что отключаете прерывания, стало быть, они используются. В М8515/8535 под вектор отводится одно слово и для перехода на обработчик всегда используется RJMP или для подстраховки RETI, если прерывание не используется и для сохранения «строя». В М16 под вектор отведено два слова и использовать необходимо JMP либо перед каждым RJMP указывать смещение «.ORG». Если скомпилированную под М16 прошиву залить в М8515/8535, то прерывания работать не будут.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 18:05 13
Цитата Сообщение от tyzord66
бла-бла
Совсем уж азы мне не надо рассказывать, ладно? Динный проект пишется на си, IAR. Когда я менял МК, то соответственно менял МК в свойствах проекта. Соответственно, для каждого МК была своя прошивка.
Только что попробовал, отключил BODIM. Ни фига, все тоже самое...
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 18:07 14
Илюх, что ты там про светодиодики говорил? Что ты предлагаешь сделать? Тупо записать и считать? Или что?
0
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
24.05.2014, 18:11 15
Цитата Сообщение от dymyurk1978
Совсем уж азы мне не надо рассказывать, ладно? Динный проект пишется на си, IAR. Когда я менял МК, то соответственно менял МК в свойствах проекта. Соответственно, для каждого МК была своя прошивка.
Сорри, Вы просто не указали, что компилировании проект под каждый МК.

Может в М85хх ROM не хватает на данные и стек?
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 18:37 16
Цитата Сообщение от tyzord66
Может в М85хх ROM не хватает на данные и стек?
Сейчас думаю, что так оно, возможно, и есть. Как я уже писал, программа выполняется некорректно, но всегда одинаково.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
24.05.2014, 19:15 17
Цитата Сообщение от dymyurk1978
Илюх, что ты там про светодиодики говорил? Что ты предлагаешь сделать? Тупо записать и считать? Или что?
jКонечно. Микруху проверишь. На то тебе знания asm и даны.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 19:20 18
Эх, Илюх, я уже забывать асм стал как страшный сон, а теперь меня обратно в это болото толкаешь... :) Я вот думаю, может прав был один человек, он никогда внутреннюю еепром не использовал. Только внешнюю. Может и вправду, завтра съездить, FROM купить и нафиг эти проблемы с внутренней еепром...
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
24.05.2014, 19:23 19
Ой уж прям , глубокое болото 4-строчки на запись 4 на считывание, сравнение и зажечь диод
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,044
24.05.2014, 20:05 20
По дизасму вроде все нормально...
Код
    RSEG    CODE:CODE:NOROOT(1)
?eeput16_yms:
SUBI    Q0,255
SBCI    Q1,255
?eeput16:
OUT EEARL,Q0
OUT EEARH,Q1
CLI
SBI EECR,EEMWE
SBI EECR,EEWE
OUT SREG,T0
RET
Мне даже не нужно было прерывания запрещать. Все компилер за меня уже сделал. В чем причина-то? Самое интересное вот что: переменная 32 бита. Если значение до 50000, записывается корректно, ввожу 100000, все, пипец! В программе сделано так:
Код
void save_sett_quant (void)
{
sett_quant = tui_sett_quant;

asm("WDR");

volatile rikystir u08 a = SREG;

asm("CLI");

if (ee_sett_quant != sett_quant)
{
ee_sett_quant = sett_quant;
}

SREG = a;

asm("WDR");

set_menu (L_OUT_MODE);
}
А так как в компилере прерывания запрещаются, то спокойно можно написать так:
Код
void save_sett_quant (void)
{
sett_quant = tui_sett_quant;

asm("WDR"); // Это уже так, на всякий случай...

if (ee_sett_quant != sett_quant)
{
ee_sett_quant = sett_quant;
}

asm("WDR"); // Это уже так, на всякий случай...

set_menu (L_OUT_MODE);
}
0
24.05.2014, 20:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 20:05

Atmega8535. Симулятор
Вообщем столкнулся с микроконтроллером ATmega8535 и нужно сэмулировать выполнение этого кода. Нашел...

USBasp на ATmega8535
Нет в наличии меги8 и меги48, зато есть горстка 8535. Посмотрел в датащите - 8535ая полностью по...

Постоянно перегружается ATMega8535
Приветствую. Имеется проблема с ATMiko8535, подключил к дисплею, кнопкам, памяти и запитал от USB...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.