roboforum.ru

Технический форум по робототехнике.

прерывание виснет

прерывание виснет

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)


неа не уверен :roll:
тока как бы посмотреть до скольки эта считалочка считает... :?:
в принципе я пробовал всего 1 символ отправить, не прошёл


достаточно резистор 10 к на базу кт3102, эмитер на землю, коллектор на +5 вольт через резистор 3 ком  и с коллектора проводок на вход КОМ порта ну и земли соединить.

ладно уговорили пойду в суботу на рынок куплю транзистор =)
ато я ток недавно перехал в голую квартиру пришлось всё закупать с нуля паяльник, пинцет, резисторы, даж с проводками проблема=)

ЗЫ
надо всёже подключить выход кпк к звуковухе померять какие там импыльсы и уровни
ато у меня вкрались сомнения что там не всё в порядке :evil:

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 раз.


cron
Rambler\'s Top100 Mail.ru counter