Разное и полезное > Микроконтроллеры и их программирование
SPI врукопашную: заблудился в трёх соснах.
lgedmitry:
пытаюсь подружить атмегу8а с MAX6591. Что-то очень плохо получается. Аппаратный SPI не задействовать никак.
Написал две такие процедурки: первая посылает старший байт и не завершает сеанс, так как посылка должна быть 16 битной.
Вторая засылает второй байт и закрывает сеанс.
--- Код: ---void spiaddr(void) //писалка адреса в максимку
{
CLK=0;
CS=0;
i=0;
while (i<8)
{if (0x80&&buffer==0x80)
DIN=1;
else DIN=0;
i++;
CLK=1;
buffer=buffer<<1;
CLK=0;
}
}
void spidat(void) //писалка адреса в максимку
{
//CLK=0;
i=0;
while (i<8)
{CLK=0;
if (0x80&&buffer==0x80)
DIN=1;
else DIN=0;
i++;
CLK=1;
buffer=buffer<<1;
}
CS=1;
}
--- Конец кода ---
дальше я их вызываю по очереди
--- Код: ---buffer=0x01; // все фыфры декодировать
spiaddr();
buffer=0xFF;
spidat();
buffer=0x02; // 15мА
spiaddr();
buffer=0x05;
spidat();
buffer=0x03; // 8 фыфр
spiaddr();
buffer=0x07;
spidat();
buffer=0x04; // настройки
spiaddr();
buffer=0x05;
spidat();
--- Конец кода ---
получилось красиво, но почему-то неработает. Иль может оно где-то не здесь неработает? И искать надо в другом месте ???
и добавил...
забыл уточнить, CLK, CS и DIN - это ножки порта задифайненные ;-[
и добавил...
buffer - это unsigned char
AVE:
(0x80&&buffer==0x80)
Здесь наверное побитовое умножение маски на buffer надо
blindman:
Во-первых, && - это логическое И, а нужно побитовое - оператор &. Во-вторых, приоритет операторов сравнения выше, чем у логических и битовых :
0x80 & buffer == 0x80 - это 0x80 & (buffer==0x80)
а надо (0x80 & buffer)==0x80
Вообще, правильно будет записать условие так :
if ((0x80 & buffer) != 0)
или, что по сути то же самое:
if (0x80 & buffer)
А так, как было записано, условие будет выполняться только тогда, когда buffer == 0x80
lgedmitry:
AVE, blindman, Пасиб, мужики!
Ещё пару косяков в других местах подобрал - фыфры засветились :yah: :yah: :yah: :yah: :yah:
blindman:
Сергей, ну вот видишь. Не такой уж страшный это самый си
Навигация
Перейти к полной версии