Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2





НазваниеПрограмма по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2
страница7/12
Дата публикации19.02.2014
Размер1.28 Mb.
ТипДокументы
100-bal.ru > Информатика > Документы
1   2   3   4   5   6   7   8   9   ...   12

SWAP Rd

Обмен тетрад - смотрите на рисунок.
  

До выполнения:

B7

B6

B5

B4

B3

B2

B1

B0




После:

B3

B2

B1

B0

B7

B6

B5

B4




Признаки не изменяются



SBI IO,b

Установить в "1" бит с номером b(b=0..7) в регистре ввода-вывода IO. Признаки не изменяются. 

CBI IO,b

То же самое - только установить в "0"



BST Rs,b

Скопирует бит b регистра Rs в бит T SREG (регистр состояния )

BLD Rd,b

Бит T SREG занесет в бит b регистра Rd.  Эти две команды позволяют переставлять биты как угодно, жаль только, что нет команды инверсии T-бита

Далее следуют 16 команд установки или сброса битов признаков SREG. Я не буду всех их описывать, тут все ясно из мнемоники - SEC - Set C - установить признак C в единицу, CLC - Clear C - в ноль. Но для порядка все-таки их перечислим. И опять посожалеем, что нет команд их инверсии...

SEC

CLC

SEN

CLN

SEZ

CLZ

SEI

CLI

SES

CLS

SEV

CLV

SET

CLT

SEH

CLH




Вот мы и подошли к концу. Осталось описать три специфические команды...

NOP

Пустая операция. Не делает ничего, кроме того, что занимает один такт процессора. Имеет код операции 0x000, что дает возможность "забить" ею любую другую команду без стирания всей программы (подробнее об этом чуть позже)

SLEEP

Перевод процессора в режим пониженного энергопотребления. См. описание режимов

WDR

Сброс сторожевого таймера. См. описание 



На чем набиваются шишки, или тонкости МК AVR

(-: написано в основном на собственном опыте :-) 

  • Используйте символические имена!

  • Отключите аналоговый компаратор

  • Работа с флагами

  • Коварная команда com 

  • Настройка тактового генератора Tiny15  (new!)

  • Ошибочный прием USART (new!)




Если пишете программу на ассемблере, используйте символические имена из .def файлов, а не константы! При переносе программ на другой МК требуемые биты в регистрах ввода-вывода могут оказаться в другом месте! Пример из собственного опыта. Разрешил прерывание по переполнению таймера 0 (для МК 8535) следующим образом:

ldi R16,1
out TIMSK,R16


и потом долго не мог понять, почему эта программа не работает после переноса на МК 8515. У которого бит разрешения прерывания таймера 0 не TIMSK.0, как у 8535, а TIMSK.1

написал бы вот так:

ldi R16, 1<

и сэкономил бы тот час, который искал - почему не работает отлаженная давным-давно процедура обработки прерывания. Кстати, то же самое относится и к векторам прерываний!



Если устройство должно потреблять минимум энергии и оно по алгоритму работы может находиться в режиме power down, то, во первых, перед входом в этот режим отключите ненужную периферию (например, АЦП - оставленный включенным, он потребляет не менее 2 мкА). 

Аналоговый компаратор почему-то по умолчанию, то есть по сбросу - включен! Следовательно, его надо тоже выключить.



При работе с флагами надо помнить о следующих тонкостях:

Во первых, проверка флага в команде ветвления имеет вид

sbrc регистр,Nфлага

где Nфлага - это число от 0 до 7, порядковый номер бита в регистре. А установка и сброс флагов производятся командой с мнемоникой

sbr регистр,маска

где маска - это... проще напишем так - для бита 0 это 0x01, для бита 1 это 0x02, для бита 2 это 0x04 и так далее. Это затрудняет написание читабельной программы - если дать флагу имя, то в при проверке все получается красиво, а при установке - надо будет написать

sbr регистр,1<

что, на мой взгляд, некрасиво и путано. К тому же - важно! - надо иметь в виду, что команда sbr это просто команда or ! То есть - она модифицирует флаги состояния МК, что по мнемонике вовсе не очевидно. Правда, дает возможность установить сразу несколько флагов.

Вообще в AVR множество команд (точнее-мнемоник) написаны, на мой взгляд, только для того, чтобы гордо заявить в даташите - 118 команд! :-) на самом деле их минимум на треть меньше. Не верите? Проверьте! напишите, например,

ser R16
ldi R16,$FF


clr R1
eor R1,R1


bset 0
sec


откомпилируйте и сравните коды этих команд.



Команда COM Rd процессора не просто "переворачивает" биты - она вычисляет их как Rd=($FF-Rd). Результат тот же, но при этом устанавливается бит переноса C! Что из мнемоники команды вовсе неочевидно.



У МК Tiny15, который работает со встроенным RC генератором, калибровочный байт при включении не заносится в регистр OSCCAL! Хотя, казалось бы по логике... В результате, если это не сделать самому, МК будет работать на изрядно заниженной частоте.

Вообще-то это очень неудобно. Калибровочный байт можно прочесть только программатором (кстати, в первых версиях даташита команда чтения калибровочного байта для SPI режима не указана!), после чего вставить в программу. Следовательно, программа будет меняться для каждого конкретного экземпляра МК! Можно, конечно, копировать калибровочный байт в EEPROM... Но все равно, на мой взгляд - криво.



Вот недавно еще на одной тонкости обломался... Это относиться к "стандартному" AVR,  как обстоит дело у более новых - mega и tiny - пока что не успел посмотреть.

Оказывается, если USART принял байт с ошибкой стоп-бита, то флаг приема RXC он тоже выставит, вместе с флагом ошибки FE ! То есть, если вы работаете с каналом, на котором реальны помехи, то проверять FE обязательно!

Да, если флаг FE установлен (то есть байт по сути не принят, а принято черт знает что) то регистр UDR прочесть все-таки надо. Просто прочесть. Иначе флаг RXC не сбросится


Экономим ресурс ПЗУ

Итак, программа для микроконтроллера написана, оттранслирована, проверена на эмуляторе и записана в МК. Включаем девайс - не работает, или работает не так как надо. Еще раз смотрим на программу - ой, ашипка. Это вполне нормальное явление.

Исправляем, транслируем, стираем старую и прошиваем новую. Вроде проблем -то нет, но тут надо помнить о том, что вышеописанный процесс исправления ошибок (и внесения новых) будет повторяться неоднократно, а количество гарантированных циклов перезаписи flash-ПЗУ обычно не более 1000.

Тут, конечно, кто-то скажет - ну и не беда, сгорит - куплю новый, 5$ - не деньги. Возможно, оно и так... А все-таки жалко. Это во первых. А во вторых - что делать, если вы отлаживаете устройство на Mega128? Корпус TQFP, припаянный на плату, без специального оборудования и не снимешь.






Рис.1

Р
ис.2

 


Существует достаточно простой способ, позволяющий увеличить ресурс ПЗУ как минимум на порядок. Зачастую размер программы значительно меньше общего объема ПЗУ. Казалось бы - надо просто разместить программу в другом месте ПЗУ - например, за концом первой и так далее. Но всю малину портят вектора прерываний, которые должны находиться в фиксированных адресах.

 А я прерывания не использую! -Но ведь программа МК откуда-то стартует, и это обычно ячейка ПЗУ с адресом 0, или вектор сброса. Так что вектор все равно есть.

Что такое цикл перезаписи? По сути, это количество стираний ПЗУ. После стирания ячейка ПЗУ обычно содержит все "1", которые при программировании могут сбрасываться в "0". А вот обратно в "1" состояние можно возвратить только стиранием, причем не байта, а всего ПЗУ микроконтроллера. Следовательно, в любую ячейку, что бы в ней не находилось, мы всегда можем написать 0 - а это код команды NOP (то есть ничего не делать).

Поступим следующим образом. Изменим стандартную структуру программы (см. рис. 1) на следующую (рис.2). Из ячейки-вектора сделаем переход не сразу на обработчик, а на промежуточную таблицу, этакий двойной переход. И оставим место  между командами второго перехода (метки L1,L2). Что это даст?

Да все очень просто. Следующая версия программы пишется так, чтобы обработчики начинались там, где закончилась предыдущая программа, для этого существует .ORG, вектора не поменялись, а дополнительные JMP смещаются на одну ячейку простым добавлением одного NOP, который после трансляции имеет код 0 и соответственно "забивает" предыдущее содержимое ячейки.





Рис.3

В общем, надеюсь, все понятно. Единственное неудобство - прожигать вам придется не прямо из Builder-а, а моим программатором. Дело в том, что программатор Builder-а даст ошибку в случае записи $FFFF туда, где уже что-то записано - а в моем это по умолчанию выключено. Да и посмотреть, где кончается "старая" программа - моим проще.

Как сделать то же самое для обычных AVR (не Mega, то есть у которых в вектора вставляется RJMP) вы можете на страничке  пример работы

Рис.4


После проделывания выщеуказанного программа будет иметь вид (см. Рис.3) и все будет работать, только после каждого смещения программы будут добавляться по два такта времени при обработке прерываний, что, в общем-то, практически всегда несущественно.

Ну а после того, как место в ПЗУ кончится (или место в таблице дополнительных JMP), МК стирается и программа возвращается к Рис.2

И в завершение надо отметить - у меня еще не было случаев выхода МК из строя из-за отказа ПЗУ - либо они такие надежные, либо данный метод помог :-)

 А вот так этот метод будет выглядеть при использовании Algorithm Builder (см. рис.4)

При первой прошивке макро Nopiki должно быть пустым, при второй - состоять из одной команды NOP и так далее, прибавляя каждый раз по одному NOPу. (Для Mega128 - надо ставить по два, поскольку объем ПЗУ у него большой и таблица векторов рассчитана не на однословную команду RJMP, а на двухсловную LJMP). Учтите, рисунок - как раз для Mega128!



UNIPROF - это ISP (in system programming) программатор  для AVR микроконтроллеров (смотрите список слева). Имеет  встроенные модули отладочного обмена, позволяющие при помощи того же самого шлейфа, при помощи которого программировали, производить realtime отладку программы (подробнее об отладке).  (далее - просто программатор) .

Программатор позволяет:

  • Читать/писать/сравнивать FLASH память программ и EEPROM;

  • Чтение/запись/сравнение FLASH возможно в указанных границах; 

  • Читать/писать fuse и lock биты;

  • Читать настроечные байты OSCCAL и при необходимости помещать их в EEPROM или FLASH;

  • Вручную корректировать содержимое окна EEPROM и перемещать блоки FLASH;

  • Работает с файлами в форматах HEX, BIN и generic;

  • Возможна подача любой команды протокола обмена "вручную";

  • Режим "тормоз" для низких тактовых;

Программатор работает  под Win98, под Win2000/XP - при запуске с уровня амина. Подключается к программируемому (отлаживаемому) устройству при помощи двух видов шлейфов - для LPT порта или для COM порта. Каким пользоваться - выбирать вам. Шлейф для COM порта надежнее (сжечь COM порт очень трудно :-), шлейф для LPT - предельно прост и к тому же работает немного быстрее. Лично я предпочитаю работать с LPT, хотя однажды порт пожег, подключившись к работающему устройству с достаточно мощной силовой частью...

Схему шлейфа для COM порта я скопировал у  Громова (Algorithm Builder), схему см. ниже.  Шлейф на LPT тоже сначала сделал совместимым с Algorithm Builder, но в данный момент можно назначать любые линии порта самому. Связано это было с вышеупомянутым сожжением нескольких линий порта, что конечно прискорбно... зато теперь вы сможете настроить программу UNIPROF под любой шлейф на LPT. Нет худа без добра :-)

Схема шлейфа на COM порт

Поддерживает микро-
контроллеры AVR:

1200 2313 2323 2333 2343 4414 4433 8515 8535 mega103 mega128 mega1280 mega1281 mega16 mega161 mega162 mega163 mega165 mega168 mega169 mega2560 mega2561mega32 mega325 *new!
mega3250 *new! mega48 mega603 mega64 mega640 mega645 *new! mega6450 *new! mega8 mega8515 mega8535 mega88 pwm23 tiny12 tiny15 tiny13 tiny2313 tiny24 *new! tiny25 tiny26 tiny45 tiny44*new! tiny85 tiny84 *new!

Подчеркнутые - значит я сам с ними работал.

Отладочные модули - что к чему

Ошибку в монтаже чаще можно найти при помощи обычного тестера, если есть осциллограф или хотя бы логический пробник - совсем хорошо. А вот ошибку в программе найти сложнее. Это не персоналка и оконных отладчиков нету. Как впрочем и неоконных тоже :-)

А посмотреть внутрь ну очень хочется, ну хоть одним глазком - что там делается? Особенно при первом запуске отлаживаемой (и естественно, не работающей) программы.

Я рассуждал так. Раз уж у нас шлейф подключен на SPI интерфейс, имею в виду шлейф программатора, то его и надо использовать. То есть организовать обмен программы на компьютере (которая нам на привычном мониторе все отобразит) с отлаживаемым AVR. Так и сделал.

Отладочные модули:

prost_ab - "попроще", формат AB
prost_26 - "попроще", формат AB, для Tiny26
prost_asm -"попроще", ассемблер
prost_c -  "попроще", IAR C

sloz_ab - "покруче", формат AB
sloz_asm -"покруче",ассемблер
sloz_c -  "покруче", IAR C

Итак, ваше устройство собрано, программа написана и зашита в МК. Включаем и убеждаемся в том, что устройство не работает. :-( Не надо паниковать, это обычное дело. Во первых, могут быть ошибки в монтаже (проверяем, исправляем), во вторых - ошибки программы.



SPI интерфейс

Тут надо отметить, что SPI интерфейс несколько "непривычный" (см. рис справа). По сути, два связанных по SPI устройства имеют каждый по восьмиразрядному регистру, связанные "в кольцо". Одно из устройств управляет обменом, генерируя стробы (master), второе пассивно - slave. Обмен происходит одновременно - мастер, передавая свой байт, одновременно получает байт от slave, то есть тут нельзя сделать обмен типа "запрос-ответ". Поэтому я организовал как бы два потока информации. 

Важно! В некоторых (теперь уже устаревших) АВР-ах нет SPI интерфейса - соответственно, на них отладка невозможна (например, AT90s1200, AT90s2313)

Важно! SPI интерфейс в своем составе имеет вход SS - slave select - для того чтобы отладка работала, этот вывод необходимо подключить на землю через резистор ~1кОм

Мастером, естественно, является компьютер, он постоянно передает данные на AVR.

С AVRом сложнее. Ведь обмен с компьютером для него задача неосновная, скажем даже - мешающая. Она должна занимать как можно меньше ресурсов - и по времени, и по занимаемой памяти, обрабатывая прерывания SPI интерфейса.

Исходя из таких требований, мною были написаны два модуля - один попроще, второй "покруче". Сейчас есть несколько вариантов таких модулей - формат ассемблера, Algorithm Builder, C... Поэтому будем отталкиваться от протокола обмена. "Попроще" и "покруче" - так и будем называть в дальнейшем. 

Протокол который "попроще" хорошо подходит для МК с небольшим ОЗУ, типа Tiny26, 2313...
1   2   3   4   5   6   7   8   9   ...   12

Похожие:

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Проектно-образовательная деятельность по формированию у детей навыков безопасного поведения на улицах и дорогах города
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель: Создание условий для формирования у школьников устойчивых навыков безопасного поведения на улицах и дорогах
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
«Организация воспитательно- образовательного процесса по формированию и развитию у дошкольников умений и навыков безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель: формировать у учащихся устойчивые навыки безопасного поведения на улицах и дорогах, способствующие сокращению количества дорожно-...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Конечно, главная роль в привитии навыков безопасного поведения на проезжей части отводится родителям. Но я считаю, что процесс воспитания...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Поэтому очень важно воспитывать у детей чувство дисциплинированности и организованности, чтобы соблюдение правил безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Всероссийский конкур сочинений «Пусть помнит мир спасённый» (проводит газета «Добрая дорога детства»)
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Поэтому очень важно воспиты­вать у детей чувство дисциплинированности, добиваться, чтобы соблюдение правил безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...



Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск