Страница 1 из 3
Как послать 10 бит по SPI? (CodeVision AVR)
Добавлено: Вс ноя 18, 2007 16:23:05
KT315B
Всем привет! Мучаюсь тут с цифровым потенциометром AD8402A10 в связке с ATMEGA8535. Потенциометр управляется по SPI следующим образом: посылается 10 битное слово в таком формате: номер потенциометра (2 бита) и значение положения "движка" (8 бит). Собственно вопрос: каким образом можно послать по SPI 10 бит?
Добавлено: Вс ноя 18, 2007 18:05:28
Mozart
два раза по восемь...
Добавлено: Вс ноя 18, 2007 18:13:08
KT315B
Не прокатит - нужно именно одним пакетом:

Добавлено: Вс ноя 18, 2007 18:15:43
Mozart
мда не получится два раза по 8мь... наверно но геморройно отсылать первые 8мь а CS включать на последних двух а потом посылать вторые 8мь...
вообще легко делается на АРМах...
а может быть есть какая нить интерфейсная микруха... которая из параллельного преобразует в спи? надо искать...
да мануал я тоже открыл...
Добавлено: Вс ноя 18, 2007 18:20:40
Mozart
идея появилсь...
завести ногу на инт0... sda или sck... наверно лучше сцк.. и посылать так значит первые 8мь 101010хх отсчитать 6штук... потом включить чип селект... а потом посылать вторые 8мь бит... xxxxxxxx
Добавлено: Вс ноя 18, 2007 18:20:58
KT315B
Попробовал сделать полностью программно - протеусовский SPI Debugger все прекрасно видит и понимает, однако на деле AD8402 категирически отказывается находить общий язык с МК

Добавлено: Вс ноя 18, 2007 18:21:49
KT315B
Mozart писал(а):идея появилсь...
завести ногу на инт0... sda или sck... наверно лучше сцк.. и посылать так значит первые 8мь 101010хх отсчитать 6штук... потом включить чип селект... а потом посылать вторые 8мь бит... xxxxxxxx
А идея-то, в принципе хороша, спасибо! Надо будет проверить на досуге!
Добавлено: Вс ноя 18, 2007 18:24:51
Mozart
Попробовал сделать полностью программно - протеусовский SPI Debugger все прекрасно видит и понимает, однако на деле AD8402 категирически отказывается находить общий язык с МК
а вы правильно настроили спи?... там же целых 4ре режима есть... полярность данные передаются по фронту по срезу... что-то ещё есть...
Добавлено: Вс ноя 18, 2007 18:43:43
KT315B
Mozart писал(а):а вы правильно настроили спи?... там же целых 4ре режима есть... полярность данные передаются по фронту по срезу... что-то ещё есть...
Все один-в-один, согласно даташита и временных диаграмм, только все равно не помогает

Завтра еще на другой микросхеме попробую, можт или экземпляр кривой попался, или я что-то с ней напортачил и запорол

Добавлено: Вс ноя 18, 2007 18:45:56
tych
Выложите плиз, проект PROTEUS .dsn и код для симуляции.
Добавлено: Вс ноя 18, 2007 18:46:19
Mozart
а вы чип селект в 1 или в ноль ставите? посмотрите осциллом что творится на ногах...
вообще приз в студио т.е. код в студию...
Добавлено: Вс ноя 18, 2007 18:54:40
KT315B
Кидаю ) Прошу за код строго не судить, ибо сделано "на коленке", но суть, вроде ясна =) Код тупо шлет 10 нулей по SPI...
2Mozart: /CS, естественно в ноль ставлю =)
Добавлено: Вс ноя 18, 2007 19:01:54
Mozart
у вас сцк не совсем правильно работает.... надо ещё строчку написать...
Код: Выделить всё
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);
};
Добавлено: Вс ноя 18, 2007 19:06:20
KT315B
Всмысле SCK в "0" cбросить опосля всего? Спасибо, не приметил что-то )
Добавлено: Вс ноя 18, 2007 19:10:14
Mozart
у вас получались импульсы вот такие
__|-|____|-|___
а надо такие
_|-|_|-|_|-|_
потом... я не читал даташит... данные переключабтся по срезу или фронту? тоже посмотрите...
подключите виртуальный осцилл к сцк!!! и посмотрите...
Добавлено: Вс ноя 18, 2007 19:11:55
tych
В PROTEUS линия данных не шевелится.
вот проект PROTEUS с осциллографом.
Добавлено: Вс ноя 18, 2007 19:16:41
KT315B
2Тыч: дык она и не будет шевелиться - там-же одни нули передаются...
Сейчас переделал программу, с учетом рекомендаций Моцарта - вроде как все зашевелилось в железе =) По крайней мере, сопротивление меняется... Сейчас попробую более серьезно "поиграться" с микрухой...
Добавлено: Вс ноя 18, 2007 19:17:02
Mozart
В PROTEUS линия данных не шевелится.
она в начале проги в ноль сброшена...
я думаю это специально???
Добавлено: Вс ноя 18, 2007 19:23:49
KT315B
Как раз специально =) Сейчас ткнулся мультиметром - перед срабатыванием кода (дописал в начало задержку 10 сек. сопротивление между "полюсами" потенциометра и движком - по 5К, как и обещано в даташите. После срабатывания кода - 10К и 0, так что все идет по плану ) Спасибо всем ответившим - будем развивать код дальше )
Добавлено: Вс ноя 18, 2007 19:28:11
Mozart
т.е. заработало?...