Обсуждаем электронику на колесах. Нужен увлажнитель воздуха для Камаза? Вам сюда.
Вт мар 10, 2015 08:01:40
Понял, спасибо, счас попробую что-нить написать уже. Единственно непонятна запись: CS=LOW>HI , это момент перехода с низкого на высокий? Если да - то хз как это объяснить ардуино.
Вт мар 10, 2015 08:04:47
Да. Это именно "фронт" CS.
Вт мар 10, 2015 13:55:23
В общем накатал на ардуино кое-что
. Прошу ногами не пинать, я только учусь.
- Код:
//определяем пины
#define DATA_PIN 11 // Data
#define SCK_PIN 2 // CLK
#define CS_PIN 3 // CS
void setup() {
attachInterrupt(0, sck_int, FALLING); //прерывание по спаду сигнала на SCK
attachInterrupt(1, cs_int, RISING); //прерывание по фронту CS
Serial.begin(57600);
//определяем состояние пинов
pinMode(DATA_PIN, INPUT);
pinMode(SCK_PIN, INPUT);
pinMode(CS_PIN, INPUT);
}
void loop() {
}
void sck_int() {
if (digitalRead(CS_PIN)==LOW){ //если пин CS опущен
Serial.print(digitalRead(DATA_PIN)); //отправляем бит в терминал
}
}
//получен фронт CS
void cs_int() {
Serial.println();
}
Работает, но не правильно. Вместо 20 бит - получаю 16, подозреваю что это из-за тормознутости функции digitalRead. Как можно решить эту проблему?
Вт мар 10, 2015 20:42:29
Мои предположения не подтвердились, немного погуглив переписал скетч уже без digitalRead :
- Код:
//определяем пины
#define DATA_PIN 11 // Data - PB3
#define SCK_PIN 2 // CLK - PD2
#define CS_PIN 3 // CS - PD3
void setup() {
attachInterrupt(0, sck_int, FALLING); //прерывание по спаду сигнала на SCK
attachInterrupt(1, cs_int, RISING); //прерывание по фронту CS
Serial.begin(57600);
//определяем состояние пинов
pinMode(DATA_PIN, INPUT);
pinMode(SCK_PIN, INPUT);
pinMode(CS_PIN, INPUT);
}
void loop() {
}
void sck_int() {
if (((PIND >> 3)&0x01) == 0){ //если пин CS опущен
Serial.print((PINB >> 3)&0x01, BIN); //отправляем бит в терминал
}
}
//получен фронт CS
void cs_int() {
Serial.println();
}
но приходит вновь 16 бит, куда делись ещё 4-ре?
Вт мар 10, 2015 21:40:49
Найдите в гугле пдф на микросхему ТМ1628,РТ6961итд. Там описан протокол ИС.
Вт мар 10, 2015 21:51:23
Вспомнилось...
В начале 90-ых мне говорил ("вправлял мозги") Андрей Солонин /программист "от бога", работал на кафедре МОСОИиУ в МИЭМ-е/:
"Никогда не пользуйся чужими библиотеками, поскольку хрен его знает как они работают.
Пиши свои.
Пусть, вначале, это будет коряво, но будешь точно понимать как работает твоя программа".
Ср мар 11, 2015 06:59:45
PicNik писал(а):Найдите в гугле пдф на микросхему ТМ1628,РТ6961итд. Там описан протокол ИС.
Похоже это оно. И это очень плохо, значит на дисплей передаются данные только для LED-матрицы, а я ожидал получить расстояния по каждому датчику.
Ср мар 11, 2015 11:01:46
Почему,в протоколе обмена с дисплеем идет инфа.о всех датчиках и расстояние каждого.Они опрашиваются последовательно и так-же передаются. +звук.
Чт мар 12, 2015 11:00:24
Нашел на одном из форумов информацию по такому же парктронику, там товарищ частично расколол протокол. Собственно, я пошёл по его стопам. На данный момент имеем:
здесь: пакет из 7 посылок, следующий пакет аналогичен предыдущему и так в цикле.
в посылке:
- Код:
1000 011 1 11111111 0000
| | | |
| | | расстояние (младший бит слева)
| | флаг наличия данных от датчиков (?)
| ?
номер посылки (младший бит слева)
Непонятно почему посылок 7? По логике их должно быть 4, по одной на каждый датчик. Предположительно соответствие номеров посылок датчикам следующее:
0 - B
1 - C
2 - A
3 - D
В ближайшее время попытаюсь выяснить подробнее.
Данные выше получены при всех отключенных датчиках.
PS. незнаю можно ли здесь разместить ссылку на источник? Если кому надо - пишите в личку.
Чт мар 12, 2015 13:17:09
Этот протокол не 7 и не 4 работать не будет, только 8-16-итд.На 1стр. видно по восемь тактов идут данные= 0-0-0-0-0-1-1-1,следующие одни 11111111.
Чт мар 12, 2015 13:46:51
7 посылок - я имел в виду: 7 посылок по 20 бит, на первой странице одна посылка на верхней осциллограмме, на нижней осциллограмме - масштаб поменьше, там влезло 5 посылок. Внутри каждой посылки: два байта и один полубайт (8+8+4). О каком протоколе Вы говорите? SPI? Почему не будет? Работает, принимаю на ардуино.
Чт мар 12, 2015 17:06:49
Теперь думаю как мне отправлять данные на дисплей. Кто подскажет : возможно ли с помощью аппаратного SPI отправить полубайт (4 бит)?
Чт мар 12, 2015 17:08:36
Нет.
Пишите программный последовательный интерфейс ("ногодрыг").
Пт мар 13, 2015 12:21:50
А принять 20 бит с помощью аппаратного SPI получится? Если да - то что будет на выходе? 3 байта, где в последнем полубайте будут нули?
Пт мар 13, 2015 12:51:16
Таким образом получим 16 бит вместо 20? Или же те, оставшиеся 4 бита в SSPSR так и останутся там лежать и передадутся в SSPBUF с первым полубитом следующего пакета данных? Или при "поднятии" SS - произойдёт очистка SSPSR?
Последний раз редактировалось
Dmitry888 Пт мар 13, 2015 12:54:19, всего редактировалось 1 раз.
Пт мар 13, 2015 12:54:06
Перенос принятых данных в SSPBUF и прерывание с SPI будет только после 8-го SCK.
Лучше сделать приём данных программно.
Не знаю как на СИ - на ASM это не более 15-ти строк.
Последний раз редактировалось
Albert_V Пт мар 13, 2015 17:32:04, всего редактировалось 1 раз.
Пт мар 13, 2015 13:00:34
Под аппаратный SPI есть библиотека в MikroC, в этом случае - 3 строки кода. Да и последние 4 бита в посылке от парктроника - ничего не значат. Только вот непонятно что происходит с данными в SSPSR при "поднятии" SS.
Пт мар 13, 2015 13:14:32
При "поднятии" SS - ничего. По спаду SS (разрешение приёма) сбрасывается счётчик SCK.
К SSPSR нет доступа (его нет в адресном пространстве).
Пт мар 13, 2015 16:34:31
Я хотел сказать что дисплей не воспримет 4 бита. И мне не понятно что они в 7 сегментном дисплеи могу засветить,может китайский косяк.
Вт мар 17, 2015 13:05:39
Аппаратный SPI так и не заработал, пришлось писать "ногодрыг", ниже код программы на си:
Получаю немного не то что ожидал:
Если посмотреть на осциллограмму:
то мне посылка видится так:
- Код:
00000111111111110000
Таким образом, что - то похожее на правду начинается с 13-й посылки, но откуда взялась первая единица? и куда делся последний ноль? Не могу понять где я ошибся?
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.