ТавроФорум

ТавроФорум (https://forum.tavria.org.ua/index.php)
-   Компьютеры (https://forum.tavria.org.ua/forumdisplay.php?f=70)
-   -   AVR (https://forum.tavria.org.ua/showthread.php?t=70385)

Pilot 08.10.2013 13:15

AVR
 
Здрасти.
Собственно, нужна помощь в создании прошивки для микроконтроллера.
В Atmel AVR написал на С++ программку вращения энкодера.
Сама программка небольшая, и вроде бы ошибок нет, но созданный hex-файл не работает ни на живом контроллере, ни в эмуляции на Proteus.

Если есть кто в состоянии помочь, то вышлю файлы, и буду безмерно благодарен.

кук 08.10.2013 14:12

Высылайте, только для это есть свой раздел- Компютеры.

Kino 08.10.2013 14:15

Вы эмулируете энкодер?
Подробнее давайте.

Pilot 08.10.2013 15:01

Куда слать?


Эмуляция энкодера - это 4 выключателя, которые нажимаются вручную (мышкой) в нужные положения.

суть затеи - вышел из строя блок управления поворотом вала.
Вал вращается в пределах 180 градусов (приблизительно).
Для отслеживания положения вала имеется 3 концевика, отслеживающих сектор, и еще один концевик, отслеживающий точное позиционирование.

Задатчик - еще 4 кнопки, которыми в зависимости от комбинации выбирается необходимое положение вала.

Программа сравнивает текущие значения задатчика и энкодера, и в зависимости от их состояния доворачиваем электромотор в том или ином направлении, или выдает информацию об ошибке.



Программа написана, ошибок по дебаггеру нет.
Но вот в протеусе и изменений на нажатие кнопок тоже нет...

Kino 08.10.2013 15:08

можете и сюда файл прикрепить (наверное), или ссылку на него.

Pilot 08.10.2013 15:16

http://www.ex.ua/878246416461

Наверняка будут вопросы. Если надо - могу перезвонить.

Kino 08.10.2013 15:52

есть подозрение, что по GOTO программа уходит в ошибку и никогда не возвращается.

я бы избавился от них путем оформления всё в процедуры. ладно, еще посижу-посмотрю.

Pilot 08.10.2013 15:57

Возможно, я не силен в программировании.
Но хотел бы набраться опыта.

Kino 08.10.2013 15:59

мда. у меня этой версии студии нет. могу разве что переписать на иаре.

Kino 08.10.2013 16:07

частота внутрення рц-цепочка на 1Мгц? правильно я понял?
кстати, ресет у вас на массе. должен быть к питанию. возможно у вас всё работает. перепроверьте.

Pilot 08.10.2013 17:15

С резетом действительно лажанулся. Спасибо.

НО, программа выдает неправильную индикацию и не реагирует ни на какие действия.
Сегодня-завтра перепроверю текст, может что-то найду.

Kino 08.10.2013 17:23

кстати, диоды в протеусе поменяйте, эти не светятся, можно судить только по уровню на резисторах.
и второе, если кнопки коммутируют питание на пины, то для нормальной симуляции их мк, надо подтянуть через pull-down к массе, иначе, после отпускания кнопки, на входе мк останется лог. 1.

короче, правильно оформи схему, и возможно программа отработает правильно.

Pilot 08.10.2013 17:53

Так вроде ж в самом начале программы указал подтяжку всех портов через резисторы на массу.

Работу программы проверяю не только в симуляции, но и на живом МК. Благо на работе есть паяльник.

Kino 08.10.2013 17:58

там нет резисторов на массу, есть только на питание. на вход с нулями это третье состояние.

ладно, если есть живой макет, то начните с простого, отрабатывает ли диод нажатие кнопки.

типа
for(;;)
{
if (PIND0==0)
PORTA = 0xFF
else
PORTA = 0x00;
}

потом дальше бум думать.

Pilot 08.10.2013 22:39

Я вот как раз и подумал сделать что-то наподобие этого - разбить программу на составляющие, и смотреть как оно работает. Завтра и займусь.

Pilot 09.10.2013 09:40

стою на асфальте я в лыжи обутый....

текст программы

#include <avr/io.h>

int main()
{
PORTA=0x00; //порт А
DDRA=0xFF;

PORTD=0x00;
DDRD=0x00;
for(;;)
{
{
if (PIND0==0)
PORTA=0xFF;
else
PORTA=0x00;
}
}
}

и та не работает...
первый цикл - диоды погашены, все последующие - диоды включены, независимо от состояния кнопки.
Я даже установил подтягивающий резистор на землю - не помогло.

Может у меня руки кривые, а извилины - прямые?

Kino 09.10.2013 10:38

а так реакция на пинд0 в реальном железе есть?

http://exfile.ru/441048

Pilot 09.10.2013 11:29

Есть и в реальном, и в симуляции...

Kino 09.10.2013 11:50

тогда я хз. что-то не правильно настроено в студии.
скомпилил у себя без изменений.
пробуй.

http://exfile.ru/441062

Pilot 09.10.2013 11:56

то есть компиляция неправильно идет?

Kino 09.10.2013 12:12

походу да.

Pilot 09.10.2013 12:58

Цитата:

Сообщение от Kino (Сообщение 2474189)
тогда я хз. что-то не правильно настроено в студии.
скомпилил у себя без изменений.
пробуй.

http://exfile.ru/441062


если это моя программа - то не фурычит.
после временной задержки выдает не запрограммированную индикацию (portA == 0b00110110),при том даже не отрабатывая положенные шаги.
Моя компиляция работала так-же (после подвешивания резет на +)

А предыдущий файл - это компиляция какого кода?

Kino 09.10.2013 13:16

а, ну если так-же, то по идее файл собирает правильно.

предыдущая просто цикл.
if (PIND0==0)
PORTA=0xFF;
else
PORTA=0x00;

Pilot 09.10.2013 13:32

А ты открывал мой проект? Или создавал свой и писал туда мою программу?

Вопрос в том, что компиляция цикла у меня раза в полтора меньше, чем у тебя.
А компиляция программы по размеру такая-же. Может (если открывал мой проект) не перезаписался hex-файл?

Kino 09.10.2013 13:36

почему?

вот мой.
: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


опкоды разные, но размер подходит.


Текущее время: 21:05. Часовой пояс GMT +3.

Перевод: zCarot Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.