Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/62: Рейтинг темы: голосов - 62, средняя оценка - 4.61
Myst
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 5
1

UART<->SPI

16.03.2011, 23:55. Просмотров 11234. Ответов 7
Метки нет (Все метки)

Всем привет! Для тестирование одного МК по протоколу SPI, решил по быстрому собрать "конвертер" UART<->SPI, что бы можно было наладить связь компа с этим МК. Вот первоночальная прошивка.
исходный код
Код
.include "m16def.yms"
.equ port_spi = portb
.equ ddr_spi = ddrb
.equ miso = pb6
.equ mosi = pb5
.equ ss = pb4
.equ sck = pb7

.equ XTAL = 8000000
.equ baudrate = 9600
.equ bauddivider = XTAL/(16*baudrate)-1

.CSEG

.org 0x00
jmp Start

.org   URXCaddr // USORT, Rx Complete
rjmp Rx_Complete
.org   UDREaddr // USORT Data Register Empty
reti
.org   UTXCaddr // USORT, Tx Complete
reti

.org INT_VECTORS_SIZE
Rx_Complete:
in r17,UDR

WoytUDRE:
sbis UCSRA, UDRE
rjmp WoytUDRE

out UDR, r17

reti

Start:
//stack
ldi r16, low(ROMEND)
out SPL, r16
ldi r16, high(ROMEND)
out SPH, r16

//spi
ldi r16, (1<<sck)|(1<<ss)|(1<<mosi)
out ddr_spi,r16
ldi r16, (1<<spe)|(0<<spie)|(1<<mstr)|(0<<dord)|(0<<cpha)|(0<<cpol)
out spcr, r16

//uart
ldi r16, low(bauddivider)
out UBRRL, r16
ldi r16, high(bauddivider)
out UBRRH, r16

clr r16
out UCSRA, r16

ldi r16, (1<<rxcie)|(1<<rxen)|(1<<txim)
out UCSRB, r16

ldi r16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
out UCSRC, r16

sei

Work:
rjmp Work
Прошивка для проверки роботоспособности UART. Вообщем все работает отлично. Все принятые байты шлются обратно.
Немного модернизировал прошивку:
изменения
Код
Rx_Complete:
in r17,UDR
out SPDR, r17
WoytSPI:
sbis SPSR, SPIF
rjmp WoytSPI

WoytUDRE:
sbis UCSRA, UDRE
rjmp WoytUDRE

out UDR, r17

reti
И тут начались чудеса, причем стабильные. Вот сам простой пример, если отправлять с компьютера байт 40 - 50 то приходит ответ нормальный. если меньше (например 39), то либо молчание, либо 3 нуля в ответ. Использую mega16.
Вопрос в следующем: где моя нигия неверна? = )
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2011, 23:55
Ответы с готовыми решениями:

Помогите реализовать передачу данных по UART или SPI
Доброго времени суток, обращаюсь к вам форумчане за помощью. Требуется передать число с переменной...

Использование интерфейса UART и SPI на ATmega16
подскажите а можно ли использовать USORT и SPI для реализации радиоуправления?

SPI -> 485->SPI
Есть необходимость переводить SPI на 485 интерфейс. Хотел бы уточнить, драйвер 485 сажать напрямую...

SPI v.s. TWI
Задумался об организации совместной работы 2-х платок на атмегах-сестрах (48 и 168). Рассматривал...

Sdio vs spi
Привет ребята, на данный момент нужно подключить lpc4357 микроконтроллер к wi-fi модулю gainspan...

7
ptoop
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
17.03.2011, 01:24 2
Отмечусь...
0
svd71
0 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 62
18.03.2011, 01:20 3
Честно говоря, в код особо не глядел, но заметил следующее:
1. перед отправкой данных в SPDR, нужно подождать, когда сброшен флаг SPIF. По крайней мере это я не обнаружил.
2. на каких частотах работают контроллеры и мастер и слэйв? это тоже очень важный момент для SPI. То есть слэйв банально может не успевать переключаться за мастером.
0
Myst
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 5
18.03.2011, 01:27 4
Цитата Сообщение от svd71
Честно говоря, в код особо не глядел, но заметил следующее:
1. перед отправкой данных в SPDR, нужно подождать, когда сброшен флаг SPIF. По крайней мере это я не обнаружил.
2. на каких частотах работают контроллеры и мастер и слэйв? это тоже очень важный момент для SPI. То есть слэйв банально может не успевать переключаться за мастером.
1. у меня идет ожидание после отправки. интервал между передачами больше секунд 10ти. но в будущем пофикчу.
2. знаю. частота передачи должна быть равной или меньшей fcp/4, где fcp - тактовая скорость slave
но фигня в другом, после добавления простой отправки байта по SPI (ответ игнорируется), слетает UART.
0
18.03.2011, 01:27
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
18.03.2011, 01:30 5
А можно проектик, чтоб в протеусе помучать?
0
Yok40
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 36
19.03.2011, 12:34 6
А я SPI Тестирую так:

Через STK200 запускаю:

avrdude -c stk200 -p m16 -t

>>spi
>>send 0xff ....

и.т.п. И усе.
Ну и чипселект притянуть в ноль...

Правда avrdud нужен из комплекта winavr
0
Myst
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 5
19.03.2011, 13:01 7
Цитата Сообщение от dsodir
А можно проектик, чтоб в протеусе помучать?
Как такового проекта еще нет. Проект состоит в том что пару МК будут обмениваться по SPI байтиками, и для первичной отладки хотел один МК заменить компом. Для этого собрал на скорую руку на макетке конвертер. Но зашив туда мою прошивку получилась фигня = ) Ща наверно все таки сделаю нормальную плату, и уже буду тестить на ней.
Цитата Сообщение от Yok40
А я SPI Тестирую так:

Через STK200 запускаю:

avrdude -c stk200 -p m16 -t

>>spi
>>send 0xff ....

и.т.п. И усе.
Ну и чипселект притянуть в ноль...

Правда avrdud нужен из комплекта winavr
я узаю громова, и юнипроф. и так как комп будет имулировать 2ой МК, там надо будет принимать и отправлять байты, анализируя их.
0
Myst
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 5
19.03.2011, 23:18 8
Собрал переходник, используя ATmega8A, все заработало. Подозреваю попся бракованный МК.
0
19.03.2011, 23:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2011, 23:18

atmega spi
Итак, есть проект на Attiny2313 http://we.iosyitistromyss.ru/Lifelover/tcp-http-i-tinka.html. Я...

SPI at89s53
Нужно в микроконтроллер принять 2 байта из АЦП mcp3201. Пишу программу в Keil uVision5, при...

SPI Xmega
Есть учебное задание соединить 2 МК Xmega 182A1 Возникла проблема, с ведомым. Ну как проблема,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.