Обсуждаем электронику на колесах. Нужен увлажнитель воздуха для Камаза? Вам сюда.
Ответить

Re: Декодирование протокола парктроника

Вт мар 10, 2015 08:01:40

Понял, спасибо, счас попробую что-нить написать уже. Единственно непонятна запись: CS=LOW>HI , это момент перехода с низкого на высокий? Если да - то хз как это объяснить ардуино.

Re: Декодирование протокола парктроника

Вт мар 10, 2015 08:04:47

Да. Это именно "фронт" CS.

Re: Декодирование протокола парктроника

Вт мар 10, 2015 13:55:23

В общем накатал на ардуино кое-что :shock: . Прошу ногами не пинать, я только учусь.

Код:
//определяем пины
#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. Как можно решить эту проблему?

Re: Декодирование протокола парктроника

Вт мар 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-ре?

Re: Декодирование протокола парктроника

Вт мар 10, 2015 21:40:49

Найдите в гугле пдф на микросхему ТМ1628,РТ6961итд. Там описан протокол ИС.

Re: Декодирование протокола парктроника

Вт мар 10, 2015 21:51:23

Вспомнилось...
В начале 90-ых мне говорил ("вправлял мозги") Андрей Солонин /программист "от бога", работал на кафедре МОСОИиУ в МИЭМ-е/:
"Никогда не пользуйся чужими библиотеками, поскольку хрен его знает как они работают.
Пиши свои.
Пусть, вначале, это будет коряво, но будешь точно понимать как работает твоя программа".

Re: Декодирование протокола парктроника

Ср мар 11, 2015 06:59:45

PicNik писал(а):Найдите в гугле пдф на микросхему ТМ1628,РТ6961итд. Там описан протокол ИС.

Похоже это оно. И это очень плохо, значит на дисплей передаются данные только для LED-матрицы, а я ожидал получить расстояния по каждому датчику. :facepalm:

Re: Декодирование протокола парктроника

Ср мар 11, 2015 11:01:46

Почему,в протоколе обмена с дисплеем идет инфа.о всех датчиках и расстояние каждого.Они опрашиваются последовательно и так-же передаются. +звук.

Re: Декодирование протокола парктроника

Чт мар 12, 2015 11:00:24

Нашел на одном из форумов информацию по такому же парктронику, там товарищ частично расколол протокол. Собственно, я пошёл по его стопам. На данный момент имеем:

здесь: пакет из 7 посылок, следующий пакет аналогичен предыдущему и так в цикле.
в посылке:
Код:
1000 011 1 11111111 0000
 |    |  |     |
 |    |  |     расстояние (младший бит слева)
 |    |  флаг наличия данных от датчиков (?)
 |    ?
номер посылки (младший бит слева)

Непонятно почему посылок 7? По логике их должно быть 4, по одной на каждый датчик. Предположительно соответствие номеров посылок датчикам следующее:
0 - B
1 - C
2 - A
3 - D
В ближайшее время попытаюсь выяснить подробнее.
Данные выше получены при всех отключенных датчиках.
PS. незнаю можно ли здесь разместить ссылку на источник? Если кому надо - пишите в личку.

Re: Декодирование протокола парктроника

Чт мар 12, 2015 13:17:09

Этот протокол не 7 и не 4 работать не будет, только 8-16-итд.На 1стр. видно по восемь тактов идут данные= 0-0-0-0-0-1-1-1,следующие одни 11111111.

Re: Декодирование протокола парктроника

Чт мар 12, 2015 13:46:51

7 посылок - я имел в виду: 7 посылок по 20 бит, на первой странице одна посылка на верхней осциллограмме, на нижней осциллограмме - масштаб поменьше, там влезло 5 посылок. Внутри каждой посылки: два байта и один полубайт (8+8+4). О каком протоколе Вы говорите? SPI? Почему не будет? Работает, принимаю на ардуино.

Re: Декодирование протокола парктроника

Чт мар 12, 2015 17:06:49

Теперь думаю как мне отправлять данные на дисплей. Кто подскажет : возможно ли с помощью аппаратного SPI отправить полубайт (4 бит)?

Re: Декодирование протокола парктроника

Чт мар 12, 2015 17:08:36

Нет.
Пишите программный последовательный интерфейс ("ногодрыг").

Re: Декодирование протокола парктроника

Пт мар 13, 2015 12:21:50

А принять 20 бит с помощью аппаратного SPI получится? Если да - то что будет на выходе? 3 байта, где в последнем полубайте будут нули?

Re: Декодирование протокола парктроника

Пт мар 13, 2015 12:51:16

Таким образом получим 16 бит вместо 20? Или же те, оставшиеся 4 бита в SSPSR так и останутся там лежать и передадутся в SSPBUF с первым полубитом следующего пакета данных? Или при "поднятии" SS - произойдёт очистка SSPSR?
Последний раз редактировалось Dmitry888 Пт мар 13, 2015 12:54:19, всего редактировалось 1 раз.

Re: Декодирование протокола парктроника

Пт мар 13, 2015 12:54:06

Перенос принятых данных в SSPBUF и прерывание с SPI будет только после 8-го SCK.
Лучше сделать приём данных программно.
Не знаю как на СИ - на ASM это не более 15-ти строк.
Последний раз редактировалось Albert_V Пт мар 13, 2015 17:32:04, всего редактировалось 1 раз.

Re: Декодирование протокола парктроника

Пт мар 13, 2015 13:00:34

Под аппаратный SPI есть библиотека в MikroC, в этом случае - 3 строки кода. Да и последние 4 бита в посылке от парктроника - ничего не значат. Только вот непонятно что происходит с данными в SSPSR при "поднятии" SS.

Re: Декодирование протокола парктроника

Пт мар 13, 2015 13:14:32

При "поднятии" SS - ничего. По спаду SS (разрешение приёма) сбрасывается счётчик SCK.
К SSPSR нет доступа (его нет в адресном пространстве).

Re: Декодирование протокола парктроника

Пт мар 13, 2015 16:34:31

Я хотел сказать что дисплей не воспримет 4 бита. И мне не понятно что они в 7 сегментном дисплеи могу засветить,может китайский косяк.

Re: Декодирование протокола парктроника

Вт мар 17, 2015 13:05:39

Аппаратный SPI так и не заработал, пришлось писать "ногодрыг", ниже код программы на си:

Получаю немного не то что ожидал:

Если посмотреть на осциллограмму:
Изображение
то мне посылка видится так:
Код:
00000111111111110000

Таким образом, что - то похожее на правду начинается с 13-й посылки, но откуда взялась первая единица? и куда делся последний ноль? Не могу понять где я ошибся?
Ответить