Как послать 10 бит по SPI? (CodeVision AVR)
Всем привет! Мучаюсь тут с цифровым потенциометром AD8402A10 в связке с ATMEGA8535. Потенциометр управляется по SPI следующим образом: посылается 10 битное слово в таком формате: номер потенциометра (2 бита) и значение положения "движка" (8 бит). Собственно вопрос: каким образом можно послать по SPI 10 бит?
R2AIV 73!
- Реклама
два раза по восемь...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Не прокатит - нужно именно одним пакетом:


- Вложения
-
- spi10bit.GIF
- (5.78 КБ) 381 скачивание
R2AIV 73!
мда не получится два раза по 8мь... наверно но геморройно отсылать первые 8мь а CS включать на последних двух а потом посылать вторые 8мь...
вообще легко делается на АРМах...
а может быть есть какая нить интерфейсная микруха... которая из параллельного преобразует в спи? надо искать...
да мануал я тоже открыл...
вообще легко делается на АРМах...
а может быть есть какая нить интерфейсная микруха... которая из параллельного преобразует в спи? надо искать...
да мануал я тоже открыл...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
идея появилсь...
завести ногу на инт0... sda или sck... наверно лучше сцк.. и посылать так значит первые 8мь 101010хх отсчитать 6штук... потом включить чип селект... а потом посылать вторые 8мь бит... xxxxxxxx
завести ногу на инт0... sda или sck... наверно лучше сцк.. и посылать так значит первые 8мь 101010хх отсчитать 6штук... потом включить чип селект... а потом посылать вторые 8мь бит... xxxxxxxx
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Реклама
Попробовал сделать полностью программно - протеусовский SPI Debugger все прекрасно видит и понимает, однако на деле AD8402 категирически отказывается находить общий язык с МК 
R2AIV 73!
А идея-то, в принципе хороша, спасибо! Надо будет проверить на досуге!Mozart писал(а):идея появилсь...
завести ногу на инт0... sda или sck... наверно лучше сцк.. и посылать так значит первые 8мь 101010хх отсчитать 6штук... потом включить чип селект... а потом посылать вторые 8мь бит... xxxxxxxx
R2AIV 73!
а вы правильно настроили спи?... там же целых 4ре режима есть... полярность данные передаются по фронту по срезу... что-то ещё есть...Попробовал сделать полностью программно - протеусовский SPI Debugger все прекрасно видит и понимает, однако на деле AD8402 категирически отказывается находить общий язык с МК
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Все один-в-один, согласно даташита и временных диаграмм, только все равно не помогаетMozart писал(а):а вы правильно настроили спи?... там же целых 4ре режима есть... полярность данные передаются по фронту по срезу... что-то ещё есть...
R2AIV 73!
Выложите плиз, проект PROTEUS .dsn и код для симуляции.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
а вы чип селект в 1 или в ноль ставите? посмотрите осциллом что творится на ногах...
вообще приз в студио т.е. код в студию...
вообще приз в студио т.е. код в студию...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Кидаю ) Прошу за код строго не судить, ибо сделано "на коленке", но суть, вроде ясна =) Код тупо шлет 10 нулей по SPI...
2Mozart: /CS, естественно в ноль ставлю =)
2Mozart: /CS, естественно в ноль ставлю =)
- Вложения
-
- SPITest.rar
- (46.65 КБ) 326 скачиваний
R2AIV 73!
у вас сцк не совсем правильно работает.... надо ещё строчку написать...
Код: Выделить всё
while (1)
{
PORTB.0=0; // /SS=0
for(i=0;i<10;i++)
{
PORTB.5=0; // MOSI=0
PORTB.7=0; // Тактирование (SCK)
delay_us(50);
PORTB.7=1;
delay_us(50);//вот эту строчку...
}
PORTB.0=1; // /SS=1
delay_ms(1000);
};если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Всмысле SCK в "0" cбросить опосля всего? Спасибо, не приметил что-то )
R2AIV 73!
у вас получались импульсы вот такие
__|-|____|-|___
а надо такие
_|-|_|-|_|-|_
потом... я не читал даташит... данные переключабтся по срезу или фронту? тоже посмотрите...
подключите виртуальный осцилл к сцк!!! и посмотрите...
__|-|____|-|___
а надо такие
_|-|_|-|_|-|_
потом... я не читал даташит... данные переключабтся по срезу или фронту? тоже посмотрите...
подключите виртуальный осцилл к сцк!!! и посмотрите...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
В PROTEUS линия данных не шевелится.
вот проект PROTEUS с осциллографом.
вот проект PROTEUS с осциллографом.
- Вложения
-
- oscil_spitest.rar
- (10.64 КБ) 249 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
2Тыч: дык она и не будет шевелиться - там-же одни нули передаются...
Сейчас переделал программу, с учетом рекомендаций Моцарта - вроде как все зашевелилось в железе =) По крайней мере, сопротивление меняется... Сейчас попробую более серьезно "поиграться" с микрухой...
Сейчас переделал программу, с учетом рекомендаций Моцарта - вроде как все зашевелилось в железе =) По крайней мере, сопротивление меняется... Сейчас попробую более серьезно "поиграться" с микрухой...
R2AIV 73!
она в начале проги в ноль сброшена...В PROTEUS линия данных не шевелится.
я думаю это специально???
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Как раз специально =) Сейчас ткнулся мультиметром - перед срабатыванием кода (дописал в начало задержку 10 сек. сопротивление между "полюсами" потенциометра и движком - по 5К, как и обещано в даташите. После срабатывания кода - 10К и 0, так что все идет по плану ) Спасибо всем ответившим - будем развивать код дальше )
R2AIV 73!
т.е. заработало?...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!


