Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
27.06.2012, 13:38
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Сообщение от artyomugr
|
if (CLK) flags=1;
if (MISO && CLK) { data |= mask; }
if (CLK==0 && flags) { l--; flags=0; mask››=1; }
|
Как думаете, сколько раз при таких условиях успеет сработать?
PHP код:
|
if (CLK && flags==0)
{
flags=1;
if (MISO && CLK) { data |= mask; l--; mask››=1; }
}
if (CLK==0 && flags) flags=0;
|
|
|
|
Сказали "Спасибо" omercury
|
|
|
27.06.2012, 14:13
|
#12
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
В общем когда отправляю значение отличное от 0 и 255 на индикаторе отображается плавающее значение... то есть например посылаю 150 . Вижу 93.. 120.. 170.. 172. Я все же до сих пор подозреваю что где то ошибка в коде..
такой кусок вообще не работает..
void SPI_()
{
if (SS==0)
{
mask = 0x01;
l=8;
data=0;
while (mask)
{
// Тактируем
if (CLK) flags=1;
if (MISO & CLK & mask) { data |= mask; }
if (CLK==0 && flags) { flags=0; mask‹‹=1; }
}
}
|
|
|
|
27.06.2012, 14:19
|
#13
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Сообщение от Easyrider83
|
При переходе через половину напряжения может быть шум
|
Спасибо, учту. Но я сейчас испытания провожу в протеусе.
Так как смысла пока нету смотреть в железе..
Сделал уже SPI master На второй тиньке 2313 и сливаю данные. Все равно не работает должным образом..
В протеусе две тини2313 одна слейв с индикатором вторая мастер
шлю данные, на индикаторе получаю плавающее значение...
|
|
|
|
27.06.2012, 14:33
|
#14
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
omercury Изза рекламы блин! Не увидел Вашего сообщения... Спасибо Вам большое! Сейчас попробую код!
|
|
|
|
27.06.2012, 15:24
|
#15
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Вот так работает код до 1кГц по симулятору
PHP код:
|
void SPI_() { if (SS==0) {
mask = 0x01; data = 0; while (mask) { if (CLK && flags==0) { if (MISO) { data |= mask;} flags=1; mask‹‹=1; } if (CLK==0) flags=0; } } }
|
Спасибо Вам за пример! Ваш код направил меня на путь истинный ![Улыбка](images/smilies/icon_smile.gif)
Но в нем тоже была небольшая ошибочка.
Буду пробовать в железе.
|
|
|
|
27.06.2012, 18:03
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,982
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: Программный SPI Slave для AVR
странно, но в attiny2313 есть USI - недоделок SPI/TWI и это лучше, чем полная софт-эмуляция. софт-эмуляция TWI по мотивам док Atmel экономит один вывод, а однопроводная двунаправленная сом-порта - два
|
|
|
|
27.06.2012, 20:26
|
#17
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Сообщение от artyomugr
|
Но в нем тоже была небольшая ошибочка.
|
PHP код:
|
if (MISO && CLK)
|
Эта? Не ошибка - избыточность. В принципе повторная проверка клока не нужна.
А вот это
PHP код:
|
if (CLK==0 && flags) flags=0;
|
не ошибка. Такая конструкция делает однократный сброс флага. Хотя в данной ситуации это неважно.
Кстати, тип flags булев? Если нет, может быть и ошибкой...
Последний раз редактировалось omercury; 27.06.2012 в 20:30.
|
|
|
|
28.06.2012, 13:55
|
#18
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Программный SPI Slave для AVR
Сообщение от omercury
|
Эта? Не ошибка - избыточность.
|
Ваша правда
Сообщение от omercury
|
if (MISO && CLK) { data |= mask; l--; mask››=1; }
|
Вот тут ошибочка. Маска сдвигалась при единице а при нуле - нет.
А я наверное 15минут смотрел в код и думал, почему не передаются нули.. ![Улыбка](images/smilies/icon_smile.gif) ))
Сообщение от omercury
|
А вот это
if (CLK==0 && flags) flags=0;
не ошибка. Такая конструкция делает однократный сброс флага.
|
Это тоже знаю. Очень полезная конструкция. Часто использую для корректной работы кнопок (без функции быстрого перебора при удержании кнопки)или для программных таймеров на низкую частоту.
Последний раз редактировалось artyomugr; 28.06.2012 в 13:58.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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, время: 23:09.
|
|