roboforum.ru

Технический форум по робототехнике.

 

нужна помощь в написании программы для МК.

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

нужна помощь в написании программы для МК.

Сообщение Myp » 20 окт 2006, 23:51

введение:
подробно идея описана в топике: http://www.roboforum.ru/viewtopic.htm?t=1760
так как никогда раньше не сталкивался с чтением и записью данных из мк в устройство возникли трудности.

в аттаче описание процесса приёма-передачи данных
там совсем немного и видимо оч просто
так что прочитайте плиз чтобы ответить мне на вопросы.


далее привожу все вопросы которые пришли мне в голову.
пожалуйста ответьте правильны ли мои размышления и если нет то как на самом деле?


1:    чтобы послать байт в какой то порт необходимо последовательно выставить на ножке МК "1" или "0" восемь раз??? тоесть отправить 8 бит???
2.1: так как используеться sck необходимо синхронизировать ножку мк("1" или "0") с тактовым сигналом. тоесть необходимо на 2х ножках МК синхронно менять "1" и "0"  
2.2: тактовый сигнал это чередование "1" и "0" с определённой частотой???
3.1: исходя из даташита чтобы записать данные в сенсор нужно просто отправить 2 байта(тоесть 16 бит, тоесть 16 раз изменить состояние ножки МК на "1" или "0"), причём первый из них должен содержать "1" в MSB (а что такое msb?)
3.2: а чтобы прочитать данные надо отправить 2 байта(первый из которых содержит "0" в MSB), перевести ножку МК в режим входа и синхронно с тактовым сигналом прочитать 16 бит?
3.3: hi-z это по нашему - высокоимпедансное состояние? тоесть потягивающий резистор включен?
4:   фраза "SDIO is changed on falling edges of SCK and read on every rising edge of SCK" следует понимать как: при изменении тактирующего сигнала с "1" на "0" происходит запись бита а при изменении с "0" на "1" происходит чтение бита ???
Вложения
описание протокола связи adns.txt
выдержка из даташита на английском
(2.02 КиБ) Скачиваний: 99
описание протокола связи adns RUS.txt
мой перевод выдержки из даташита
(1.67 КиБ) Скачиваний: 103
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 15908
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение avr123.nm.ru » 21 окт 2006, 02:42

msb - "мост сигнификант бит" - самый значащий бит в числе - т.е. имеющий наибольший порядковый номер и соответственно "вес".

Подробней на  - avr123.nm.ru/03.htm

и еще:   http://www.CforAVR.narod.ru
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: нужна помощь в написании программы для МК.

Сообщение avr123.nm.ru » 21 окт 2006, 02:54

Myp писал(а):hi-z это по нашему - высокоимпедансное состояние?

тоесть потягивающий резистор включен?


да.

нет.

таблица состояния ножки МК
http://avr123.nm.ru/02.htm

======

запишите алгоритм по-русски - псевдокодом - как в задаче 1
http://avr123.nm.ru/z1.htm

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

Re: нужна помощь в написании программы для МК.

Сообщение avr123.nm.ru » 21 окт 2006, 02:59

Myp писал(а):фраза "SDIO is changed on falling edges of SCK and read on every rising edge of SCK" следует понимать как: при изменении тактирующего сигнала с "1" на "0" происходит запись бита а при изменении с "0" на "1" происходит чтение бита ???


нет.

при спаде такта SCK  1-0  меняются данные на линии SDIO, а

их "защелкивание" == чтение == запись  

проискодит  по фронту на SCK  0-1.

=====

т.е.  сделали на SCK  1-0, выставьте следующий бит на SDIO, затем пауза по временным параметрам в ДШ и далее на SCK  0-1, потом опять пауза по ДШ.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Myp » 21 окт 2006, 12:34

ага
значит все остальные мои мысли похожи на правду

псевдокоду я уже несколько листов исписал :lol:


ой скока там всего интересного в курсе понаписалось :D
я его летом читал было меньше=)


Огромное спасибо=)
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 15908
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение avr123.nm.ru » 21 окт 2006, 16:21

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

Сообщение Myp » 23 окт 2006, 21:59

немного запутался :cry:

как лучше организовать передачу бит?
поясню. надо записать в сенсор например вот такое число 0b10000000

мои предположения:
соответственно выставляем на ножке МК(которая у меня будет SDIO) один раз единицу и ноль 7 раз  синхронно с тактированием процесса передачи ножкой SCK
тоесть примерно такая конструкция
где
PORTB.0 //SCK
PORTB.1 //SDIO

Код: Выделить всёРазвернуть
{
   PORTB.0=0  
   PORTB.1=1  
   ждём 60      //взял из даташита
   PORTB.0=1
   ждём 250 нс //взял из даташита

   portB.0=0
   portB.1=0
   ждём 60 нс
   PORTB.0=1
   ждём 250 нс

   portB.0=0
   portB.1=0
   ждём 60 нс
   PORTB.0=1
   ждём 250 нс

   portB.0=0
   portB.1=0
   ждём 60 нс
   PORTB.0=1
   ждём 250 нс

   portB.0=0
   portB.1=0
   ждём 60 нс
   PORTB.0=1
   ждём 250 нс

   portB.0=0
   portB.1=0
   ждём 60 нс
   PORTB.0=1
   ждём 250 нс

   portB.0=0
   portB.1=0
   ждём 60 нс
   PORTB.0=1
   ждём 250 нс

   portB.0=0
   portB.1=0
   ждём 60 нс
   PORTB.0=1
   ждём 250 нс
};

мне кажеться чёто это всё както странно  :shock: выглядит и на самом деле не так пишуться байты.

как может выглядеть процедура записи байта взятого из переменной например i в первый пин порта например B :?:

надеюсь я понятно объяснил то что пытаюсь сделать :D  :?:

ЗЫ
чёто немогу посчитать, как согласуеться тактовая частота процессора с частотой передачи данных
сколько тактов будет отсылаться биты и скока тактов остаёться на всё остальное? не получиться ли что передача займёт всё процессорное время?


на рисунке график из даташита, я так понимаю осциллограмма с 2х ножек МК должа быть похожа на это??
Вложения
вид импульсов.JPG
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 15908
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение North » 24 окт 2006, 09:13

Ты б в прерываниях разобрался.
Аватара пользователя
North
 
Сообщения: 197
Зарегистрирован: 27 июл 2005, 14:12
Откуда: Дмитров, Москва
прог. языки: С, asm

Сообщение avr123.nm.ru » 24 окт 2006, 11:10

между ними:
portB.0=0
portB.1=0
тоже наверно пауза нужна.

паузы в ДШ надо читать не 60  а например от 60 до 540  - тогда будет ясно как их делать.

можно вставлять  асм инструкции NOP  - пауза 1 такт кварца.

==========

что даст твоя программа ты можещшь увидеть в  VMLAB в окне SCOPE

=========

процедуру оформляют в виде цикла - например while  (avr123.nm.ru/05.htm)

и передаваемое число кажды раз сдвигают на бит.

или накладывают маску чтоб "убить" не предназначеные к передаче в данный момент биты числа.

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

Сообщение avr123.nm.ru » 24 окт 2006, 11:13

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

Сообщение avr123.nm.ru » 24 окт 2006, 11:17

Myp писал(а):чёто немогу посчитать, как согласуеться тактовая частота процессора с частотой передачи данных
сколько тактов будет отсылаться биты и скока тактов остаёться на всё остальное?


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

Сообщение avr123.nm.ru » 24 окт 2006, 11:27

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

Сообщение North » 24 окт 2006, 14:10

Без прерываний это выглядит как-то так:
Код: Выделить всёРазвернуть
void Delay(void);
{
 unsigned char i=0x10; //От балды, лишь бы не меньше 250 нс.
 while (i--);
}

void WriteOperation(unsigned char Address, unsigned char Data)
{
 unsigned char Counter=8;
 Address|=0x80;               //Set the MSB
 //по условию датащита SCLK должен быть на данный момент в единице (неактивное состояние)
 while (Counter--)
 {
   PortB.0=0;                  //Falling edge of clock line
   if (Address&0x80)          //проверка старшего бита
     PortB.1=1;
   else
     PortB.1=0;
   Delay();
   Address<<=1;               //выдвигаем старший бит
   PortB.0=1;                 //Rising edge of clock line
   Delay();
 }
 //Адрес ушёл, теперь надо отправить данные
 Counter=8;                   //перезаряжаем счётчик битов
 while (Counter--)
 {
   PortB.0=0;
   if (Data&0x80)
     PortB.1=1;
   else
     PortB.1=0;
   Delay();
   Data<<=1;
   PortB.0=1;
   Delay();
 }
}

Приём выполняется по аналогии, только с учётом задержки между адресом и данными (ещё один Delay() между while-ами)
Написал прямо сейчас и проверить мне не на чем, к тому же по даташиту на ADNS-2610 (а не 2620), так что сразу может и не заработает. Но приблизительно также я подключал экран от нокии 3310 (там почти такой же интерфейс). Работало.
Аватара пользователя
North
 
Сообщения: 197
Зарегистрирован: 27 июл 2005, 14:12
Откуда: Дмитров, Москва
прог. языки: С, asm

Сообщение avr123.nm.ru » 24 окт 2006, 14:40

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

Сообщение North » 24 окт 2006, 15:55

функция паузы наверно может быть пустой для большинства частот кварца, ведь один вызов функции скорей всего займет эти 250 НАНО сек.

Несомненно это так. Поэтому я и написал длительность паузы от балды, зная, что полюбому при таком раскладе длительность половины периода будет никак не меньше 250 нс. Просто в даташите эти 250 нс указаны как минимальные значения, увеличивать же их ни кто не запрещает. В качестве аналогии можно привести частоту тех же AVR - в даташите указывается максимально допустимая частота, нижнего предела нет. Можно хоть кнопку повесить на клок проца, и выполнять вручную по одной команде.
Аватара пользователя
North
 
Сообщения: 197
Зарегистрирован: 27 июл 2005, 14:12
Откуда: Дмитров, Москва
прог. языки: С, asm

След.

Вернуться в Новичкам или основы основ роботостроения.

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

Сейчас этот форум просматривают: Google [Bot] и гости: 1

Mail.ru counter