roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 02:16

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Сломал голову, подскажите пожалуйста
СообщениеДобавлено: 15 июл 2007, 00:27 
Не в сети
Аватара пользователя

Зарегистрирован: 14 июл 2007, 23:38
Сообщения: 346
Откуда: SPb
прог. языки: немного албанский
Начинаю свое знакомство с микроконтроллерами. Сваял схему ( мега-8, 7 диодов на порту D, (начиная с 0го по 6й)  и одна кнопка на нулевом пине порта B), написал програмку, в которой от количестка нажатий на кнопку зависит, в какую сторону движется огонек. В одном- слева направо, в другом- справа налево, в третем- одновременно оба предыдущих случая ( 2 огонька). Но вот незадача: при проверке устройства ( реального) движение слева направо происходит примерно секунду, а потом без нажатия начинается движение справа налево. По идее, без нажатия кнопки происходят только прерывания от таймера, которые двигают огонек, а основная программа зациклена. В АВРстудии вроде все работает без проблем ( по крайней мере, насколько это возможно отсимулировать). В принципе, задача учебная, и её можно решать как это сделано у радиокота http://www.radiokot.ru/start/mcu_fpga/avr/13, но я хочу понять, в чем загвоздка в моём решении.


Вложения:
Комментарий к файлу: проект из АВРстудии
randomway.rar [6.31 КиБ]
Скачиваний: 64
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 01:22 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Дядька осваивай С для AVR, т. к. найти ошибку в ассемблерном коде довольно тяжеловато. Да и читаемость кода написанного на С намного лучше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 01:24 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Кстати в радиокоте ошибка у них не инициализируется переменная счетчика нажатий на резет поэтому каждый раз запуске контроллера программа начинается с неопределенного массива.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 02:06 
Не в сети
Аватара пользователя

Зарегистрирован: 14 июл 2007, 23:38
Сообщения: 346
Откуда: SPb
прог. языки: немного албанский
Спасибо за инфу. До С к сожалению я пока еще не дорос :oops: . Надо хотябы минимальный уровень понимания иметь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 08:37 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
steel_monkey писал(а):
До С к сожалению я пока еще не дорос :oops: .

Надо хотябы минимальный уровень понимания иметь.


Вот пожалуйста - минимум ИМХО достаточный  - http://www.roboforum.ru/viewtopic.htm?t=1070


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 11:07 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
steel_monkey писал(а):
Спасибо за инфу. До С к сожалению я пока еще не дорос :oops: . Надо хотябы минимальный уровень понимания иметь.

асм не есть минимальный уровень
асм есть альтернативный уровень

если смог на асме чтото написать то начальные понятия о том что такое программирование имеешь
следовательно бери си и вперёд
для микроконтроллеров сишник очень прост содержит минимум операторов но оч удобен

вот то что посоветовал товарищь АВР тебе очень поможет
куча народа уже воспользовалась тем курсом и стала писать на си


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 13:15 
Не в сети
Аватара пользователя

Зарегистрирован: 14 июл 2007, 23:38
Сообщения: 346
Откуда: SPb
прог. языки: немного албанский
Спасибо конечно, но "курс" я не перевариваю (хотя как сборник полезных ресурсов-вещь незаменимая). Вроде была книга "программирование МК на С" кого-то там..... Но все равно, как вижу кракозябры С, типа скобочек и прочего, вгоняет в жуткий ступор. На асме все проще на мой взгляд. В моём случае дело наверное в необходимости хорошего отладчика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 13:18 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Выбор языка программирования дело каждого программера, но на данном форуме в основном работают на С. Я начинал тоже на асме, тоже по статье из радиокота, но потом перешел на С и об этом не жалею.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 13:46 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2005, 12:03
Сообщения: 3340
Откуда: Литва
прог. языки: asm
Цитата:
Но все равно, как вижу кракозябры С, типа скобочек и прочего, вгоняет в жуткий ступор. На асме все проще на мой взгляд.

Поддерживаю :)
Цитата:
В моём случае дело наверное в необходимости хорошего отладчика.

Можно попробовать Протеус. Там есть и симуляция и отладка - всё можно реально пронаблюдать. К тому же асм.
___________
С уважением
Vovan


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 16:10 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
да господи
это асм сплошь кракозябры =)


а си это гут
вон какие красивости =)
Код:
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 метров в пдф граздо меньше

я для себя распечал ту часть которая для авр


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 16:34 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
2 steel_monkey если хочешь можем накидать твою программку на С и ты увидишь что ничего страшного нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 16:38 
Не в сети
Аватара пользователя

Зарегистрирован: 14 июл 2007, 23:38
Сообщения: 346
Откуда: SPb
прог. языки: немного албанский
Цитата:
Можно попробовать Протеус. Там есть и симуляция и отладка - всё можно реально пронаблюдать. К тому же асм.

В том то и дело, что при симуляции в протеусе все работает как на реальном МК ( правда протеус не очень новый: 6.9 сп 5 вроде. Новый на win 98 не идет), а если симулировать работу в АВРстудии, то такого не возникает. Схема 100% рабочая, сделал её давно и писал для неё новые прошивки. Даже логически не понятно, как МК может изменить регистр, который он только читает и сравнивает: отчего собственно и вопрос. А книгу про программирование МК на С недавно удалил.....
Добавлено:
спасибо, но хочу Вас утруждать. За С я не сяду, пока не организую как минимум USART, ШИМ, I2C и разберусь с АЦП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 16:51 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Смоделировал только что вашу схему в протеусе, она не рабочая. Диоды беспорядочно мигают. Какой у тебя стоит кварц?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 16:52 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
И кнопка подключена на землю или на +5V ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июл 2007, 17:03 
Не в сети
Аватара пользователя

Зарегистрирован: 14 июл 2007, 23:38
Сообщения: 346
Откуда: SPb
прог. языки: немного албанский
У меня включен внутренний RCшник на 1 МГЦ. Возможно, для упрощения симуляции надо увеличить время горения- сделал другую редакцию сразу с проектом протеуса. Теперь оно должно нормально отсимулироваться.


Вложения:
randomway_2.rar [46.52 КиБ]
Скачиваний: 51
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO