Панель от LG LAC6800R к LPT
Имеется панель от магнитолы LG LAC6800R:
Возможно ли ее подключить к ПК через LPT???
Стоит микросхема PT6524LQ датыш тут:
http://www.alldatasheet.com/datashee.../PT6524LQ.html
Из выходов имеем:
GLK
Reset
DO (возможно DI)
CE
Power - 5 V
GND
Либо через Arduino
Re: Панель от LG LAC6800R к LPT
Я подключал подобную панель, даже программку где то здесь выкладывал
Re: Панель от LG LAC6800R к LPT
Цитата:
Сообщение от
Chip
Я подключал подобную панель, даже программку где то здесь выкладывал
Читал, только эмулятор не понял как работает
http://www.compcar.ru/forum/showthread.php?t=4642
Re: Панель от LG LAC6800R к LPT
А как распознать какой код какой символ зажигает???
Re: Панель от LG LAC6800R к LPT
В ручную строить таблицу символов, зажигать по одному
Re: Панель от LG LAC6800R к LPT
Цитата:
Сообщение от
Chip
В ручную строить таблицу символов, зажигать по одному
на сколько сложно строить таблицу?
И как это делается? какие команды, может быть есть начальный код которым можно по одному символу зажигать?
Вложений: 1
Re: Панель от LG LAC6800R к LPT
Вот что из этого получилось:):
Вложение 13068
Re: Панель от LG LAC6800R к LPT
нужна помощь умельцев.
скетч написан ногой.
из него работает дисплей и кнопки. Нужно добавить сюда правильно энкодер. Как добавил результата естественно не получил
Помогите разобраться
PHP код:
#define LIMIT 10 //предел погрешности сопротивления
byte bytes[2];
int res_dt1, res_d;
int encoder0PinA = 2 ; //Вывод А энкодера
int encoder0PinB = 3 ; //Вывод В энкодера
int encoder0PinC = 4; //Вход кнопки энкодера
int LIGHT_SENS = 0 ; // Вход датчика освещености
int JOYSTIK_PIN = 5 ; // Вход для рулевых Кнопок
int CLK = 12;
int DI = 11;
int CE = 10;
int ADDR = 130;
byte ReadByte[8];
int i;
unsigned long math_time,old_time,real_time;
void setup()
{
pinMode(CLK, OUTPUT);
pinMode(DI, OUTPUT);
pinMode(CE, OUTPUT);
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinC, INPUT);
digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
Serial.begin(115200); // настроить скорость com порта
digitalWrite(CLK, LOW);
digitalWrite(DI, LOW);
digitalWrite(CE, LOW);
delay(1);
}
//===================================================
void loop()
{
hear();
ReadDisplay();
Encoder();
delay(10);
}
//==================================================
void Send_Adress()
{
Byte_Out(DI, CLK, ADDR);
delayMicroseconds(5);
digitalWrite(CE, HIGH);
}
//==================================================
void Byte_Out(uint8_t DI, uint8_t CLK, byte val)
{
int idx;
for (idx = 0; idx < 8; idx++)
{
delayMicroseconds(10);
if (((val << idx) & B10000000) == 128) digitalWrite(DI, HIGH); else digitalWrite(DI, LOW);
// digitalWrite(DI, val & (1 << idx)); /
digitalWrite(CLK, HIGH); // педний фронт синхроимульса
delayMicroseconds(15);
digitalWrite(CLK, LOW); // задний фронт синхроимульса
}
}
//==================================================
void hear()
{
res_d = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
delay(50);
res_dt1 = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
//old_time = millis();
/*math_time = 0;
while(math_time < 300 && (res_dt1 > res_d-LIMIT && res_dt1 < res_d+LIMIT ))
{
//real_time = millis(); //получить реальное время
math_time = real_time - old_time; //считаем длительность нажатия
res_dt1 = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
}
*/
if (abs(res_dt1-res_d)<=20 and res_dt1<1000 ) //если нет дребезга и что-то есть
{
bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 768) >> 8;
if ((bytes[1]>=-3) || (bytes[1]<=-7))
{
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
delay(10);
Serial.flush();
}
}
/*
if( math_time > 50) //если нет дребезга то короткое нажатие
{
bytes[0] = res_d & 255; // преобразовать в 2-байта
bytes[1] = (res_d & 768) >> 8;
if (bytes[1]==1) // выделяем полезную информацию
{
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
delay(10);
Serial.flush();
}
}*/
}
//===============================================
void ReadDisplay()
{
if (Serial.available() > 7)
{
for (i = 0; i < 8; i++)
{
(ReadByte[i]) = Serial.read() ; // принимаем данные с компа в массив
}
Serial.flush(); //очистить входной буфер USB
Send_Adress(); // отправляем адрес устройства
for (i = 0; i < 8; i++)
{
Byte_Out(DI, CLK, ReadByte[i]); //отправляем данные в шину в шину
}
digitalWrite(CE, LOW); // запретить прием данных подчиненым
}
delay(1);
}
//*******************Центральная кнопка***********************
void Encoder()
{
if(digitalRead(encoder0PinC)==LOW)
{
bytes[1]=8;
Serial.write( bytes,2);
while(digitalRead(encoder0PinC)==LOW){delay(50);}
bytes[1]=7;
}
}
//*******************обработка прерывания***********************
void doEncoderA()
{
cli();
if(digitalRead(encoder0PinB)==HIGH){bytes[0]=25;}else{bytes[0]=5;}
bytes[1] = 0;
Serial.write( bytes,2);
sei();
}
//*******************обработка прерывания***********************
void doEncoderB()
{
cli();
if(digitalRead(encoder0PinA)==HIGH){bytes[0]=5;}else{bytes[0]=25;}
bytes[1] = 0;
Serial.write( bytes,2);
sei();
}
Re: Панель от LG LAC6800R к LPT
А на компе что за программа? Программа должна различать полученные данные и раскладывать по полкам
Re: Панель от LG LAC6800R к LPT
Цитата:
Сообщение от
Chip
А на компе что за программа? Программа должна различать полученные данные и раскладывать по полкам
на компе программа есть, еще пока сырая но скоро должен доделать. сейчас чтобы писать программу дальше мне энкодер нужно подключить, если есть идеи как добавить эту функцию, поделитесь. как вариант расматриваю изменение передачи 2 байт на 3 допустим.