Нужен приёмо\передатчик на UART интерфейс.
- Sergokot
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Вс янв 17, 2010 15:02:01
- Контактная информация:
Нужен приёмо\передатчик на UART интерфейс.
Доброго времени суток! Делаю умный дом, есть необходимость обмениваться данными между двумя устройствами по беспроводной связи. Сначала хотел использовать отдельный приёмник и передатчик, но для этого нужно много места в устройстве, что недопустимо. Узнал о таких микросхемах, как MRF49XA-I/ST, CC1101RTKR, CC1121RHMT, но все они работают на SPI интерфейсе, а с ним я не знаком, мне ближе UART/USART. Вот чего хочу спросить: Существуют ли подобные трансиверы, с подобными характеристиками, но на UART/USART интерфейс? Или может есть преобразователи UART-SPI?
Re: Нужен приёмо\передатчик на UART интерфейс.
но все они работают на SPI интерфейсе, а с ним я не знаком
А что там сложного-то? Он проще уарта на порядок.
- Sergokot
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Вс янв 17, 2010 15:02:01
- Контактная информация:
Re: Нужен приёмо\передатчик на UART интерфейс.
Я через CodeVisionAvr пишу, он всю сложность USAR'а к минимуму сбавляет, а у SPI столько параметров, что понять я их не могу, да и программу я уже под USART написал.
- Reloader
- Мучитель микросхем
- Сообщения: 451
- Зарегистрирован: Сб фев 26, 2011 14:38:42
- Откуда: Новочеркасск
Re: Нужен приёмо\передатчик на UART интерфейс.
По этому же протоколу работают и сдвиговые регистры типа 74HC595. Протокол прост и разжеван 100 000 раз. (По собственному опыту знаю, как бесят такие фразы.)

Вот наиболее доходчивое описание протокола SPI
http://kit-e.ru/articles/interface/2009_03_53.php
Для более простого понимания (потом все равно читать то, что в 1-й ссылке):
http://avrproject.ru/publ/kak_podkljuchit/bascom_avr_74hc595/2-1-0-44

Вот наиболее доходчивое описание протокола SPI
http://kit-e.ru/articles/interface/2009_03_53.php
Для более простого понимания (потом все равно читать то, что в 1-й ссылке):
http://avrproject.ru/publ/kak_podkljuchit/bascom_avr_74hc595/2-1-0-44
Выпрямите спину и уберите левую руку от лица.
Мой Youtube канал
Мой Youtube канал
- Sergokot
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Вс янв 17, 2010 15:02:01
- Контактная информация:
Re: Нужен приёмо\передатчик на UART интерфейс.
С сдвиговыми триггерами уже работал, проблем с отправкой у меня нету, проблемы с получением информации.
- Reloader
- Мучитель микросхем
- Сообщения: 451
- Зарегистрирован: Сб фев 26, 2011 14:38:42
- Откуда: Новочеркасск
Re: Нужен приёмо\передатчик на UART интерфейс.
Вот это почитай : http://samou4ka.net/page/interfejs-spi-mikrokontrollerov-avr
Выпрямите спину и уберите левую руку от лица.
Мой Youtube канал
Мой Youtube канал
Re: Нужен приёмо\передатчик на UART интерфейс.
Sergokot писал(а):С сдвиговыми триггерами уже работал, проблем с отправкой у меня нету, проблемы с получением информации.
Ну а в чём проблема? Контроллер аппаратно всё получит, вместо того байта, который уехал, будет который приехал. Внутри стоит обычный сдвиговый регистр. С одного конца данные отправляются, с другого принимаются. Вот и вся сложность.
Re: Нужен приёмо\передатчик на UART интерфейс.
Я в своем примере использовал программный SPI. Можно вешать на любые ноги МК. Так показалось проще, в MRF49 регистры 16-битные.
- Sergokot
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Вс янв 17, 2010 15:02:01
- Контактная информация:
Re: Нужен приёмо\передатчик на UART интерфейс.
Спасибо всем буду разбираться.
Re: Нужен приёмо\передатчик на UART интерфейс.
По собственному опыту знаю, как бесят такие фразы.
Еще больше бесят такие:
Я через CodeVisionAvr пишу, он всю сложность USAR'а к минимуму сбавляет, а у SPI столько параметров, что понять я их не могу
Т.е., "я методом тыка использую костыли ардуинового типа, и мне влом читать документацию. Сделайте это за меня и разжуйте."
Отсутствие желания читать документацию - древнейший и самый страшный грех.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Нужен приёмо\передатчик на UART интерфейс.
Здравсвуйте посоветуйте что не так?сделал передатчик на МЕГА48 ,сделал проект на протеусе,выдает только черточки(Уже много раз проверил,непойму где нетак( Частота 8МГц,8 бит данных,один стоп.Может быть косяк в проекте ПРОТЕУС?
Красным подчеркнуто что ненадо читать)
.list
.nolist
.LISTMAC
.def temp = r16;
.def data = r17;
.def delay = r18;
.def delay1 = r19;
.def DC = R20;
.def TEMP1= R28;
.equ XTAL = 8000000
.equ baudrate = 9600
.equ bauddivider = XTAL/(16*baudrate)-1
Reset:
ldi temp,high(RAMEND) ; инициализация стека
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
ldi temp, 0xff ; инициализация порта С на выход
out DDRC, temp ; ----------
rjmp USART_Init;
zapoln:
ldi delay,0x00;
ldi delay1,0x35;
loop:
subi delay,1;
sbci delay1,0;
brcc loop;
ret
USART_Init: ; начало инициализации USART
; скорость передачи даных 9600бод при частоте кварца 8МГц
ldi r17,0
ldi temp,0x51
sts UBRR0L,r17;
sts UBRR0H,temp; установка скорости передачи данных
ldi temp,(1<<RXEN0)|(1<<TXEN0)|(0<<RXCIE0)|(0<<TXCIE0)|(0<<UCSZ02)
sts UCSR0B,temp ; разрешение приемо-передачи данных, запрет прерываний
; установка формата кадра: 8 бит данных, 1 стоповых бита
ldi temp,(0<<UMSEL01)|(0<<UMSEL00)|(0<<USBS0)|(1<<ucsz01) | (1<<ucsz00)
sts UCSR0C,temp ; посилка даных длинной 8 бит
start:
ldi r17,3
sts UDR0,r17 ; этот код мы будим пересылать в ПК
USART_Transmit:
lds temp,UCSR0A;
sbrs temp,5 ;ожидание, пока буфер данных не очистится
rjmp USART_Transmit
; передача кода
rjmp start;
; Прием кода данных из ПК
Priem_koda:
lds temp,UCSR0A;
sbrs temp,7
rjmp Priem_koda
ldi temp,UDR0 ; считываем то,что нам прислал ПК
out PORTC,temp ; принятый код с ПК выводим на выводы порта С
rjmp USART_Transmit ;конец цикла, переход на его начало
Красным подчеркнуто что ненадо читать)
Спойлер
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc".list
.nolist
.LISTMAC
.def temp = r16;
.def data = r17;
.def delay = r18;
.def delay1 = r19;
.def DC = R20;
.def TEMP1= R28;
.equ XTAL = 8000000
.equ baudrate = 9600
.equ bauddivider = XTAL/(16*baudrate)-1
Reset:
ldi temp,high(RAMEND) ; инициализация стека
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
ldi temp, 0xff ; инициализация порта С на выход
out DDRC, temp ; ----------
rjmp USART_Init;
zapoln:
ldi delay,0x00;
ldi delay1,0x35;
loop:
subi delay,1;
sbci delay1,0;
brcc loop;
ret
USART_Init: ; начало инициализации USART
; скорость передачи даных 9600бод при частоте кварца 8МГц
ldi r17,0
ldi temp,0x51
sts UBRR0L,r17;
sts UBRR0H,temp; установка скорости передачи данных
ldi temp,(1<<RXEN0)|(1<<TXEN0)|(0<<RXCIE0)|(0<<TXCIE0)|(0<<UCSZ02)
sts UCSR0B,temp ; разрешение приемо-передачи данных, запрет прерываний
; установка формата кадра: 8 бит данных, 1 стоповых бита
ldi temp,(0<<UMSEL01)|(0<<UMSEL00)|(0<<USBS0)|(1<<ucsz01) | (1<<ucsz00)
sts UCSR0C,temp ; посилка даных длинной 8 бит
start:
ldi r17,3
sts UDR0,r17 ; этот код мы будим пересылать в ПК
USART_Transmit:
lds temp,UCSR0A;
sbrs temp,5 ;ожидание, пока буфер данных не очистится
rjmp USART_Transmit
; передача кода
rjmp start;
; Прием кода данных из ПК
Priem_koda:
lds temp,UCSR0A;
sbrs temp,7
rjmp Priem_koda
ldi temp,UDR0 ; считываем то,что нам прислал ПК
out PORTC,temp ; принятый код с ПК выводим на выводы порта С
rjmp USART_Transmit ;конец цикла, переход на его начало
- Вложения
-
- Безымянный.GIF
- (36.84 КБ) 467 скачиваний
-
- Новая папка.rar
- (17.02 КБ) 211 скачиваний
Re: Нужен приёмо\передатчик на UART интерфейс.
Код: Выделить всё
ldi r17,0
ldi temp,0x51
sts UBRR0L,r17;
sts UBRR0H,temp; установка скорости передачи данныхЕщё раз подумайте , что и куда Вы пишите.
Re: Нужен приёмо\передатчик на UART интерфейс.
ldi r17,0
ldi temp,51
sts UBRR0L,r17;
sts UBRR0H,temp; установка скорости передачи данных
неправильно написал,нужно было 51(десятичной),но всеравно неработает(
ldi temp,51
sts UBRR0L,r17;
sts UBRR0H,temp; установка скорости передачи данных
неправильно написал,нужно было 51(десятичной),но всеравно неработает(
Re: Нужен приёмо\передатчик на UART интерфейс.
А что за магические числа?
Учитесь использовать именованные биты, как в даташите. И всем заодно понятно станет.
Учитесь использовать именованные биты, как в даташите. И всем заодно понятно станет.
Re: Нужен приёмо\передатчик на UART интерфейс.
Обычно инит скорости делают так , благо в даташит есть формулы
Это для моего кварца 0x47
Код: Выделить всё
ldi temp,HIGH((SYSCLK/(16*USARTSPEED))-1) ; для 9600 - - 0x47
outr UBRRH,temp
ldi temp,LOW((SYSCLK/(16*USARTSPEED))-1)
outr UBRRL,tempЭто для моего кварца 0x47
Так ведь и ещё раз неправильно написал, новый Ваш код не привожу за ненадобностью. Ошибку точно не указываю , что бы Вы сами поняли и уже никогда не забудите.неправильно написал...
Re: Нужен приёмо\передатчик на UART интерфейс.
упростил себе задачу так?:
.equ XTAL = 8000000
.equ baudrate = 9600
.equ bauddivider = XTAL/(16*baudrate)-1
ldi r17,low(bauddivider);
ldi temp,high(bauddivider);
sts UBRR0L,r17;
sts UBRR0H,temp;
всеравно непашет(
.equ XTAL = 8000000
.equ baudrate = 9600
.equ bauddivider = XTAL/(16*baudrate)-1
ldi r17,low(bauddivider);
ldi temp,high(bauddivider);
sts UBRR0L,r17;
sts UBRR0H,temp;
всеравно непашет(
Re: Нужен приёмо\передатчик на UART интерфейс.
Странно. Скорость теперь пришла в норму т.е записалась в положенный регистр . Правда не понятно чему соответсвует посылаемый Вами код 3 и что при этом хотите получить на экране и может ли протеус сие воспроизвести.
03 - Ascii - End of Text
03 - Ascii - End of Text
Re: Нужен приёмо\передатчик на UART интерфейс.
я думал число,или это только через Ascii ? а если просто посылать числа,они будут отражаться?
ascii такой ?
ascii такой ?
- Вложения
-
- _ASCII_code.asm
- (21.21 КБ) 241 скачивание
Re: Нужен приёмо\передатчик на UART интерфейс.
ASCII - это вот: http://www.asciitable.com/
Хотите переслать цифру 3 - посылайте код 0х33.
Хотите переслать цифру 3 - посылайте код 0х33.
Re: Нужен приёмо\передатчик на UART интерфейс.
Sergokot писал(а):Доброго времени суток! Делаю умный дом, есть необходимость обмениваться данными между двумя устройствами по беспроводной связи. Сначала хотел использовать отдельный приёмник и передатчик, но для этого нужно много места в устройстве, что недопустимо. Узнал о таких микросхемах, как MRF49XA-I/ST, CC1101RTKR, CC1121RHMT, но все они работают на SPI интерфейсе, а с ним я не знаком, мне ближе UART/USART. Вот чего хочу спросить: Существуют ли подобные трансиверы, с подобными характеристиками, но на UART/USART интерфейс? Или может есть преобразователи UART-SPI?
Попробуй http://www.terraelectronica.ru/catalog. ... =2&PageS=1, http://www.terraelectronica.ru/pdf/SUNRAY/SRWF-1021.pdf прост в подключении, использует UART, USART, большая дальность действия. Выдерживает переплюсовку, но нужна защита от напряжения не более 5 v (проверено).