Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.06.2012, 09:29  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Программный 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 вне форума  
Сказали "Спасибо" artyomugr
warel (29.06.2019)
Непрочитано 27.06.2012, 10:10  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Программный SPI Slave для AVR

Небольшой совет,не по теме. Не пренебрегайте ";" для завершения оператора,это стандарт ANSI (можно залететь, такая-же ситуёвина в Паскале .. лучше поставить лишний раз,чем пропустить)
PS я к чему... последний if и asm могут за else приняты (не отделены) (не проверял,как компилятор к этому отнесётся)

Последний раз редактировалось OlegNZH; 27.06.2012 в 10:22.
OlegNZH вне форума  
Эти 2 пользователя(ей) сказали Спасибо OlegNZH за это сообщение:
artyomugr (27.06.2012), warel (29.06.2019)
Непрочитано 27.06.2012, 10:37  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Программный SPI Slave для AVR

Это я втулил уже от без выходного положения.. я его убирал. Просто код обязан работать, но не работает почему то... кстати компилятор "кодвижен". Может этот "код" не работает должным образом? )
artyomugr вне форума  
Сказали "Спасибо" artyomugr
warel (29.06.2019)
Непрочитано 27.06.2012, 10:41  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Программный SPI Slave для AVR

Сдвиги, операции с битами - это довольно дофига инструкций. SPI в этом случае должен быть достаточно медленным. Не более сотен килогерц.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
warel (29.06.2019)
Непрочитано 27.06.2012, 10:42  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" artyomugr
warel (29.06.2019)
Непрочитано 27.06.2012, 10:45  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Программный SPI Slave для AVR

› достаточно медленным. Не более сотен килогерц.

Я это понимаю

Тестирую на маленькой частоте. Частота выходит ~1Гц
artyomugr вне форума  
Сказали "Спасибо" artyomugr
warel (29.06.2019)
Непрочитано 27.06.2012, 11:08  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,784
Сказал спасибо: 2,911
Сказали Спасибо 3,119 раз(а) в 2,110 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Программный SPI Slave для AVR

Сообщение от artyomugr Посмотреть сообщение
Но! значение 0xFF и 0x00 принимается нормально и выводится на индикатор. А все остальное отображается не правильно...
Неправильно - это как? Может просто не так считываете полярность SCK?

З.Ы. Ну и чего не аппаратный? Выделили буфер, настроили прерывание и наслаждайтесь.
ForcePoint на форуме  
Сказали "Спасибо" ForcePoint
warel (29.06.2019)
Непрочитано 27.06.2012, 11:26  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" artyomugr
warel (29.06.2019)
Непрочитано 27.06.2012, 12:40  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Программный SPI Slave для AVR

Сообщение от artyomugr Посмотреть сообщение
теперь хочу сделать индикатор с интерфейсом SPI. И не получается..
тогда сделай и2с
jump вне форума  
Сказали "Спасибо" jump
warel (29.06.2019)
Непрочитано 27.06.2012, 13:16  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Программный SPI Slave для AVR

Сообщение от artyomugr Посмотреть сообщение
Тестирую на маленькой частоте. Частота выходит ~1Гц
При переходе через половину напряжения может быть шум, который контроллер считает тактовыми импульсами. Попробуйте емкость по входу поставить.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
warel (29.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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, время: 01:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot