Ser60 писал(а):Абсолютно все Вы сделали неправильно и совсем не по картинке. Замечания к коду:
1. Для активизации CS нужно выставить на этом пин лог. 0, а не 1 как в коде.
2. В чип надо передавать 2 байта согласно Fig 5.1. Первый байт - код опеации, второй байт данные.
3. Данные считываются чипом по нарастающему фронту clock-a. Т.е. сначала надо выставить бит на линии SI, потом поднять clock, потом его опустить и только потом менять данные.
4. Я не понял в чем идея IF-THEN-ELSE оператота в функции con()?
5. Не вижу посылки более чем одного бита в этой функции.
1. Я сначала включаю CS, PORTC=(PORTC|0x02); а затем его выключаю PORTC=(PORTC&0xfd);
2. так и есть, я несколько раз написал что у меня 8 бит с 128 по 1 десятичные кодируются так, т.е. я писал функцию которая будет облегчать передачу резистору значения, например если передать 17 в кон то это и будут первые 8 бит" 0001 0001 " которые будут переданы так как есть благодаря сравнению if - else в Serial input(т.е. это означает 5 бит - пригтовится к записи данных и 1 бит - включить потенциометр). я доделал функцию (сократив кучу сравнений в цикл) :
*****************************
void con (int easy)
{
int s,ss,sss,i;
sss=easy;
for (ss=7;ss>=0;ss--)
{
s=pow(2,ss);
if ((sss&s)==s)
{
PORTC = (PORTC|0x10);// включаю 1(если она там)
_delay_us(20);
PORTC = (PORTC|0x8); //включаю клок
_delay_us(100);
PORTC = (PORTC&0xf7);//выкл клок
_delay_us(20);
PORTC= (PORTC&0xef);// выкл единицы.
_delay_us(140);
}
else
{
PORTC = (PORTC&0xef); // аналогично только для нуля- "включаю" ноль
_delay_us(20);
PORTC = (PORTC|0x8); // включаю клок
_delay_us(100);
PORTC = (PORTC&0xf7);//выкл
_delay_us(20);
PORTC= (PORTC&0xef);// "выкл" нуля, знаю что глупо выглядит но не вижу тут грубейшей ошибки.
_delay_us(140);
} } }
********************************
3. и да, тут уже я читая ДШ понял ошибку с передачей по началу клока, сейчас должно быть правильно. (но не пашет, я уже даже зафигачил A на W как на картинке реостатового режима)
5. - посылка есть и посылка эта 16 бит, т.к. вызов фции кон идет 2 раза, один передаю 17, второй значение положения движка.
PS - Ужасный фейловый вопрос - в какой послед ности отправлять биты? от 1 к 8? или от 8 к 1? потому что сейчас я отправляю от 8 к 1. (на рисуночке из раздела 5 так и написано, два не исп бита потом С1 потом С0...)
и еще может я его подключаю не верно в плане измерения сопротивления - подключаю омметр к А замкнутому на W и воторой щуп на B.