Страница 1 из 1

UART + ATtiny2313

Добавлено: Вт мар 16, 2010 03:05:46
Тарас
Доброго времени суток.
Вот возникла интересная ситуация: сделал переходинид ЮСБ-УАРТ и решил к нему вцепить тини2313. написал простую прогу
при которой когда нажимаешь на клавиатуре 1 (тоесть аски код 49) контролер отправляет версию оборудования,
при нажатии 2 а затем 1 засвечивается первый светодиод
при нажатии 3 отсылается код кнопки(нажата или нет 1/0)

в протеусе(7,5) работает восхитительно)) все обменивается все супер
на железе, нет( когда посылаешь на порт данные контроллер мертв, думал дело в переходнике, корочил ноги РХ и ДХ посылаю на порт данные - они возвращаются... а вот почему контролер не отвечает, никак не пойму(( когда написал прогу которая в УАРТ (c контроллера) передает данные, то комп принимает их отлично.

Помогите советом, в чем может быть загвоздка ?
(Фюзы никакие на контроллере я не шил - тактируется от внешнего кварца 4МГЦ + 2 кондера на 22пФ)

Файли прошивки исходник и протеус выложил.

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 08:35:52
ibiza11
1=0x31=49
2=0x32=50
3=0x33=51
http://ascii.org.ru/
может со системами исчисления перепутали что?

Добавлено
Посмотрел код, попробуйте в условии вместо <...=="1"...> написать <...==0x31...>

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 08:40:42
Тарас
Проверял, не перепутал.... Парадокс, в протеусе отлично а на железе, ну-никак.

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 08:58:00
ibiza11
посмтрел код на асм :

Код: Выделить всё

;0000 0039         if (num=="1")
   __POINTW1FN _0x0,0
   RCALL SUBOPT_0x1
   BRNE _0x8
макрос __POINTW1FN : записывает число равное (2*(_0х0)+0) в регистры r30 и r31/ (как я понял это число равно нулю)
по сему, думаю что компилятор неправильно понимает надпись =="1"
исправьте, если я неправ.

Код: Выделить всё

   LDI  R30,LOW(2*@0+@1)
   LDI  R31,HIGH(2*@0+@1)
подпрограмма SUBOPT_0x1: сравнивает число в регистрах r30-31 с числом в регистре r17.

Код: Выделить всё

   MOV  R26,R17
   LDI  R27,0
   CP   R30,R26
   CPC  R31,R27
   RET
число в регистре r17 и есть наше число из UARTa:

Код: Выделить всё

;   num -> R17
;   cmd -> R16
;   knopka -> R15.0
попробуйте сделать, как я рекомендовал в предыдущем посте.

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 10:20:38
Тарас
пробовал, не пашет(
в протеусе работает на желези никак... мне кажется может дела з фюзами, может какие-то нужно прошить ?

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 12:36:03
AI_Disable
Тарас писал(а):мне кажется может дела з фюзами, может какие-то нужно прошить ?

Разумеется! С завода тини2313 идёт с внутренним RC на 1 мгц.

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 12:39:30
Тарас
Хотя я подумал (может я и не прав, выправите меня если я заблуждаюсь)...
вот смотрите, я никаких фюзов не шил, потом перепрошил все в состояния 1 (непрошиты).
он тактируеться от внешнего кварца... если были б проблемы с частотой то на терминал не правильно выводились символы, а так воводятся правильно, но вот поидеи с приемом чтото нето.

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 13:19:56
AI_Disable
Ну вот, а говорите не шили. Или вы считаете, что отключение фьюзов не относится к прошивке? Помню, тоже была проблема с тини2313 и UART: выставлял условие на приём конкретного байта, отправлял его, а получал совсем другой. Оказалось, что терминал, после отправки каждой строки, либо отдельного байта, отправлял код конца строки и, естественно, условие в МК не срабатывало. Отключение этой "фитчи" решило проблему.

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 14:12:38
Тарас
ну у меня все правильно передает с терминала компа...

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 14:55:57
urry
Земляк, ведь неизвестно чем ты принимаешь...
Если под линуксом, то для приема бинарной инфы нужно вывести комп-порт из канонического ввода.
Если под виндой, то обратить внимание на rCommTimeouts.ReadTotalTimeoutConstant, может, не вписываешься...
При передачи текстовой инфы завершай строку /r/n.

Re: UART + ATtiny2313

Добавлено: Вт мар 16, 2010 16:28:41
zebrox
Думаю причина именно в переходнике.

Я когда-то пытался сделать переходник на USB-UART на PL2303HX (точно не помню), то была аналогичная ситуация, и когда тх и рх закорачивал тоже прием был, а МК ничего не мог получить с компа, но передавал на пк он нормально. Я забил на это дело и сделал переходник на компорт на двух транзисторах.

Другой человек делал подобный переходник на максе, тоже у него что-то куда-то не шло, но после того как или RTS или DTS притянул к земле или к + уже непомню, то все заработало. Попробуйте эти выводы переходника попритягивать к чему-нибудь, или один из них или оба сразу.