Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с ATMega32 и RS232
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
QuickWitted
Я работал с мегами 8, 16 и 48...
там всё было нормально - определял все ноги RS232 под вход и
записывал в них 1 (этим подключал подтягивающий резистор),
потом инициализировал RS232 и всё было нормально...

теперь решил собрать на меги 32...
всё делаю так же как и на меге 16, а в комп ничего не передаётся...
полез по ногам светодиодом шарить (через сопротивление 1,5к на землю)

и выясняется у мег 8, 16 и 48 при вставании на TX светодиод горит,
а на меге 32 после инициализации нога ведёт себя как вход...

Так приплыли...
ладно думаю может порт издох... хотя проц новый...
пойдём другим путём - настраиваю ТХ как выход, записываю
в него 1 - инициализирую - проверяю - светодиод горит, но передачи как не было так и нету sad.gif

в чём может быть трабла ?


Инициализирую так:
-----------------------------------------------------------------------------
.equ UART_BAUDRATE = 115200
.equ UART_BAUDK = (CLOCK/(16*UART_BAUDRATE))-1

ldi R16_Tmp1,low(UART_BAUDK) ; Загрузка скорости ком порта
sts UBRRL,R16_Tmp1
ldi R16_Tmp1,high(UART_BAUDK)
sts UBRRH,R16_Tmp1

ldi R16_Tmp1, 0b00000000 ; Clear UART flags
sts UCSRA, R16_Tmp1

ldi R16_Tmp1,(1<<TXEN)|(1<<RXEN)|(1<<RXCIE) ; Еnable receiver and transmitter
sts UCSRB,R16_Tmp1 ; RXCIE - разрешение прерывания по приёму в UDR
; TXCIE - разрешение прерывания по передаче из UDR
; TDRIE - разрешение прерывания по пустому UDR

; ldi R16_Tmp1,(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); Set frame format: 8N1

ldi R16_Tmp1,(1<<UCSZ1)|(1<<UCSZ0) ; Set frame format: 8N1
sts UCSRC,R16_Tmp1
-----------------------------------------------------------------------------,
_Pasha
Tx должен быть настроен на выход в любом случае.
Палыч
Записывать в регистры нужно, imho, командой out. Сбрасывают флаги - занесением единицы
P.S. Впрочем, записывать можно и sts, вот, только адреса прийдется поправить...
Dog Pawlowa
Если не установить как выход, то некоторые экземпляры могут работать, даже у Меги 128. Может, это и ввело в заблуждение.
А чтобы передача началась, может передать что ? smile.gif
Палыч
Цитата(Dog Pawlowa @ Feb 18 2008, 14:28) *
Если не установить как выход, то некоторые экземпляры могут работать, даже у Меги 128.


Читаем ДШ
Цитата


RXD, Receive Data (Data input pin for the USART). When the USART Receiver is

enabled this pin is configured as an input regardless of the value of DDD0. When the

USART forces this pin to be an input, the pull-up can still be controlled by the PORTD0

bit.

TXD, Transmit Data (Data output pin for the USART). When the USART Transmitter is

enabled, this pin is configured as an output regardless of the value of DDD1.

Dog Pawlowa
Цитата(Палыч @ Feb 18 2008, 15:38) *
Читаем ДШ

Прижучили smile.gif
Дело было так. После MSP430 делал что-то на Mеге. Не передает. Смотрю осциллографом - Tx какой-то недоделанный, но есть, зараза. Ругнулся на затейливый Атмел, добавил установку на выход, добавил внешнюю подтяжку (чтобы сеть не положить до инициализации). Все заработало. Но зарубка в памяти осталась. Предлагаете забыть?
=GM=
Цитата(QuickWitted @ Feb 18 2008, 10:11) *
и выясняется у мег 8, 16 и 48 при вставании на TX светодиод горит, а на меге 32 после инициализации нога ведёт себя как вход...

Чудес не бывает, если после инициализации нога не встала на выход - значит вы ее не проинициализировали вот здесь
Цитата(QuickWitted @ Feb 18 2008, 10:11) *
ldi R16_Tmp1,(1<<TXEN)|(1<<RXEN)|(1<<RXCIE) ; Еnable receiver and transmitter
sts UCSRB,R16_Tmp1

Проверьте точно ли тот адрес UCSRB используете. Должен быть 0х2А для команды sts или 0х0А для команды out

Цитата(QuickWitted @ Feb 18 2008, 10:11) *
ldi R16_Tmp1,(1<<UCSZ1)|(1<<UCSZ0) ; Set frame format: 8N1
sts UCSRC,R16_Tmp1

Для доступа к регистру UCSRC надо установить бит URSEL в 1, вы этого не делаете. Ну и опять же проверьте адрес регистра. Лучше пользуйтесь командой out и адресом 0х20
QuickWitted
Цитата(=GM= @ Feb 18 2008, 17:41) *
Чудес не бывает, если после инициализации нога не встала на выход - значит вы ее не проинициализировали вот здесь


Спасибо - сейчас проверю...


Цитата(=GM= @ Feb 18 2008, 17:41) *
Проверьте точно ли тот адрес UCSRB используете. Должен быть 0х2А для команды sts или 0х0А для команды out


Проверил...
По запарке подгрузил не тот файл констант...
Большое спасибо... Запустилось....
defunct
Цитата(_Pasha @ Feb 18 2008, 12:35) *
Tx должен быть настроен на выход в любом случае.

не должен.
Сам настроится при включении соотв. периферии.
_Pasha
Цитата(defunct @ Feb 19 2008, 18:28) *
не должен.
Сам настроится при включении соотв. периферии.

Ой, в сусанины записался. Извините. Пошел курить даташиты.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.