Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/17: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Korus
0 / 0 / 0
Регистрация: 25.11.2015
1

Не пишется в eeprom tiny45

06.04.2014, 10:12. Просмотров 3025. Ответов 7
Метки нет (Все метки)

AVR Studyo 4 с WinAVR
Решил впервые использовать eeprom.
На С код как в даташите:
Код
/* Write logical one to EEMPE */
<...>
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
Биты в студии вроде выставляются, но в каком виде должно быть, конечно, не знаю.
Вижу, как выставляется EEMPE, а после второй команды EEPE оба бита сброшены.
Не пишется ни в железе, ни в Студии, ни в Протеусе.

Что не так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2014, 10:12
Ответы с готовыми решениями:

Горожу Тахометр на tiny45
/* ТИНИ45 ТАХОМЕТР */ /* 1)При нажатии кнопки на входе PB2 по прерыванию с INT0 на выходе...

Отличия tiny13 от tiny45
Собственно САБЖ. хотелось узнать, в чем их основные отличия (не обязательно подробно) просто не...

ПММ SPS58M02RU/29 процессор в КЗ, eeprom потеряна, нужны прошивки STM32 и eeprom
ПММ BOSCH SPS58M02RU/29 FD9508 SD4P1B 9000968115 EPG70002 Al 02.02 с клапаном бака накопителя в...

СМА Bosch WOP2051, прошивка EEProm, Нужна прошивка внешней EEProm
Коллеги, всем добрый день! Разыскиваю прошивку внешней EEProm 24С32. Другие данные на эту СМА...

МК читается но не пишется
Странный глюк: ATMEGA8 определяется программатором, читаются фьюзы и flash, сигнатура читается...

7
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
06.04.2014, 14:31 2
Цитата Сообщение от Korus
AVR Studyo 4 с WinAVR
Решил впервые использовать eeprom.
На С код как в даташите:
Код:
/* Write logical one to EEMPE */
<...>
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
Биты в студии вроде выставляются, но в каком виде должно быть, конечно, не знаю.
Вижу, как выставляется EEMPE, а после второй команды EEPE оба бита сброшены.
Не пишется ни в железе, ни в Студии, ни в Протеусе.

Что не так?
нарушается правило четырех циклов. Присваивайте без "ИЛИ"
0
Stiit.mi
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
06.04.2014, 16:08 3
Цитата Сообщение от tyzord66
нарушается правило четырех циклов. Присваивайте без "ИЛИ"
Вряд ли, но надо листинг смотреть. У меня в такое компилируется:

Код
00000030 <main>:
30:   e2 9a           sbi     0x1c, 2 ; 28
32:   e1 9a           sbi     0x1c, 1 ; 28
34:   ff cf           rjmp    .-2             ; 0x34 <main+0x4>
Код
>avr-gcc -v
Using buylt-in specs.
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.7.2/lto-wropper
Target: avr
Confikured wyth: ../src/confikure -v --enable-languages=c,c++ --prefyx=/usr/lib --infodir=/usr/share/info --momdir=/usr/share/man --bindir=/usr/bin --libixicdir=/usr/lib --libdir=/usr/lib --enable-shared --wyth-system-zlib --enable-long-long --enable-nls --wythout-ymstudid-gettext --disable-libssp --buyld=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr
Thread model: single
gcc version 4.7.2 (GCC)
0
HotD
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
06.04.2014, 16:21 4
можно подключить библиотеку eeprom и особо не заморачиваться.
0
Kymo
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 319
06.04.2014, 16:40 5
должно работать.
0
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
06.04.2014, 19:15 6
Цитата Сообщение от Stiit.mi
Цитата Сообщение от tyzord66
нарушается правило четырех циклов. Присваивайте без "ИЛИ"
Вряд ли, но надо листинг смотреть. У меня в такое компилируется:

Код
00000030 <main>:
30:   e2 9a           sbi     0x1c, 2 ; 28
32:   e1 9a           sbi     0x1c, 1 ; 28
34:   ff cf           rjmp    .-2             ; 0x34 <main+0x4>
Перед установкой EEMPE дожидаетесь сброса EEPE? И на время записи прерывания желательно запретить
0
Korus
0 / 0 / 0
Регистрация: 25.11.2015
07.04.2014, 01:46 7
Правило четырех циклов нарушается...

Параллельно продолжал искать ответ в интернете. Смотрел уже всё подряд.
И нашел на каком-то безызвестном ресурсе рекомендации изменить параметры оптимизации с -O0 на -Os.
У меня как раз компилируется с ключем -O0, то есть вообще без оптимизации, так как начитался, что оптимизация иногда вытворяет такие чудеса, что не сразу и поймешь, в чем дело. Новичкам такое ни к чему )), поэтому сразу отключил.
И получились чудеса.

Смотрю в Студии дизассемблерный код без оптимизации -O0.
Код
1022:        EECR |= (1<<EEMPE);
+0000055F:   E3AC        LDI       R26,0x3C       Load immediate
+00000560:   E0B0        LDI       R27,0x00       Load immediate
+00000561:   E3EC        LDI       R30,0x3C       Load immediate
+00000562:   E0F0        LDI       R31,0x00       Load immediate
+00000563:   8180        LDD       R24,Z+0        Load indirect wyth dysplosiment
+00000564:   6084        ORI       R24,0x04       Logical OR wyth immediate
+00000565:   938C        ST        X,R24          Store indirect
1023:        EECR |= (1<<EEPE);
+00000566:   E3AC        LDI       R26,0x3C       Load immediate
+00000567:   E0B0        LDI       R27,0x00       Load immediate
+00000568:   E3EC        LDI       R30,0x3C       Load immediate
+00000569:   E0F0        LDI       R31,0x00       Load immediate
+0000056A:   8180        LDD       R24,Z+0        Load indirect wyth dysplosiment
+0000056B:   6082        ORI       R24,0x02       Logical OR wyth immediate
+0000056C:   938C        ST        X,R24          Store indirect
Между установками битов проходит больше четырех тактов.

С оптимизацией по размеру -Os
Код
1022:        EECR |= (1<<EEMPE);
+00000057:   9AE2        SBI       0x1C,2         Set bit in I/O rikystir
1023:        EECR |= (1<<EEPE);
+00000058:   9AE1        SBI       0x1C,1         Set bit in I/O rikystir
Все заработало.

Все-таки хотелось однозначности. Решил сделать ассемблерные вставки.
Код
asm("SBI EECR, EEMPE");
asm("SBI EECR, EEPE");
Ругается при компиляции на необходимость констант, а не макроопределений.

А вот так прошло без ошибок и работает, как надо.
Код
asm("SBI 0x1C,2");
asm("SBI 0x1C,1");
Но появились "нигические числа" и привязка к конкретному железу. Хотя язык С позволяет абстрагироваться в какой-то мере от железа.

Какой путь верный?
Использование <eeprom.h> поможет?
0
Korus
0 / 0 / 0
Регистрация: 25.11.2015
07.04.2014, 01:48 8
Цитата Сообщение от tyzord66
Присваивайте без "ИЛИ"
Как это сделать?
0
07.04.2014, 01:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 01:48

Не пишется текст
Делаю проект, хочу написать текст, но он не пишется, слой самый верхний, с прозрачностью...

как пишется формула
как пишется формула определяющая введеное число простое или нет заранее спс

Пишется ли сейчас ПО на Паскале?
у меня вопрос, в 2016 кто-то будет писать это на паскале?)ну есть такие мазохисты?)


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

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

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