реклама на сайте
подробности

 
 
> Связь между двумя mega48 по UART
D_K_
сообщение Sep 13 2012, 06:52
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 13-09-12
Пользователь №: 73 520



Здравствуйте, уважаемые разработчики.
Подскажите, пожалуйста новичку.

Разрабатываю устройство на основе двух МК (meg48 и mega48P). Один изх них (mega48P) использую для обработки кнопок, и управления. Другой (mega48) - торлько для индикации (7-сегментный СИД-дисплей). Связь между ними осуществляю по UART. Индикационный контроллер (mega48) нработает в режиме SLAVE и только слушает UART. Контроллер управления (mega48P) работает в режиме MASTER и только передаёт сообщения SLAVE . Приём сообщений SLAVE осуществляет по прерыванию RX_Complete.

В SLAVE объявляю прерывание по приёму
.equ URXCaddr
rjmp USART_Receive


Инициализация UARTа в SLAVE :

USART_Init:
clr temp
out UBRR0H, temp
ldi temp, $C ;частота тактирования 1МГц, содержимое UBRR0H=0, UBRR0L=12 => скорость передачи данных 4800bps
out UBRR0L, temp

ldi temp, (1<<RXEN0) ; только приёмник
out UCSR0B,temp
ldi temp, (1<<USBS0)|(3<<UCSZ00); формат передачи: 8data, 2stop bit
out UCSR0C,temp

Инициализация UARTа MASTER :

USART_Init:
clr temp
out UBRR0H, temp
ldi temp, $C ;частота тактирования 1МГц, содержимое UBRR0H=0, UBRR0L=12 => скорость передачи данных 4800bps
out UBRR0L, temp

ldi temp, (1<<TXEN0) ; только передатчик
out UCSR0B,temp
ldi temp, (1<<USBS0)|(3<<UCSZ00); формат передачи: 8data, 2stop bit
out UCSR0C,temp

Приём данных SLAVEом :

USART_Receive:
sbis UCSR0A, RXC0 ; Wait for data to be received
rjmp USART_Receive
in temp, UDR0; Get and return received data from buffer

reti

Передача данных MASTERом :

USART_Transmit:
sbis UCSR0A,UDRE0 ; Wait for empty transmit buffer
rjmp USART_Transmit
ldi temp, 5
out UDR0,temp ; sends the data
ret

Кварцевый резонатро не использую Фьюзы в обоих МК не программировал, поэтому источник тактирования обоих контроллеров - внутренний, установленный по умолчанию (The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmedб resulting in 1.0MHz system clock.).

Ноги RxD и TxD обоих МК перекрестил - RxD MASTERа скоммутировал с TxD SLAVE, ТxD MASTERа скоммутировал с RxD SLAVE. Целостность линий RxD MASTERа -> TxD SLAVE и ТxD MASTERа -> RxD SLAVE тестировал мультиметром непосредственно на лапах контроллеров.

Всё компилируется, но не работает, сволочь. В чём может быть причина?

Заранее спасибо за помощь

P.S. Си владею плохо - буду очень благодарен за примеры на асме
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kovigor
сообщение Sep 13 2012, 12:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(D_K_ @ Sep 13 2012, 09:52) *
Кварцевый резонатро не использую Фьюзы в обоих МК не программировал, поэтому источник тактирования обоих контроллеров - внутренний, установленный по умолчанию (The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmedб resulting in 1.0MHz system clock.).

UARTы будут нормально связываться только если температурный режим обоих МК будет близким, в противном случае частоты генераторов разных МК "разбегутся," и достаточно сильно, что может привести к сбоям в работе UART. См. график зависимости частоты встроенного в МК генератора от температуры в даташите ...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- D_K_   Связь между двумя mega48 по UART   Sep 13 2012, 06:52
- - mempfis_   КодКварцевый резонатро не использую Фьюзы в обоих ...   Sep 13 2012, 07:23
|- - D_K_   Цитата(mempfis_ @ Sep 13 2012, 10:23) Код...   Sep 13 2012, 08:13
|- - mempfis_   Цитата(D_K_ @ Sep 13 2012, 11:13) Есть ка...   Sep 13 2012, 08:41
|- - D_K_   ЦитатаP.S. Ещё пару вопросов - Вы настроили стек? ...   Sep 13 2012, 11:07
|- - D_K_   Цитата(kovigor @ Sep 13 2012, 15:37) UART...   Sep 13 2012, 13:22
|- - kovigor   Цитата(D_K_ @ Sep 13 2012, 16:22) Спасибо...   Sep 13 2012, 14:46
- - ILYAUL   Что-то я так и не увидел , где это SLAVE разрешили...   Sep 13 2012, 13:56
|- - D_K_   Цитата(ILYAUL @ Sep 13 2012, 16:56) Что-т...   Sep 13 2012, 20:40
- - D_K_   Каюсь....Грешен... Выше прокричал на весь мир о то...   Sep 14 2012, 06:10
|- - RabidRabbit   ldi temp,$4 sts tccr1b,temp ldi temp,$1 ...   Sep 14 2012, 06:27
- - zombi   Цитата(D_K_ @ Sep 13 2012, 09:52) ... Инд...   Sep 14 2012, 06:45
|- - D_K_   Цитата(zombi @ Sep 14 2012, 09:45) Зачем ...   Sep 14 2012, 09:21
|- - RabidRabbit   Цитата(D_K_ @ Sep 14 2012, 13:21) Описаны...   Sep 14 2012, 09:32
|- - D_K_   Цитата(RabidRabbit @ Sep 14 2012, 12:32) ...   Sep 14 2012, 17:04
|- - _Артём_   Цитата(D_K_ @ Sep 14 2012, 20:04) Просвет...   Sep 14 2012, 17:40
- - kostyaims   В SLAVE объявляю прерывание по приёму .equ URXCad...   Sep 15 2012, 17:01
|- - _Артём_   Цитата(kostyaims @ Sep 15 2012, 20:01) Вс...   Sep 15 2012, 17:38
- - ILYAUL   КодUSART_Receive: если работаете по прерыванию...   Sep 15 2012, 17:02
- - ILYAUL   В том-то и дело , что kostyaims переписал пост1. ...   Sep 15 2012, 17:49
- - _Артём_   Цитата(ILYAUL @ Sep 15 2012, 20:49) Кстат...   Sep 15 2012, 19:02


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 05:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016