Заголовок сообщения: нужна помощь в написании программы для МК.
Добавлено: 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" происходит чтение бита ???
Заголовок сообщения: 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, потом опять пауза по ДШ.
Зарегистрирован: 18 сен 2006, 12:26 Сообщения: 18018 Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
ага значит все остальные мои мысли похожи на правду
псевдокоду я уже несколько листов исписал
ой скока там всего интересного в курсе понаписалось я его летом читал было меньше=)
Зарегистрирован: 18 сен 2006, 12:26 Сообщения: 18018 Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
немного запутался
как лучше организовать передачу бит? поясню. надо записать в сенсор например вот такое число 0b10000000
мои предположения: соответственно выставляем на ножке МК(которая у меня будет SDIO) один раз единицу и ноль 7 раз синхронно с тактированием процесса передачи ножкой SCK тоесть примерно такая конструкция где PORTB.0 //SCK PORTB.1 //SDIO
Код:
{ PORTB.0=0 PORTB.1=1 ждём 60 //взял из даташита PORTB.0=1 ждём 250 нс //взял из даташита
мне кажеться чёто это всё както странно :shock: выглядит и на самом деле не так пишуться байты.
как может выглядеть процедура записи байта взятого из переменной например i в первый пин порта например B
надеюсь я понятно объяснил то что пытаюсь сделать :?:
ЗЫ чёто немогу посчитать, как согласуеться тактовая частота процессора с частотой передачи данных сколько тактов будет отсылаться биты и скока тактов остаёться на всё остальное? не получиться ли что передача займёт всё процессорное время?
на рисунке график из даташита, я так понимаю осциллограмма с 2х ножек МК должа быть похожа на это??
Вложения:
вид импульсов.JPG [ 33.87 КиБ | Просмотров: 2680 ]
Зарегистрирован: 06 ноя 2005, 04:18 Сообщения: 14195 Откуда: Москва
Myp писал(а):
чёто немогу посчитать, как согласуеться тактовая частота процессора с частотой передачи данных сколько тактов будет отсылаться биты и скока тактов остаёться на всё остальное?
я в курсе советую не считать а измерить в симуляторе. например в VMLAB.
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 (там почти такой же интерфейс). Работало.
функция паузы наверно может быть пустой для большинства частот кварца, ведь один вызов функции скорей всего займет эти 250 НАНО сек.
Несомненно это так. Поэтому я и написал длительность паузы от балды, зная, что полюбому при таком раскладе длительность половины периода будет никак не меньше 250 нс. Просто в даташите эти 250 нс указаны как минимальные значения, увеличивать же их ни кто не запрещает. В качестве аналогии можно привести частоту тех же AVR - в даташите указывается максимально допустимая частота, нижнего предела нет. Можно хоть кнопку повесить на клок проца, и выполнять вручную по одной команде.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения