Здравствуйте, не могли бы вы помочь. У меня такой случай пытаюсь сделать передачу по USART в протеусе. Поставил ATtiny2313 подключил его к порту (COMPIM), установил программу Free Virtual Serial Ports Emulator (которая виртуально соединяет порты и соединил 2рой и 5тый )(контроллер подключен к 2отму порту а терминал ко 5ому) а теперь пытаюсь при помощи терминала принять или отправить байт. Так вот передача от контроллер происходит а вот принимать байт он не в какую не хочет
На счёт уровней протеус сам может преобразовать ? раз как-то передаёт
Код:
.include "tn2313def.inc" ; Присоединение файла описаний .def temp=r18 .def rab = r17 ; Определение рабочего регистра
;---------- Начало программного кода
.cseg ; Выбор сегмента программного кода .org 0 ; Установка текущего адреса на ноль
start: rjmp init ; Переход на начало программы reti ; Внешнее прерывание 0 reti ; Внешнее прерывание 1 reti ; Прерывание по захвату таймера T1 reti ; Прерывание по совпадению T1 reti ; Прерывание по переполнению T1 reti ; Прерывание по переполнению T0 rjmp uart_rcv ; Прерывание UART прием завершен reti ; Прерывание UART регистр данных пуст reti ; Прерывание UART передача завершена reti ; Прерывание по компаратору reti ; Прерывание по изменению на любом контакте reti ; Таймер/счетчик 1. Совпадение B reti ; Таймер/счетчик 0. Совпадение B reti ; Таймер/счетчик 0. Совпадение A reti ; USI Стартовая готовность reti ; USI Переполнение reti ; EEPROM Готовность reti ; Переполнение охранного таймера ;---------- init: ldi temp, ramend ; Выбор адреса вершины стека out SPL, temp ; Запись его в регистр стека
;---------- Инициализация портов ВВ lDI temp,0b11111111 out DDRB,temp
Протеус в топку. Работайте сразу на железе, чтобы не было потом вопросов типа - а как же так, я в Протеусе всё отладил, а на контроллере не работает. В даташите есть пример программного кода и на Си и на ассемблере. В статье показано как их применить.
Здравствуйте, не могли бы вы помочь. У меня такой случай пытаюсь сделать передачу по USART в протеусе.
Согласен с предыдущим оратором. В топку все эти симуляторы. На железе нужно отлаживать.
pokk писал(а):
Поставил ATtiny2313 подключил его к порту (COMPIM)
Э-м-м... А ничего, что у интерфейса RS-232 логические уровни, мягко говоря, немного отличаются от ТТЛ-овских? Если Вам нужно связать контроллер с компьютером по COM-порту, возьмите микросхему MAX232, подключите её согласно даташиту и покажите схему Э3. Без этого лично я даже вникать в программу не буду. Ибо бессмысленно.
pokk писал(а):
На счёт уровней протеус сам может преобразовать ? раз как-то передаёт
Понятия не имею, что может протеус, но скажите, какова цель вашей работы? В симуляторе отладить? Тогда я Вам не помощник, ибо у меня нет времени на ерунду. Потому что в реальном железе никто за Вас преобразовывать уровни не будет. Если хотите сделать реальное устройство, начинать нужно со схемы Э3. Программирование - это уже второй этап.
Ну, схема верна. Имейте лишь в виду, что указанное подключение к COM-порту справедливо лишь для разъема DB9. Для разъема DB25 выводы 2 и 3 нужно поменять местами.
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4567 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Цитата:
Так вот передача от контроллер происходит а вот принимать байт он не в какую не хочет
А ничего, что Вы повесили 3 девайса параллельно ? Вам не могло прийти в голову, что Вы одним девайсом просто-напросто засадите другой ? Хорошо, что Вы в протеусе это собрали, иначе дыма бы не избежать
А ничего, что Вы повесили 3 девайса параллельно ? Вам не могло прийти в голову, что Вы одним девайсом просто-напросто засадите другой ? Хорошо, что Вы в протеусе это собрали, иначе дыма бы не избежать
Оказалось всё куда проще соединил порт и контроллер я не так Зато программа отлично работает
Цитата:
Вот, нашёл тут у себя урок по Компиму (надо запустить хтмл-файл).
может крестообразное соединение для контролёров идёт а так как я соединяю порт (да ещё при помощи виртуальной перемычки) там чего-нибуть переворачивается
может крестообразное соединение для контролёров идёт а так как я соединяю порт (да ещё при помощи виртуальной перемычки) там чего-нибуть переворачивается
не контролёров, а контрОллеров (ударение на "о" и пишется с двумя "л") Что касается соединений - это общее правило. Если Вам нужно, например, усилить сигнал с магнитофона, то Вы ведь с ВЫХОДА магнитофона подаете сигнал на ВХОД усилителя, так? Аналогично, если Вы соединяете два устройства для обмена данными между ними (а логически порт и сопрягаемый с ним контроллер являются разными устройствами), то выход (TxD_А) устройства А соединяется со входом (RxD_Б) устройства Б, а вход (RxD_A) устройства А соединяется с выходом (TxD_Б) устройства Б.
pokk писал(а):
в железе делать крест накрест ?
Вы же схему Э3 нарисовали - там все верно. У COM-порта (на разъеме DB9) конт.2 - RxD, конт.3 - TxD, конт.5 - сигнальная "земля". В Вашей схеме нарисовано именно для разъема DB9, по ней и делайте. (на всякий случай скажу, что для COM-порта с разъемом DB25 распиновка такая: конт.2 - TxD, конт.3 - RxD, конт.7 - сигнальная "земля".
Я тоже сначала мучился, но потом с помощью OSCILLOSCOPE проверил сигнал с VIRTUAL TERMINAL и микроконтроллера по отдельности. Оказывается ширина посылки сигнала отличается хотя все делал по формуле UBRR=4000000/(16*110)-1=2272 BAUD VIRTUAL TERMINAL=110. Но потом єксперементально с помощью OSCILLOSCOPE увеличил UBRR до 2335 и все заработало. Наверное єто очередной глюк Протеуса.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения