Технический форум по робототехнике.
Myp » 15 фев 2007, 23:33
ХЕЛП
прерывание виснет
но программа работает
поставил отладочный светик на PINB.4 когда прога работает он моргает
второй отладочный светик на PINB.5 который должен сработать если контроллер хоть раз вошёл в прерывание PIND.6 включается если прерывание отработало и пошла моя процедура PIND.7 если моя процедура прошла.
во время приёма данных процессор зависает
светик который на входе в прерывание PINB.5 не загораецца
тоесть проц уходит по прерыванию но процедура прерывания не запускаеться
настройки с 2х концов одинаковые
провода не перепутал
в чём может быть дело????
исходник в инклюде
- Вложения
-
контроллер.c
- (5.08 КиБ) Скачиваний: 422
avr123.nm.ru » 16 фев 2007, 00:44
ставь метки как в avr123.nm.ru/z4.htm
и смотри где виснет.
Myp » 16 фев 2007, 11:50
метки...
толку от этих меток ежели я устройство уартом подключаю к КПК
вместо меток я на свободные ноги мк светодиодов нацепил и в код вместо меток поставил включение ножек последовательно
когда начинаецца передача часть светиков срабатывает часть нет
мне от этих меток не жарко не холодно
я ведь их в принципе не могу ничем увидеть так как уарт занят подключён к девайсу
виснет гдето в этих 4х строчках
вчера вечером устал спать пошёл не определил точно в какой
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) //тут ещё прога работает
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE) //а вот досюда процессор не доходит
такое чуство что мк по прерыванию начинает принимать данные но почемуто не принимает и висит в непрерывном ожидании. хз мож ждёт пока буфер заполнится или ещё что.
похоже дело не в том что код у меня дурацкий а просто я непонимаю как уарт сделать человечески
avr123.nm.ru » 16 фев 2007, 13:44
Myp писал(а):мне от этих меток не жарко не холодно
я ведь их в принципе не могу ничем увидеть так как уарт занят подключён к девайсу
дак устройство отображает информацию ? если нет то кинте параллелно провод на устройство отображающее инфу.
На выход USART можно кучу приемников навесить... ДВА совсем легко !
avr123.nm.ru » 16 фев 2007, 13:45
или в симуляторе посмотрите.
Myp » 16 фев 2007, 16:00
и в что я получу подрубившись в линию??
тоже самое только вместо светиков у меня в терминале придёт сообщение - метка стоящая перед этими 4мя строчками кода
и чтоб подрубиться это мне ещё надо заказывать преобразователь интерфейса в москве, неделю только ждать.
во вторых код абсолютно типичный
у в задачах курса один в один такой же код для уарта
и в эмуляторе всё ессесно гуд также как и в задачах курса
но в железе почемуто не идёт =/
avr123.nm.ru » 16 фев 2007, 16:32
Myp писал(а):чтоб подрубиться это мне ещё надо заказывать преобразователь интерфейса в москве, неделю только ждать.
достаточно резистор 10 к на базу кт3102, эмитер на землю, коллектор на +5 вольт через резистор 3 ком и с коллектора проводок на вход КОМ порта ну и земли соединить.
Myp писал(а):в задачах курса один в один такой же код для уарта
и в эмуляторе всё ессесно гуд также как и в задачах курса
но в железе почемуто не идёт =/
значит какое то различие в железе раз в эмуляторе нормально работает.
avr123.nm.ru » 16 фев 2007, 16:37
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE) //а вот досюда процессор не доходит
попробуйте так:
if (++rx_wr_index == RX_BUFFER_SIZE)
{
rx_wr_index=0;
}
if (++rx_counter == RX_BUFFER_SIZE)
{ //а вот досюда процессор не доходит
}
===============
вы уверены что rx_counter rx_counter у вас достигает (RX_BUFFER_SIZE - 1)
Myp » 16 фев 2007, 17:16
вы уверены что rx_counter rx_counter у вас достигает (RX_BUFFER_SIZE - 1)
неа не уверен
тока как бы посмотреть до скольки эта считалочка считает...
в принципе я пробовал всего 1 символ отправить, не прошёл
достаточно резистор 10 к на базу кт3102, эмитер на землю, коллектор на +5 вольт через резистор 3 ком и с коллектора проводок на вход КОМ порта ну и земли соединить.
ладно уговорили пойду в суботу на рынок куплю транзистор =)
ато я ток недавно перехал в голую квартиру пришлось всё закупать с нуля паяльник, пинцет, резисторы, даж с проводками проблема=)
ЗЫ
надо всёже подключить выход кпк к звуковухе померять какие там импыльсы и уровни
ато у меня вкрались сомнения что там не всё в порядке
![Evil or Very Mad :evil:](http://roboforum.ru/images/smilies/icon_evil.gif)
avr123.nm.ru » 16 фев 2007, 17:35
на звуковуху можно и с USART передавать ! (через резистор 22-100 ком)
только расшифоровывать в ручную придется, или утилитку написать. с скорость передачи наверно до 4800-9600 делать.
звуковуха со звуковым редактором это же 2-х лучевой низкочастотный осциллограф.
avr123.nm.ru » 16 фев 2007, 17:38
а что ты топик не в микроконтроллерах завел ?
Myp » 16 фев 2007, 20:32
avr123.nm.ru писал(а):а что ты топик не в микроконтроллерах завел ?
ну это
тут же ветка для ламеров
если бы это была какаято реальная тема...
передача данных по USART это как раз основы основ, и заковыка у меня чисто ламерская :(
на счёт передачи
1 символ то по уарту можно и вручную расшифровать=)
Myp » 16 фев 2007, 20:56
ой я дураааак
у меняж контроллер настроен на 9600
а прогу я залил со скоростью 19200
пока экспериментировал с прогой забыл 9600 поставить
это я тока когда звуковухой померел и ничё не увидел понял что скорость слишком дикая
пойду прогу переделывать
Myp » 16 фев 2007, 21:38
переделал не помогло...
короче померял на компе звуковухой
если передаёт МК форма сигналов такая
------- ---- ------/-/-/-/-/-/-/-/-/(типа нулевой уровень и 50Гц шум)
| | | |
|_| |______| тоесть на картинке импульсы это провалы
а если передаёт КПК форма сигналов такая
--- ---------
| | | |
____| |__| |___/_/_/_/_/___ тоесть на картинке импульсы это пики
причём уровень сигнала от КПК зашкаливает почти а уровень сигнала от мк вполне в пределах
чёто мне это не нравица
Myp » 16 фев 2007, 22:13
вобщем так
вычислил строчку в которой виснет
status=UCSRA;
PINB.5 = 1;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
PIND.6 = 1;
светик на ноге 5 загорается светик на ноге 6 не загорается
помогите расшифровать строчку if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
это я так понял проверка на 3 типа ошибок.
ошибка фрейма FRAMING_ERROR
ошибка чётности PARITY_ERROR
и чёто с данными DATA_OVERRUN
а вот с операциями логическими непонял ну короче если в итоге условия не равны нулю то прога работает
сначала делаем побитовую операцию "или" между FRAMING_ERROR PARITY_ERROR и DATA_OVERRUN
потом делаем побитовую операцию сложения UCSRA и результатом"или"
блиин нифига не понимаю в этих операциях
единственно что понятно это то что результат этих операций у меня ноль и прога стопаеться
Последний раз редактировалось
Myp 16 фев 2007, 22:32, всего редактировалось 1 раз.