|
Компьютеры Уголок для решения бытовых компьютерных проблем. |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
08.10.2013, 13:15 | #1 |
AVR
Здрасти.
Собственно, нужна помощь в создании прошивки для микроконтроллера. В Atmel AVR написал на С++ программку вращения энкодера. Сама программка небольшая, и вроде бы ошибок нет, но созданный hex-файл не работает ни на живом контроллере, ни в эмуляции на Proteus. Если есть кто в состоянии помочь, то вышлю файлы, и буду безмерно благодарен.
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
08.10.2013, 14:12 | #2 |
Таки модератор
Адрес: Майже Одесса
Сообщений: 56,498
Машина: Темно-сіра
Длина: 238940мкм
Диаметр: 58мм
|
Высылайте, только для это есть свой раздел- Компютеры.
__________________
Вы хотите поставить меня в тупик своими вопросами, а я вас поставлю в тупик своими ответами! |
08.10.2013, 14:15 | #3 |
Вы эмулируете энкодер?
Подробнее давайте. |
|
08.10.2013, 15:01 | #4 |
Куда слать?
Эмуляция энкодера - это 4 выключателя, которые нажимаются вручную (мышкой) в нужные положения. суть затеи - вышел из строя блок управления поворотом вала. Вал вращается в пределах 180 градусов (приблизительно). Для отслеживания положения вала имеется 3 концевика, отслеживающих сектор, и еще один концевик, отслеживающий точное позиционирование. Задатчик - еще 4 кнопки, которыми в зависимости от комбинации выбирается необходимое положение вала. Программа сравнивает текущие значения задатчика и энкодера, и в зависимости от их состояния доворачиваем электромотор в том или ином направлении, или выдает информацию об ошибке. Программа написана, ошибок по дебаггеру нет. Но вот в протеусе и изменений на нажатие кнопок тоже нет...
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
08.10.2013, 15:08 | #5 |
можете и сюда файл прикрепить (наверное), или ссылку на него.
|
|
08.10.2013, 15:16 | #6 |
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
08.10.2013, 15:52 | #7 |
есть подозрение, что по GOTO программа уходит в ошибку и никогда не возвращается.
я бы избавился от них путем оформления всё в процедуры. ладно, еще посижу-посмотрю. |
|
08.10.2013, 15:57 | #8 |
Возможно, я не силен в программировании.
Но хотел бы набраться опыта.
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
08.10.2013, 15:59 | #9 |
мда. у меня этой версии студии нет. могу разве что переписать на иаре.
|
|
08.10.2013, 16:07 | #10 |
частота внутрення рц-цепочка на 1Мгц? правильно я понял?
кстати, ресет у вас на массе. должен быть к питанию. возможно у вас всё работает. перепроверьте. Последний раз редактировалось Kino; 08.10.2013 в 16:09. |
|
08.10.2013, 17:15 | #11 |
С резетом действительно лажанулся. Спасибо.
НО, программа выдает неправильную индикацию и не реагирует ни на какие действия. Сегодня-завтра перепроверю текст, может что-то найду.
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
08.10.2013, 17:23 | #12 |
кстати, диоды в протеусе поменяйте, эти не светятся, можно судить только по уровню на резисторах.
и второе, если кнопки коммутируют питание на пины, то для нормальной симуляции их мк, надо подтянуть через pull-down к массе, иначе, после отпускания кнопки, на входе мк останется лог. 1. короче, правильно оформи схему, и возможно программа отработает правильно. |
|
08.10.2013, 17:53 | #13 |
Так вроде ж в самом начале программы указал подтяжку всех портов через резисторы на массу.
Работу программы проверяю не только в симуляции, но и на живом МК. Благо на работе есть паяльник.
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
08.10.2013, 17:58 | #14 |
там нет резисторов на массу, есть только на питание. на вход с нулями это третье состояние.
ладно, если есть живой макет, то начните с простого, отрабатывает ли диод нажатие кнопки. типа for(; { if (PIND0==0) PORTA = 0xFF else PORTA = 0x00; } потом дальше бум думать. |
|
08.10.2013, 22:39 | #15 |
Я вот как раз и подумал сделать что-то наподобие этого - разбить программу на составляющие, и смотреть как оно работает. Завтра и займусь.
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
09.10.2013, 09:40 | #16 |
стою на асфальте я в лыжи обутый....
текст программы #include <avr/io.h> int main() { PORTA=0x00; //порт А DDRA=0xFF; PORTD=0x00; DDRD=0x00; for(; { { if (PIND0==0) PORTA=0xFF; else PORTA=0x00; } } } и та не работает... первый цикл - диоды погашены, все последующие - диоды включены, независимо от состояния кнопки. Я даже установил подтягивающий резистор на землю - не помогло. Может у меня руки кривые, а извилины - прямые?
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
09.10.2013, 10:38 | #17 |
|
|
09.10.2013, 11:29 | #18 |
Есть и в реальном, и в симуляции...
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
09.10.2013, 11:50 | #19 |
тогда я хз. что-то не правильно настроено в студии.
скомпилил у себя без изменений. пробуй. http://exfile.ru/441062 Последний раз редактировалось Kino; 09.10.2013 в 11:57. |
|
09.10.2013, 11:56 | #20 |
то есть компиляция неправильно идет?
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
09.10.2013, 12:12 | #21 |
походу да.
|
|
09.10.2013, 12:58 | #22 | |
Цитата:
если это моя программа - то не фурычит. после временной задержки выдает не запрограммированную индикацию (portA == 0b00110110),при том даже не отрабатывая положенные шаги. Моя компиляция работала так-же (после подвешивания резет на +) А предыдущий файл - это компиляция какого кода?
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
||
09.10.2013, 13:16 | #23 |
а, ну если так-же, то по идее файл собирает правильно.
предыдущая просто цикл. if (PIND0==0) PORTA=0xFF; else PORTA=0x00; |
|
09.10.2013, 13:32 | #24 |
А ты открывал мой проект? Или создавал свой и писал туда мою программу?
Вопрос в том, что компиляция цикла у меня раза в полтора меньше, чем у тебя. А компиляция программы по размеру такая-же. Может (если открывал мой проект) не перезаписался hex-файл?
__________________
Надейся на лучшее, расчитывай на худшее Люблю Таврооргию. Такого пох№зма и подъ№балова нигде не встретишь! (c) Lusi |
|
09.10.2013, 13:36 | #25 |
почему?
вот мой. :100000000C945800189518951895189518951895EA :100010001895189518951895189518951895189578 :100020001895189518951895189518951895189568 :100030001895189518951895189518951895189558 :100040001895189518951895189518951895189548 :100050001895189500E00BBB0FEF0ABB00E008BB3A :1000600000E007BB00E005BB07E004BB00E002BB0B :1000700000E001BB0FEF0BBB0FE71AE126E00150D8 :1000800010402040E1F700C0000000E00BBB00E2A0 :100090000BBBAA98A89AA998A898A998DA9ADC9A6A :1000A000DD9AD898D99AAA98F7CF00008895FECF04 :1000B0000FE90DBF00E00EBFC0E8D0E00E9466006F :1000C0000E942A000E9455000C94550001E00895FA :00000001FF :00000001FF а вот твой. :100000000C942A000C9434000C9434000C943400AA :100010000C9434000C9434000C9434000C94340090 :100020000C9434000C9434000C9434000C94340080 :100030000C9434000C9434000C9434000C94340070 :100040000C9434000C9434000C9434000C94340060 :100050000C94340011241FBECFE5D4E0DEBFCDBF29 :100060000E9436000C9450000C9400001BBA8FEFD5 :100070008ABB18BA17BA15BA97E094BB12BA11BA6C :100080008BBB1BBA80E28BBBAA98A89AA998A898A8 :10009000A998DA9ADC9ADD9AD898D99AAA98F7CFD3 :0400A000F894FFCF02 :00000001FF опкоды разные, но размер подходит. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|