Имеется панель от автомагнитолы.В ней драйвер сегментов и сам индикатор.Каким образом можно подключить к Atbanned6?
Есть ли в Барсике библиотека под это?
Отредактировано Zybex (2011-06-08 23:19:00)
Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Можно ли подключить к Atbanned6 LCD индикатор c входами CE,CLOCK,DATA?
Имеется панель от автомагнитолы.В ней драйвер сегментов и сам индикатор.Каким образом можно подключить к Atbanned6?
Есть ли в Барсике библиотека под это?
Отредактировано Zybex (2011-06-08 23:19:00)
Для начала надо узнать что за драйвер, а там видно будет.
Для начала надо узнать что за драйвер, а там видно будет.
LC75823E
в Яндрексе нашел что-то типа описания программиста
там всё есть. Не читал!
Mrshilov
А точно не односторонний вариант SPI ?
Mrshilov
Оказалось, шина называется CCB
Mrshilov
Спасибо.Но все же можно I2C припахать? А то я не совсем понимаю, как там CLOCK делать...
Mrshilov
Пробовал через I2C .Но я не понимаю, как там организовать нужное количество бит.Точнее 8+160. I2C шлет дополнительно свои биты.
Пробовал и через I2Csend и через I2Cwbyte... второе в протеусе шлет пакеты, в железе - ничего.
А просто через произвольные порты если делать, то там синхронизацию посылаемых битов с Clock непонятно как делать.
Mrshilov
Ладно, пока не будем i2c мучать. Я не понял, как там после каждого посланного байта убрать служебный бит А.
Вот , что я нашел на польском сайте.Здесь реализовано управление для LC7582 (это которая не CCB, адресации нет).
Что тут можно подправить, чтобы программа слала 8+160 бит из базы (даты)?
Чел, как я понял, делал вывод значений миллиамперов и вольт.
'//////////////////////////////////////////////////////////////////// '//////////// STEROWANIE WYSWIETLACZEM NA LC7582 //////////////// '//////////////////////////////////////////////////////////////////// $regfile = "attiny2313.dat" ' $crystal = 8000000 $lib "bcd.lbx" $external Bin2bcd16 Declare Function Bin2bcd16(binval As Word) As Word Config Pind.2 = Output : Pind.2 = 0 Config Pind.3 = Output : Pind.3 = 0 Config Pind.4 = Output : Pind.4 = 0 Dat Alias Portd.2 'linia danych Clk Alias Portd.3 'linia zegarowa Ce Alias Portd.4 'zezwolenie transmisji Dim Mah As Word , Napiecie As Word , Pom As Word Dim Petla As Byte , Dane(16) As Byte Napiecie = 16 : Mah = 1234 'opcjonalnie Do Gosub Przelicz : Gosub Wyswietlanie Waitms 100 Loop : End Przelicz: Pom = Mah : Pom = Bin2bcd16(pom) Dane(2) = Pom And &B0000000000001111 'wyodrebnij jedności mAh Shift Pom , Right , 4 : Dane(4) = Pom And &B0000000000001111 'dziesiatki mAh Shift Pom , Right , 4 : Dane(6) = Pom And &B0000000000001111 'setki mAh Shift Pom , Right , 4 : Dane(9) = Pom And &B0000000000001111 ''tysiace mAh Pom = Napiecie : Pom = Bin2bcd16(pom) Dane(3) = Pom And &B0000000000001111 'dziesiętne V Shift Pom , Right , 4 : Dane(5) = Pom And &B0000000000001111 'jednosci V Shift Pom , Right , 4 : Dane(7) = Pom And &B0000000000001111 'dziesiątki V Dane(2) = Lookup(dane(2) , Tabela) 'wczytaj z tabeli jednosci mah Dane(4) = Lookup(dane(4) , Tabela) 'dziesiatki mah Dane(6) = Lookup(dane(6) , Tabela) 'setki mah Dane(9) = Lookup(dane(9) , Tabela) 'tysiace mah Dane(8) = Dane(9) 'tak ma byc Dane(3) = Lookup(dane(3) , Tabela) 'dziesietne V Dane(5) = Lookup(dane(5) , Tabela) 'Jednosci V Dane(7) = Lookup(dane(7) , Tabela) 'dziesiatki V If Dane(7) = 123 Then Dane(7) = 0 'jesli dziesiatki V = 0 to wygas cyfre dziesiatek Dane(16) = 2 'w dane(16).1 wymagane 1 Dane(8).3 = 1 'wymagane 1 Dane(8) = Dane(8) And 223 'to samo co Dane(8).5 = 0 -wymagane Dane(3).7 = 1 'kropka V Dane(1).6 = 1 'znak V Dane(1).7 = 1 'znak mAh Return Wyswietlanie: Set Ce 'rozpoczecie transmisji For Petla = 6 To 121 'wyslij 112 bitow Dat = Dane(1).petla 'ustaw znak Set Clk : Reset Clk 'ustaw taktowanie i wyzeruj taktowanie -wpisz znak If Petla = 61 Then Reset Ce : Set Ce 'jesli wyslalo polowe to wyzeruj i ustaw ce Next Reset Ce 'koniec transmisji Return Tabela: Data 123 , 10 , 55 , 47 , 78 , 109 , 125 , 75 , 127 , 111
Отредактировано Александр Д. (2011-06-20 21:30:59)
$regfile "m16def.dat" $crystal = 8000000 $lib "i2c_twi.lib" Config Twi = 20000 Config Porta = Output Config Portb = Output Config Portd = Output Config Portc = Output Config Pind.0 = Output 'INTH Config Pind.1 = Output 'CE Config Scl = Portc.0 Config Sda = Portc.1 I2cinit Do Set Portd.0 'INTH I2cstart I2cwbyte &H41 Set Portd.1 'CE I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11111111 I2cwbyte &B11110000 Reset Portd.1 'CE i2cstop Waitms 1000 Reset Portd.0 'INTH Loop End
Отредактировано Zybex (2011-06-20 21:51:30)
Mrshilov
Я кабель LPT не нашел.Конечно бы проверить сначала ее, хотя работало .Протеус - это чтобы схему нарисовать. А в подпрограмме "высвечивание" там в DATA нужно набивать байты через запятую?
То есть &H41,...&B00000000 итд 20 штук? Я там не понял как, например,байт &Bxxxxxxxx разбивается на биты, чтобы включать и выключать порт.
Команда shiftout подходит для реализации?
PS AY0438 в протеусе удалось запустить с помощью этой команды.
PPS 75823 тоже.Правда адрес &H82.В другом форуме тоже об этом писали.
Теперь другой вопрос: как менять только одну цифру букву значок итд? Переписывать все 160 бит???
Отредактировано Zybex (2011-06-21 02:54:53)
Mrshilov
Значит вот на чем я остановился.Кстати, фишку с прописыванием массива A(n) я не знал.Сейчас покажу, что пришлось сделать мне.Хорошо, что было описание сегментов (PDF на магнитолу).Да, это табло от магнитолы.Там есть 8 разрядов 14 сегментов для вывода текста и цифр, есть счетчик треков 00 и всякие таблички и уровни.
Я ,конечно, не ахти какой оптимизатор кода и хитрых ходов пока не знаю.Вот, что у меня получилось.Данная программа выводит счет на 00-99 и так по кругу (указатель треков СД).Пришлось писать тейбл под старший и младший сегмент.Переменная Segment1,Segment2 это на самом деле разряды.Просто не правильно назвал.
Dat(20).1 = 0 'BU
Dat(20).2 = 0 'SC
Dat(20).3 = 0 'DR
Вы не могли бы объяснить вот эти строчки вашего кода.Это замена в байте &Bxxxxx(xxx).Изменение с конца?
============
$regfile "m16def.dat" $crystal = 8000000 '$lib "lcd4.lib" Config Porta = Output Config Portb = Output Config Portd = Output Config Portc = Output Config Pind.0 = Output Config Pind.1 = Output Config Pind.2 = Output Config Pind.3 = Output Declare Sub Case1 Declare Sub Disp 'Portd.2 Alias Di 'Portd.3 Alias Clk 'Portd.4 Alias Ce 'Portd.5 Alias Inth Dim A As Byte Dim B As Byte Dim C As Byte Dim D As Integer Dim Segment1 As Byte Dim Segment2 As Byte Dim F As Integer Dim Ga As Integer Dim Gb As Integer Dim Gc As Integer Dim Loud As Bit Ga = 0 Do Gosub Disp Ga = Ga + 1 If Ga = 100 Then Ga = 0 Waitms 1000 Loop End Sub Disp D = Ga \ 10 Gosub Case1 Gb = D * 10 F = Ga - Gb Gosub Case1 Locate 1 , 1 Lcd D Locate 2 , 1 Lcd F A = &H82 Shiftout Portd.2 , Portd.3 , A , 0 Set Portd.4 Shiftout Portd.2 , Portd.3 , Segment1 , 0 ' цифры х0 Shiftout Portd.2 , Portd.3 , Segment2 , 0 ' цифры 0х For B = 2 To 19 C = Lookup(b , seg) Shiftout Portd.2 , Portd.3 , C , 0 Waitms 10 Next Reset Portd.4 End Sub Return Sub Case1 Select Case D Case 0 : Segment1 = &B01110111 Case 1 : Segment1 = &B00000011 Case 2 : Segment1 = &B00111110 Case 3 : Segment1 = &B00011111 Case 4 : Segment1 = &B01001011 Case 5 : Segment1 = &B01011101 Case 6 : Segment1 = &B01111101 Case 7 : Segment1 = &B00010011 Case 8 : Segment1 = &B01111111 Case 9 : Segment1 = &B01011111 End Select Select Case F Case 0 : Segment2 = &B01111110 Case 1 : Segment2 = &B00001100 Case 2 : Segment2 = &B11111000 Case 3 : Segment2 = &B11101100 Case 4 : Segment2 = &B10001110 Case 5 : Segment2 = &B11100110 Case 6 : Segment2 = &B11110110 Case 7 : Segment2 = &B01001100 Case 8 : Segment2 = &B11111110 Case 9 : Segment2 = &B11101110 End Select End Sub Return Seg: Data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
Отредактировано Zybex (2011-06-22 23:34:30)
Mrshilov
Да, он работает.А что непосредственно значит 1,2,3 ? Допустим, что 20-й байт &B11111111, то что произойдет после
Dat(20).1 = 0
Dat(20).2 = 0
Dat(20).3 = 0
&B11111000
?
Отредактировано Zybex (2011-06-21 21:34:51)
Mrshilov
Понял.Спасибо. А то что-то запутался в этом.
То есть можно на лету бит подменять...
Подумалось тут о полноценной программе-драйвере под эту панель.Ну чтоб буквы, цифры
Но вряд ли.Это ж сколько нужно в тейбл набивать.Весь алфавит чего стоит.
А не подскажете еще кое-чего: как через команду shiftout послать 1 бит, а не 8?
Дело в том, что нужно организовать несколько пропусков в 1 бит.
Или как назначить переменную в 160 бит?
Отредактировано Zybex (2011-06-22 20:14:27)
Скажите, получилось какое-то готовое устройство или нет.
Просто у меня есть подобная панелька от авторадио на LC7282 (SONY) но мне очень хочется её приделать к самодельному радио-сканеру 45-850 МГц.
_http://p-45.narod.ru/Mini-45.html
В качестве индикатора частоты, в проекте используется ЖКИ TIC-8213/55 (ML1001) которые трудно найти, продавцы радио-рынка мотают головой, а у одного даже глаз задергался (видно достали).
В качестве управления ипользуется PIC12F629 и соеденен с ЖКИ тремя контактами:
LOAD - Загрузка данных с регистра сдвига в регистр данных
DIN - Входной вывод данных на дисплей
DCLK - Входной вывод для тактирования данных на дисплей
исходный код есть
_http://p-45.narod.ru/Mini/M45v02.asm
Можно ли адаптировать код под LC7582 и что для этого потребуется ?
P.S.
контакт INH не обьязательно использовать
при лог. 0 информация не выводится на дисплей
при лог. 1 выводится.
Т.е. можно соеденить вывод INH с Vdd напрямую или через резистор в 10кОм.
Отредактировано 20AMax (2013-02-03 14:29:00)
В качестве индикатора можно использовать любые регистры сдвига с семисегментниками в статическом включении. Больше всего похоже на 595й регистр по назначению лап. Может, разве что придется изменить таблицу цифр
Ага понятно примерно так:
_http://ra9wof.qrz.ru/files/Shemes/PIC/ht1611.files/image013.gif
но все-же стало интересно, и собрал девайс для LC7582, Post # 14
STEROWANIE WYSWIETLACZEM NA LC7582 (по моему з/у батареек)
показывает, но не то что надо.
Как бы выглядела программа которая высвечивает 1 сегмент на дисплее
(потом 2 затем 3, 4...и так далее) ну для того чтобы зарисовать таблицу сегментов.
тех.док.
_http://www.datasheetcatalog.org/datasheet/sanyo/ds_pdf_e/LC75821E.pdf
Это ты нашел с LCD с непонятным протоколом ))) TICи такого типа работают по принципу статической индикации, заменить можно по ссылкам ниже .
На светодиодных индикаторах :
Статика : http://avrproject.ru/publ/kak_podkljuch … a/2-1-0-57
Динамика : http://avrproject.ru/index/podkljucheni … mer_2/0-17
Отредактировано Skull (2013-02-10 17:01:46)

с TIC разобрался уже хотел помучать магнитолу в надежде что-нибудь когда нибудь сделать.
вопрос снимается
Hello World на магнитоле
Отредактировано 20AMax (2013-02-10 17:19:21)
Управлять мордой по протоколу sanyo CCB не сложно, а вот как реализовать чтение?
Я хочу избавиться от морды, читать и управлять магнитолой на 32U4 через андройд приложение.
https://yadi.sk/i/qFbQrfa_qDfzK (это еще недописанная версия).
На аппаратном уровне через SPI получается только читать данные выводимые на дисплей с инверсией вывода CS, так как адрес прочесть я не могу, отправить данные тоже.
На TEENSY3.1 я написал программную реализацию протокола, но иногда бывают ошибки, и работает только на 72MHZ, ниже мусор.
Использую 2 прерывания по выводу CL , при FALLING читаю данные, при RISING отправляю.
По мануалу на микросхему BU97520,
при адресе 0x42 приходит пакет из 12 байт, всего 4 пакета на дисплей (48 байт), нумерация пакетов в последних битах 12 байта (00, 01, 10, 11).
При адресе 0x43 отправка данных клавиатуры 32 бита. Но из-за того что какой то сдвиг после последнего принятого пакета данных, вместо 0x43 читает 0x86.
Пишу в Arduino IDE. Помогите советом. В сети нашел только как управлять по протоколу CCB (быть мастером), мне же надо слейвом.
Вот код прерываний:
void spidisp() {
if ((GPIOC_PDIR & 0x10) != 0x10) { // cs 10 = 0
bitWrite(A, posA, (GPIOC_PDIR & 0x80)); // читаем адрес
posA++; posKey = 0;
}
else { // cs 10 = 1
posA = 0;
if (A == 0x42) {
bitWrite(MyBuff[posBy], posBi, (GPIOC_PDIR & 0x80)); // читаем данные дисплея
posBi--;
if (posBi < 0) {
posBi = 31;
posBy++;
}
}
}
}
void spikey() {
if ((GPIOC_PDIR & 0x10) == 0x10) { //cs 10 = 1
if (A == 0x86 || A == 0x43) {
posKey++;
if (posKey == 21 || posKey == K) GPIOC_PSOR = _BV(6); //data out 11 = 1
else GPIOC_PCOR = _BV(6); //data out 11 = 0
posBi = 31;
posBy = 0;
}
}
else if (A == 0x86) { //cs 10 = 0
CRC();
DATA();
}
}
Отредактировано kisel39 (2016-03-16 08:09:14)
Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Можно ли подключить к Atbanned6 LCD индикатор c входами CE,CLOCK,DATA?