МикроКонтроллер AVR начинающим - общие вопросы

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение rat12 » 08 июн 2010, 01:25

Michael_K писал(а):когда вы ставите SPI enable,проц его конфигуряет как вход независимо от настроек порта.

Если я на ногу не включаю подтяжку (0 логический на ноге), то во входящем регисторе 0х00, если включаю (1 логическая на ноге) - то 0хFF. Оно и понятно, если память никак на уровень не влияет (в моем случае, дохлая может?), то микроконтроллер интерпретирует состояние на входе так. Так что, как показывает в моем случае практика, зависит от настроек :(

Michael_K писал(а):Обратите внимание: SS на МАСТЕРЕ должен быть или настроен на ВЫХОД, или подтянут к плюсу
(иначе он в режим слейва самопроизвольно перейдет)

Спасибо за совет. SS у меня выходом сделан. И еще на нем 1 поднята. Без результатов :(
Есть один ньюанс. Я микросхемой памяти управляю не ногой SS, а другим пином, конкретно PB5 -так по разводке удобнее было. Соответственно в программе я её "дергаю" для включения-выключения памяти. Может в этом причина неработоспособности? Поэтому я на всякий случай и SS дергаю, но она, как уже сказал, в воздухе висит...

Еще вопрос. Правильно ли я считываю STATUS REGISTER? Написал следующую процедуру в CVAVR:
Код: Выделить всё
unsigned char status_load (void)

   unsigned char status_register_from_spdr;
   unsigned char temp = 0x80;
   
   PORTB &= ~DF_CHIP_SELECT;               // enable DataFlash (DF_CHIP_SELECT определено выше по коду)
   
   SPDR = STATUS_REGISTER;                 // STATUS_REGISTER - бит команды, определен выше.
   while (!(SPSR & temp));
     
   SPDR = 0xFF;                            //записываем произвольный байт, как сказано в посте ниже !
   while (!(SPSR & temp));

   status_register_from_spdr = SPDR;
   
   PORTB |= DF_CHIP_SELECT;                // disable DataFlash and start transaction     
   
   return (status_register_from_spdr & 0x80);
}


Соответственно применяю её так:
Код: Выделить всё
while(!(status_load()));              // в цикле, пока память занята
SPDR = ... выполняю загрузку в SPDR новой команды
Последний раз редактировалось rat12 08 июн 2010, 12:19, всего редактировалось 2 раз(а).
rat12
 
Сообщения: 14
Зарегистрирован: 24 фев 2010, 17:33
Откуда: Симферополь

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Michael_K » 08 июн 2010, 01:50

Эммм... ничего не понял.
Эта память начнет активно управлять ногой SO только после того, когда вы затолкаете ей правильную команду на ногу SI. А до этого момента она в воздухе висит, но и процу результат неважен.

Общая процедура примерно такая:

Опускаете ЦС

Посылаете команду в СПДР
Ждете когда завершится посылка
Считываете что там в ответ пришло и выкидываете нафиг (это висячая в воздухе нога она не интересна)

Посылаете что попало в СПДР (просто чтобы СЦК пощелкал, я обычно отправляю FF)
Ждете когда завершится посылка
Считываете ответ на команду (это пришел реальный ответ)

Поднимаете ногу ЦС

Ну только и команды и ответы там кажется могут быть многобайтные...
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение rat12 » 08 июн 2010, 13:08

Спасибо большое Michael_K и avr123 !
После Ваших замечаний и комментариев мне наконец удалось собрать работоспособный код!
Кусочек его привел в посте выше, для случая, если нет физической ноги RDY, можно применять эту конструкцию, считывать значения бита RDY из регистра статуса микросхемы памяти.
rat12
 
Сообщения: 14
Зарегистрирован: 24 фев 2010, 17:33
Откуда: Симферополь

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение avr123.nm.ru » 08 июн 2010, 21:48

Хорошо что добили задачу.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение osc » 14 июн 2010, 23:49

Приведите пожалуйста пример кода для загрузки числа в последовательный сдвиговый регистр.
Я написал такую функцию:
Код: Выделить всё
void send(unsigned int data,unsigned int length)

int i,j;
for(i=length;i!=0;i--)
   { 
   wait
   for(j=i;j!=0;j--)
   {
   CLK=1;
   wait
   if((data & (1<<i))!=0)
   {
   DATA=1; 
   }     
   else
   {
   DATA=0;
   }     
   wait
   CLK=0;   
   wait
   }
  } }
void main(void)
{
  send(0b10001110110110,14);
  while(1);
}

Но кажись работает она не правильно, вторым циклом продвигаем бит по сдвиговому регистру, первым циклом берем следующий бит.
Аватара пользователя
osc
 
Сообщения: 333
Зарегистрирован: 07 сен 2009, 20:06
прог. языки: c, c#
ФИО: Евгений

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение blindman » 15 июн 2010, 02:51

А для чего два цикла?

Код: Выделить всё
void send(unsigned int data, unsigned int length)
{
    unsigned int mask = 1 << length;
    while (length--) {
        CLK=1;
        wait;
        DATA = (data & mask) ? 1 : 0;
        CLK=0;
        wait;
        data <<= 1;
    }
}
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение avr123.nm.ru » 15 июн 2010, 10:00

Начинающим возможно не понятна будет строка а возможно не верно понята
Код: Выделить всё
while (length--) {

Проще наверно так написать
Код: Выделить всё
while (length) {
length--;


Это вообще в ступор введет
Код: Выделить всё
DATA = (data & mask) ? 1 : 0;


и int для length крутовато. С запасом.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение greyder » 15 июн 2010, 13:56

Добрый день.
Я хочу из одного SPI Mega8 сделать два независимых интерфейса. И не знаю какой микросхемкой это можно осуществить. Мультиплексор вроде не подходит т.к. интерфейс двунаправленный, Мультиплексор и демультиплексор как-то криво выглядит. Свич (коммутатор), еще не разобрался но тоже ничего хорошего не получается. Подскажите где можно такое решение подсмотреть?
greyder
 
Сообщения: 23
Зарегистрирован: 31 мар 2010, 16:15

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение blindman » 15 июн 2010, 14:05

Зачем?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение avr123.nm.ru » 15 июн 2010, 14:35

greyder писал(а):Я хочу из одного SPI Mega8 сделать два независимых интерфейса.

Это невозможно пожалуй. Можно несколько устройств подключить параллельно но отдельными ножками МК выбирать какое устройство активно.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение greyder » 15 июн 2010, 17:10

Ответ на вопрос blindman'a я пытался изобразить на 106 страницы данной ветки. Мое видение данной задачи в прикрепленной картинке.
При нормальной работе сигналом MA/SL выбрана секция Slave для работы с детьми, устройства адресуются SS1, SS2, SS3 ... . При появлении сигнала на MasterSS прерываем работу с детьми, меняем сигнал MA/SL т.е. выбираем работу с родителем и работаем дальше с ним.
Про невозможность: скорее возможно но с ограничениями.
Вопрос как это реализовать?
Вложения
MA_SL.JPG
greyder
 
Сообщения: 23
Зарегистрирован: 31 мар 2010, 16:15

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение blindman » 15 июн 2010, 18:54

Вы не должны этого хотеть. Больше мне сказать нечего
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение greyder » 16 июн 2010, 15:39

Со-дер-жательный ответ. Надо понимать что AVR и топология дерево не совместимы?
greyder
 
Сообщения: 23
Зарегистрирован: 31 мар 2010, 16:15

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение boez » 16 июн 2010, 18:48

А скорости большие нужны? Я бы аппаратный SPI подключил в слейв режиме к родителю, а детей на второй (программный) SPI с общими MOSI/MISO/SCK и выбором детенка отдельными ногами SS. А мультиплексировать слейв-SPI еще с кем-то плохо, ведь родитель может начать обмен когда ему вздумается...
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение avr123.nm.ru » 16 июн 2010, 19:11

Это у горе-програмеров так.

А у нормальных эмбедеров, мастера живут по графику по алгоритму - так же как и вся другая бодяга.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7