Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

USART+Proteus

Вс янв 29, 2012 08:19:26

Здравствуйте, не могли бы вы помочь. У меня такой случай пытаюсь сделать передачу по 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   
   
      
      lDI      temp,0
      out      DDRD,temp   
      out      PORTD,temp   

      rcall uart_init      ;инициализация  UART

;---------- передача  символа 5
      ldi      r20,'5'
      rcall uart_snt

      sei               ;разрешаем прерывание

;---------- главный цикл
main:

   
      Rjmp   main


;----------
;подпрограммы
;----------
uart_init:   

      LDI    R16, $00
      OUT    UBRRH,R16
      LDI    R16, $33
      OUT    UBRRL,R16
       LDI    R16,0x06      ; скорость передачи 9600 при частоте 8Мгц
      OUT    UCSRC, R16
      
      LDI    R16,$00
      OUT    UCSRA, R16
      LDI    R16,(1<<RXEN)|(1<<TXEN)|(1<<RXCIE) ;RXCIE- разрешение прерывание по завершению приёма
      OUT    UCSRB, R16
      
      RET


;---------- приём по прерыванию
uart_rcv:
   
      IN   temp,UDR            ; байт пришел - забираем.
      out   portb,temp            ; выводим в порт B 
      RETI                  ; Выходим. Результат в rab

;---------- передача      
uart_snt:
      
      SBIS    UCSRA,UDRE      ; Пропуск если нет флага готовности
      RJMP   uart_snt       ; ждем готовности - флага UDRE
      
      OUT   UDR, R20         ; шлем байт
      
      RET
      
exit:      
      RJMP   exit
      



Изображение
Вложения
asm+shem.rar
(15.89 KiB) Скачиваний: 372

Re: USART+Proteus

Вс янв 29, 2012 12:43:07

Протеус в топку. Работайте сразу на железе, чтобы не было потом вопросов типа - а как же так, я в Протеусе всё отладил, а на контроллере не работает. В даташите есть пример программного кода и на Си и на ассемблере. В статье показано как их применить.

Re: USART+Proteus

Вс янв 29, 2012 13:13:40

pokk писал(а):Здравствуйте, не могли бы вы помочь. У меня такой случай пытаюсь сделать передачу по USART в протеусе.

Согласен с предыдущим оратором. В топку все эти симуляторы. На железе нужно отлаживать.

pokk писал(а):Поставил ATtiny2313 подключил его к порту (COMPIM)

Э-м-м... А ничего, что у интерфейса RS-232 логические уровни, мягко говоря, немного отличаются от ТТЛ-овских?
Если Вам нужно связать контроллер с компьютером по COM-порту, возьмите микросхему MAX232, подключите её согласно даташиту и покажите схему Э3. Без этого лично я даже вникать в программу не буду. Ибо бессмысленно.

pokk писал(а):На счёт уровней протеус сам может преобразовать ? раз как-то передаёт

Понятия не имею, что может протеус, но скажите, какова цель вашей работы? В симуляторе отладить? Тогда я Вам не помощник, ибо у меня нет времени на ерунду. Потому что в реальном железе никто за Вас преобразовывать уровни не будет.
Если хотите сделать реальное устройство, начинать нужно со схемы Э3. Программирование - это уже второй этап.

Re: USART+Proteus

Вс янв 29, 2012 13:30:39

В даташите есть пример программного кода и на Си и на ассемблере

Я от туда и взял кусок
Понятия не имею, что может протеус, но скажите, какова цель вашей работы?

Разобраться
возьмите микросхему MAX232, подключите её согласно даташиту и покажите схему Э3

ок

меня просто интересовало почему передача шла а приём не хотел

Re: USART+Proteus

Вс янв 29, 2012 15:40:03

Оффтоп поудалял.
Господа, холиварить - прошу в МЯУ. Тут только по делу.

Re: USART+Proteus

Вт янв 31, 2012 11:43:59

Вот сделал схему по смотрите
VCC=+5в
GND=-5в
Изображение
Вложения
схема.PDF
(129.71 KiB) Скачиваний: 263

Re: USART+Proteus

Вт янв 31, 2012 12:27:32

pokk писал(а):Вот сделал схему по смотрите

Ну, схема верна.
Имейте лишь в виду, что указанное подключение к COM-порту справедливо лишь для разъема DB9. Для разъема DB25 выводы 2 и 3 нужно поменять местами.

Ну, и что Ваш симулятор говорит?

Re: USART+Proteus

Вт янв 31, 2012 12:40:01

Ну, схема верна.

Ок спасибо значит сейчас буду разводить и травить


Ну, и что Ваш симулятор говорит?

Да нечего =) я в нём не пробовал

Re: USART+Proteus

Вт янв 31, 2012 18:16:04

По работе Протеуса очень много материала на Казусе.

Вот, нашёл тут у себя урок по Компиму (надо запустить хтмл-файл).
Вложения
ComPim_Lesson.zip
(399.03 KiB) Скачиваний: 434

Re: USART+Proteus

Вт янв 31, 2012 18:40:41

Так вот передача от контроллер происходит а вот принимать байт он не в какую не хочет
А ничего, что Вы повесили 3 девайса параллельно ? Вам не могло прийти в голову, что Вы одним девайсом просто-напросто засадите другой ?
Хорошо, что Вы в протеусе это собрали, иначе дыма бы не избежать :facepalm:

Re: USART+Proteus

Вт янв 31, 2012 18:58:27

А ничего, что Вы повесили 3 девайса параллельно ? Вам не могло прийти в голову, что Вы одним девайсом просто-напросто засадите другой ?
Хорошо, что Вы в протеусе это собрали, иначе дыма бы не избежать :facepalm:


Оказалось всё куда проще соединил порт и контроллер я не так :facepalm:
Зато программа отлично работает :))

Вот, нашёл тут у себя урок по Компиму (надо запустить хтмл-файл).

спасибо за статью =) это я там это и увидел =))

хм странно соединял как тут крест накрест ,а оказалось надо было напрямую :dont_know:
http://easyelectronics.ru/avr-uchebnyj- ... -uart.html

Re: USART+Proteus

Вт янв 31, 2012 19:17:29

Это как напрямую? TX-TX, RX-RX? :shock:

Re: USART+Proteus

Ср фев 01, 2012 05:32:53

Это как напрямую? TX-TX, RX-RX? :shock:

Ага именно так =)

может крестообразное соединение для контролёров идёт а так как я соединяю порт (да ещё при помощи виртуальной перемычки) там чего-нибуть переворачивается

в железе делать крест накрест ?

Re: USART+Proteus

Ср фев 01, 2012 06:43:37

в железе делать крест накрест ?

Разумеется, иначе попалишь выходы.

Re: USART+Proteus

Чт фев 02, 2012 11:14:54

ploop писал(а):Разумеется, иначе попалишь выходы.


на самом деле MAX232 и аналогичные ей . очень стойкие к неправильному(выход на выход) включению. проверено неоднократно.

Re: USART+Proteus

Чт фев 02, 2012 11:39:43

Это хорошо, от случайностей никто не защищён, но всё равно не стоит не подумав подключать.

Re: USART+Proteus

Пт фев 03, 2012 09:01:22

pokk писал(а):может крестообразное соединение для контролёров идёт а так как я соединяю порт (да ещё при помощи виртуальной перемычки) там чего-нибуть переворачивается

не контролёров, а контрОллеров (ударение на "о" и пишется с двумя "л")
Что касается соединений - это общее правило. Если Вам нужно, например, усилить сигнал с магнитофона, то Вы ведь с ВЫХОДА магнитофона подаете сигнал на ВХОД усилителя, так? Аналогично, если Вы соединяете два устройства для обмена данными между ними (а логически порт и сопрягаемый с ним контроллер являются разными устройствами), то выход (TxD_А) устройства А соединяется со входом (RxD_Б) устройства Б, а вход (RxD_A) устройства А соединяется с выходом (TxD_Б) устройства Б.

pokk писал(а):в железе делать крест накрест ?

Вы же схему Э3 нарисовали - там все верно.
У COM-порта (на разъеме DB9) конт.2 - RxD, конт.3 - TxD, конт.5 - сигнальная "земля". В Вашей схеме нарисовано именно для разъема DB9, по ней и делайте.
(на всякий случай скажу, что для COM-порта с разъемом DB25 распиновка такая: конт.2 - TxD, конт.3 - RxD, конт.7 - сигнальная "земля".

Re: USART+Proteus

Вт июн 05, 2012 13:10:57

Я тоже сначала мучился, но потом с помощью OSCILLOSCOPE проверил сигнал с VIRTUAL TERMINAL и микроконтроллера по отдельности. Оказывается ширина посылки сигнала отличается хотя все делал по формуле UBRR=4000000/(16*110)-1=2272
BAUD VIRTUAL TERMINAL=110. Но потом єксперементально с помощью OSCILLOSCOPE увеличил UBRR до 2335 и все заработало. Наверное єто очередной глюк Протеуса.
Тема закрыта