Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.09.2012, 21:37
|
|
Прописка
Регистрация: 28.12.2006
Сообщений: 277
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 18 сообщении(ях)
|
10 бит в SPI протоколе
Нужно связать мегу8 и ЦАП TLC5615 по SPI протоколу, но тут вопрос, ЦАП 10 битный а протокол 8 бит, получается что второй блок цап "урежит" сам? Или я ошибаюсь? Может кто поделится кодом, или показать на примере, хочу понять логику.
|
|
|
Сказали "Спасибо" Faworit
|
|
|
07.09.2012, 22:45
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: 10 бит в SPI протоколе
Да ничего там не "урежет". Ну даташит то прочитай. Два байта, то есть, 16 бит, 4 старших бита - пустые.
Протокол то может и по 8 бит, но количество передаваемых байт - не ограничено.
Ты должен по SPI передать последовательно 2 байта. Для 0 Вольт на выходе нужно передать 0х00 0х00.
Для почти Vrefin на выходе - передать 0x08 0x00.
Для почти удвоенного Vrefin напряжения на выходе - передать 0x0F 0xFC
Минимальное значение приращения от нуля - 0х00 0х04
Последний раз редактировалось Алекс Василич; 07.09.2012 в 23:08.
|
|
|
Сказали "Спасибо" Алекс Василич
|
|
|
07.09.2012, 22:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,014
Сказал спасибо: 3,025
Сказали Спасибо 3,196 раз(а) в 2,168 сообщении(ях)
|
Re: 10 бит в SPI протоколе
1. Да-да, RTFM. Передаётся от мастера 16 бит. Для осмысления временных диаграмм знание английского не обязательно.
2. Есть для tiny26 + TLC5606. Но - на ассемблере и для USI. Интересно?
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
08.09.2012, 10:30
|
|
Прописка
Регистрация: 28.12.2006
Сообщений: 277
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 18 сообщении(ях)
|
Re: 10 бит в SPI протоколе
Алекс Василич, о том что можно передавать разное количество байт это понятно, а вот передаю пакет.... и у меня не верные выходные напряжения на цапе ;( никак не въеду почему.
ForcePoint, да на чем написано мне пофиг, мне ведь понять сам принцип передачи на цап пакета, буду благодарен за програмку, я пишу и на аврке(си) и на асме и агоритмбилдере, так что разберусь с асемблером.
|
|
|
Сказали "Спасибо" Faworit
|
|
|
08.09.2012, 11:20
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: 10 бит в SPI протоколе
Значение Vrefin не должно превышать VDD-2 Вольта. Выходное напряжение не будет превышать VDD-0,4 Вольта, независимо от входного кода. Чтобы использовать полный диапазон входных кодов, нужно Vrefin вибирать не больше (VDD-0,4)/2
SPI должен работать в режиме 0. Из-за неправильного режима данные могут либо не приниматься вообще, либо ошибка выходного напряжения будет ровно в 2 раза (слово сдвигается на 1 бит вправо)
Последний раз редактировалось Алекс Василич; 08.09.2012 в 11:55.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Алекс Василич за это сообщение:
|
|
|
08.09.2012, 11:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,014
Сказал спасибо: 3,025
Сказали Спасибо 3,196 раз(а) в 2,168 сообщении(ях)
|
Re: 10 бит в SPI протоколе
Вот как-то так было. Правда комментариев почти что нет и для осмысления надо снова лезть в DS на ЦАП. Регистровая переменная voltage - это то, что требуется получить на выходе ЦАПа, двойной сдвиг и маскирование в подпрограмме DAC_out - это как раз приведение данных к формату для записи в регистр ЦАП. Зачем понадобилась задержка delay_cnt - уже не помню точно, вероятно там задавался произвольный (аж 16-и битный) "отступ" запуска АЦП от выдачи на ЦАП.
Код:
|
.....
; *** Константы ***
.....
.equ LED_OUT = PA1
.equ FS = PB3
.....
.....
; *** Регистры ***
.....
.def voltage_l = r26
.def voltage_h = r27
.....
.....
.cseg ; *** Сегмент кода ***
.....
.....
DAC_out: ; Передача на ЦАП
.if debug==0
push voltage_l
push voltage_h
lsl voltage_l
rol voltage_h
lsl voltage_l
rol voltage_h
andi voltage_h,0x0F
ori voltage_h,0x40
ldi temp2,(1‹‹USIOIF)
out USISR,temp2
out USIDR,voltage_h
cbi PORTA,LED_OUT
cbi PORTB,FS
do_dac_transfer1:
sbi USICR,USITC
sbis USISR,USIOIF
rjmp do_dac_transfer1
ldi temp2,(1‹‹USIOIF)
out USISR,temp2
out USIDR,voltage_l
do_dac_transfer2:
sbi USICR,USITC
sbis USISR,USIOIF
rjmp do_dac_transfer2
sbi PORTB,FS
sbi PORTA,LED_OUT
rcall delay_cnt
pop voltage_h
pop voltage_l
.endif ;debug==0
reti
.....
.....
; Собственно программа
.....
.....
ldi temp1,(1‹‹TXPIN)+(1‹‹FS)+(1‹‹PB1)+(1‹‹PB0);(1‹‹PB2)
out portb,temp1 ; 0b01001011
ldi temp1,(1‹‹TXPIN)+(1‹‹FS)+(1‹‹PB2)+(1‹‹PB1)
out ddrb,temp1 ; 0b01001110 Настройка порта Б
.....
.....
mov voltage_l,zero_voltage_l
mov voltage_h,zero_voltage_h
ldi temp1,(1‹‹USIWM0)|(1‹‹USICS1)|(1‹‹USICS0)
out usicr,temp1 ; Разрешение SPI/USI
rcall DAC_out ; Вывод в ЦАП начального значения
.....
.....
; Дальше - основные циклы работы программы. |
Последний раз редактировалось ForcePoint; 08.09.2012 в 11:36.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо ForcePoint за это сообщение:
|
|
|
09.09.2012, 15:30
|
|
Прописка
Регистрация: 28.12.2006
Сообщений: 277
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 18 сообщении(ях)
|
Re: 10 бит в SPI протоколе
Немного был занят, получил от Вас описание, думаю что этого будет достаточно. Всем спасибо, тема закрыта.
|
|
|
Сказали "Спасибо" Faworit
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:23.
|
|