roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 07:35

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: нужна помощь в написании программы для МК.
СообщениеДобавлено: 20 окт 2006, 23:51 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
введение:
подробно идея описана в топике: 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 КиБ]
Скачиваний: 406
Комментарий к файлу: мой перевод выдержки из даташита
описание протокола связи adns RUS.txt [1.67 КиБ]
Скачиваний: 376
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 окт 2006, 02:42 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
msb - "мост сигнификант бит" - самый значащий бит в числе - т.е. имеющий наибольший порядковый номер и соответственно "вес".

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

и еще:   http://www.CforAVR.narod.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нужна помощь в написании программы для МК.
СообщениеДобавлено: 21 окт 2006, 02:54 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Myp писал(а):
hi-z это по нашему - высокоимпедансное состояние?

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


да.

нет.

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

======

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нужна помощь в написании программы для МК.
СообщениеДобавлено: 21 окт 2006, 02:59 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
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, потом опять пауза по ДШ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 окт 2006, 12:34 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

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

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


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


Огромное спасибо=)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 окт 2006, 16:21 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
незачто.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2006, 21:59 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
немного запутался :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
вид импульсов.JPG [ 33.87 КиБ | Просмотров: 2680 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2006, 09:13 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2006, 11:10 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
между ними:
portB.0=0
portB.1=0
тоже наверно пауза нужна.

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

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

==========

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

=========

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

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

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

выполнение цикла может добавить паузы так как требует времени.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2006, 11:13 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
как микруха называется?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2006, 11:17 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Myp писал(а):
чёто немогу посчитать, как согласуеться тактовая частота процессора с частотой передачи данных
сколько тактов будет отсылаться биты и скока тактов остаёться на всё остальное?


я в курсе советую не считать а измерить в симуляторе. например в VMLAB.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2006, 11:27 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
ADNS-2620 похоже.  там более сложен прием данных из датчика. там пауза в передаче и прочие хитрости.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2006, 14:10 
Не в сети
Аватара пользователя

Зарегистрирован: 27 июл 2005, 14:12
Сообщения: 197
Откуда: Дмитров, Москва
прог. языки: С, asm
Без прерываний это выглядит как-то так:
Код:
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 (там почти такой же интерфейс). Работало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2006, 14:40 
Не в сети
отсылающий читать курс
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2006, 15:55 
Не в сети
Аватара пользователя

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

Несомненно это так. Поэтому я и написал длительность паузы от балды, зная, что полюбому при таком раскладе длительность половины периода будет никак не меньше 250 нс. Просто в даташите эти 250 нс указаны как минимальные значения, увеличивать же их ни кто не запрещает. В качестве аналогии можно привести частоту тех же AVR - в даташите указывается максимально допустимая частота, нижнего предела нет. Можно хоть кнопку повесить на клок проца, и выполнять вручную по одной команде.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа


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

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO