Страница 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
т.е. заработало?...