Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
27.06.2012, 09:29
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Программный SPI Slave для AVR
Доброе утро уважаемые форумчане!
Вот никак не могу понять где туплю... уже кучу вариантов перепробовал а код не работает должным образом...
Код:
|
void SPI_()
{
if (SS==0)
{
// последний бит отвечает за чтение/запись
mask = 0x80;
l=8;
data=0;
while (mask)
{
// Тактируем
if (CLK) flags=1;
if (MISO && CLK) { data |= mask; }
if (CLK==0 && flags) { flags=0; mask››=1; }
#asm("nop")
}
}
} |
потом пишу такой кусок:
Код:
|
temp = data;
if (data‹10)
{
led_buff[3]=led_table[temp]; //Заполняем буфер разрядов
led_buff[2]=led_table[10];
led_buff[1]=led_table[10];
led_buff[0]=led_table[10];
}
if (data›9 && data‹100)
{
led_buff[3]=led_table[temp%10];
temp=temp/10;
led_buff[2]=led_table[temp%10]; //Заполняем буфер разрядов
led_buff[1]=led_table[10];
led_buff[0]=led_table[10];
}
if (data›99 && data‹1000)
{
led_buff[3]=led_table[temp%10];
temp=temp/10;
led_buff[2]=led_table[temp%10]; //Заполняем буфер разрядов
temp=temp/10;
led_buff[1]=led_table[temp%10];
led_buff[0]=led_table[10];
}
if (data›999 && data‹10000)
{
led_buff[3]=led_table[temp%10];
temp=temp/10;
led_buff[2]=led_table[temp%10]; //Заполняем буфер разрядов
temp=temp/10;
led_buff[1]=led_table[temp%10];
temp=temp/10;
led_buff[0]=led_table[temp%10];
} |
и вижу все происходящее на индикаторе.
Но! значение 0xFF и 0x00 принимается нормально и выводится на индикатор. А все остальное отображается не правильно...
Кто решал проблему программного SPI Slave, помогите пожалуйста!
Перепробовал уже кучу комбинаций, и все безрезультатно....
С ув. Артем
|
|
|
Сказали "Спасибо" artyomugr
|
|
|
27.06.2012, 10:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Небольшой совет,не по теме. Не пренебрегайте ";" для завершения оператора,это стандарт ANSI (можно залететь, такая-же ситуёвина в Паскале .. лучше поставить лишний раз,чем пропустить)
PS я к чему... последний if и asm могут за else приняты (не отделены) (не проверял,как компилятор к этому отнесётся)
Последний раз редактировалось OlegNZH; 27.06.2012 в 10:22.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо OlegNZH за это сообщение:
|
|
|
27.06.2012, 10:37
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Это я втулил уже от без выходного положения.. я его убирал. Просто код обязан работать, но не работает почему то... кстати компилятор "кодвижен". Может этот "код" не работает должным образом? )
|
|
|
Сказали "Спасибо" artyomugr
|
|
|
27.06.2012, 10:41
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Сдвиги, операции с битами - это довольно дофига инструкций. SPI в этом случае должен быть достаточно медленным. Не более сотен килогерц.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
27.06.2012, 10:42
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Пробовал и так тоже:
[HTML]void SPI_()
{
if (SS==0)
{
// последний бит отвечает за чтение/запись
mask = 0x80;
l=8;
data=0;
while (l)
{
// Тактируем
if (CLK) flags=1;
if (MISO && CLK) { data |= mask; }
if (CLK==0 && flags) { l--; flags=0; mask››=1; }
}
}
}[/HTML]
и вот даже так:
[HTML]void SPI_()
{
if (SS==0)
{
// последний бит отвечает за чтение/запись
mask = 0x80;
l=8;
while (l)
{
// Тактируем
if (CLK) flags=1;
if (MISO && CLK) { data |= mask; }
if (MISO==0 && CLK) { data &=~ mask; }
if (CLK==0 && flags) { l--; flags=0; mask››=1; }
}
}
}[/HTML]
|
|
|
Сказали "Спасибо" artyomugr
|
|
|
27.06.2012, 10:45
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
› достаточно медленным. Не более сотен килогерц.
Я это понимаю
Тестирую на маленькой частоте. Частота выходит ~1Гц
|
|
|
Сказали "Спасибо" artyomugr
|
|
|
27.06.2012, 11:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,053
Сказал спасибо: 3,042
Сказали Спасибо 3,212 раз(а) в 2,182 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Сообщение от artyomugr
|
Но! значение 0xFF и 0x00 принимается нормально и выводится на индикатор. А все остальное отображается не правильно...
|
Неправильно - это как? Может просто не так считываете полярность SCK?
З.Ы. Ну и чего не аппаратный? Выделили буфер, настроили прерывание и наслаждайтесь.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
27.06.2012, 11:26
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Последний код вообще не работает, хотя должен.
А самый первый код вбиваю двоичный 00110011 принимаю 11101110
Вбиваю 11111111 принимаю 11111111
Вбиваю 00000000 принимаю 00000000
вбиваю 10101010 принимаю 10000000 и так далее
последний код :
Вбиваю 11111111 принимаю 00000001
Вбиваю 00000000 принимаю 00000001 или 00000000
вбиваю 10101010 принимаю 00000001
Аппаратный SPI нет возможности использовать так как есть определенные пины свободные а на них нет SPI...
Сделал заводские маленькие платки на тинни2313 с 4разрядным индикатором
для разных целей. типа тахометр, термометр и так далее. А теперь хочу сделать индикатор с интерфейсом SPI. И не получается..
|
|
|
Сказали "Спасибо" artyomugr
|
|
|
27.06.2012, 12:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Сообщение от artyomugr
|
теперь хочу сделать индикатор с интерфейсом SPI. И не получается..
|
тогда сделай и2с
|
|
|
|
27.06.2012, 13:16
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Сообщение от artyomugr
|
Тестирую на маленькой частоте. Частота выходит ~1Гц
|
При переходе через половину напряжения может быть шум, который контроллер считает тактовыми импульсами. Попробуйте емкость по входу поставить.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Помогите разобраться с SPI AVR
|
Basan |
Микроконтроллеры, АЦП, память и т.д |
30 |
02.09.2010 17:31 |
AVR (168) аппаратный SPI
|
vitecd |
Микроконтроллеры, АЦП, память и т.д |
8 |
15.07.2010 02:18 |
P89lPC935 SPI Slave
|
kos_ua |
Микроконтроллеры, АЦП, память и т.д |
1 |
01.02.2010 12:49 |
Опрос АЦП через программный SPI AVR
|
Iamuser |
Микроконтроллеры, АЦП, память и т.д |
8 |
23.03.2007 18:33 |
Передача по PSP (Parallel Slave Port) для PIC
|
moyaproba |
Микроконтроллеры, АЦП, память и т.д |
6 |
29.11.2006 21:54 |
Часовой пояс GMT +4, время: 07:11.
|
|