Начинаю свое знакомство с микроконтроллерами. Сваял схему ( мега-8, 7 диодов на порту D, (начиная с 0го по 6й) и одна кнопка на нулевом пине порта B), написал програмку, в которой от количестка нажатий на кнопку зависит, в какую сторону движется огонек. В одном- слева направо, в другом- справа налево, в третем- одновременно оба предыдущих случая ( 2 огонька). Но вот незадача: при проверке устройства ( реального) движение слева направо происходит примерно секунду, а потом без нажатия начинается движение справа налево. По идее, без нажатия кнопки происходят только прерывания от таймера, которые двигают огонек, а основная программа зациклена. В АВРстудии вроде все работает без проблем ( по крайней мере, насколько это возможно отсимулировать). В принципе, задача учебная, и её можно решать как это сделано у радиокота http://www.radiokot.ru/start/mcu_fpga/avr/13, но я хочу понять, в чем загвоздка в моём решении.
Кстати в радиокоте ошибка у них не инициализируется переменная счетчика нажатий на резет поэтому каждый раз запуске контроллера программа начинается с неопределенного массива.
steel_monkey писал(а):Спасибо за инфу. До С к сожалению я пока еще не дорос . Надо хотябы минимальный уровень понимания иметь.
асм не есть минимальный уровень асм есть альтернативный уровень
если смог на асме чтото написать то начальные понятия о том что такое программирование имеешь следовательно бери си и вперёд для микроконтроллеров сишник очень прост содержит минимум операторов но оч удобен
вот то что посоветовал товарищь АВР тебе очень поможет куча народа уже воспользовалась тем курсом и стала писать на си
Спасибо конечно, но "курс" я не перевариваю (хотя как сборник полезных ресурсов-вещь незаменимая). Вроде была книга "программирование МК на С" кого-то там..... Но все равно, как вижу кракозябры С, типа скобочек и прочего, вгоняет в жуткий ступор. На асме все проще на мой взгляд. В моём случае дело наверное в необходимости хорошего отладчика.
Выбор языка программирования дело каждого программера, но на данном форуме в основном работают на С. Я начинал тоже на асме, тоже по статье из радиокота, но потом перешел на С и об этом не жалею.
if (buffer[0] == 'R') { if ((buffer[1] == '5')|(buffer[1] == '6')|(buffer[1] == '7')|(buffer[1] == '8')|(buffer[1] == '9')) { PORTD.2 = 1; //ставим правый бит направления вращения вперёд PORTD.3 = 0; //и сбрасываем правый бит направления вращения назад pwm = (buffer[1] - '0')*10 + (buffer[2] - '0'); //пишем в правый шим putsf("\r\nПравый мотор вперёд"); } if ((buffer[1] == '4')|(buffer[1] == '3')|(buffer[1] == '2')|(buffer[1] == '1')|(buffer[1] == '0')) { PORTD.2 = 1; //ставим правый бит направления вращения назад PORTD.3 = 0; //и сбрасываем правый бит направления вращения вперёд pwm = (buffer[1] - '0')*10 + (buffer[2] - '0'); //пишем в правый шим putsf("\r\nПравый мотор назад"); } }
а по теме... есть отличнейшая большущая книжка программирование на языке си для микроконтроллеров AVR и PIC лежит на фтп робофорума в формате дежавю и в пдф в дежавю 40 метров в пдф граздо меньше
Можно попробовать Протеус. Там есть и симуляция и отладка - всё можно реально пронаблюдать. К тому же асм.
В том то и дело, что при симуляции в протеусе все работает как на реальном МК ( правда протеус не очень новый: 6.9 сп 5 вроде. Новый на win 98 не идет), а если симулировать работу в АВРстудии, то такого не возникает. Схема 100% рабочая, сделал её давно и писал для неё новые прошивки. Даже логически не понятно, как МК может изменить регистр, который он только читает и сравнивает: отчего собственно и вопрос. А книгу про программирование МК на С недавно удалил..... Добавлено: спасибо, но хочу Вас утруждать. За С я не сяду, пока не организую как минимум USART, ШИМ, I2C и разберусь с АЦП.
У меня включен внутренний RCшник на 1 МГЦ. Возможно, для упрощения симуляции надо увеличить время горения- сделал другую редакцию сразу с проектом протеуса. Теперь оно должно нормально отсимулироваться.