Lo que trato de hacer es leer una pantalla de 7 pines con 35/36 segmentos / LEDS. Quiero hacer esto para saber qué está haciendo el dispositivo. ¿Por qué? Porque quiero saber que puedo hacerlo (de todas formas es posible) y poder usar esta técnica en otros proyectos futuros.
El desafío
Es un dispositivo de terceros (China barata) y no hay hojas de datos disponibles, chip desconocido (ilegible o no se ha encontrado ninguna hoja de datos) y muestra desconocida sin ningún número de pieza. Intenté buscar el 'tipo' de pantalla pero no tuve suerte, no está disponible para comprarlo. Tengo dos versiones pero solo la portada es diferente.
China 35/36 segment display:
Music Player (MP) Version: Bluetooth version:
____________________________ ____________________________
| | | |
| |> USB FM | | USB AUX SD |
| 8 8 : 8 8 | | 8 8 : 8 8 |
| || SD MP3 | | FM BT * MHZ |
|____________________________| |____________________________|
| | | | | | | | | | | | | |
0 1 2 3 4 5 6 0 1 2 3 4 5 6
1 2 3 4 5 6 7 1 2 3 4 5 6 7
Characters are organized by the following byte method (see also font-table):
Bits: Hex: Decimal:
-- 0 -- -- 01 -- -- 1 --
| | | | | |
5 1 20 02 32 2
| | | | | |
-- 6 -- -- 40 -- -- 64 --
| | | | | |
4 2 10 04 16 4
| | | | | |
-- 3 -- -- 08 -- -- 8 --
Descubrícómofuncionalapantalla,aquíestálatabladelaverdad:
#defineTCID_MEM_ALLOC_TYPEstaticPROGMEM#defineTCID_MAX_LEDS35TCID_MEM_ALLOC_TYPEconstuint8_tTCID_LED_PINS_CFG[TCID_MAX_LEDS]={/*BITMODEInbitmodeeverypin'access'toasegmentisrepresentedbyonlyonebytespecifiedhereinbinaryformat.1=PINON,0=PINOFF.Thismethodsavesmemoryrequired.NOTICE:Thelastbit(isfirstbitactually)indicatesthedirectionofpin'polarity':1isplusfirst(HIGH)0isminusfirst(LOW)LEDname:PIN->12345671234567P|||||||*//*0001.FIRST_SEG_5{MIN,PLUS,OFF,OFF,OFF,OFF,OFF}*/B11000000,/*0102.FIRST_SEG_6{MIN,OFF,PLUS,OFF,OFF,OFF,OFF}*/B10100000,/*0203.FIRST_SEG_2{MIN,OFF,OFF,PLUS,OFF,OFF,OFF}*/B10010000,/*0304.FIRST_SEG_3{MIN,OFF,OFF,OFF,PLUS,OFF,OFF}*/B10001000,/*0405.THIRD_SEG_3{MIN,OFF,OFF,OFF,OFF,PLUS,OFF}*/B10000100,/*0506.FIRST_SEG_0{PLUS,MIN,OFF,OFF,OFF,OFF,OFF}*/B11000001,/*0607.SECOND_SEG_5{OFF,MIN,PLUS,OFF,OFF,OFF,OFF}*/B01100000,/*0708.SECOND_SEG_6{OFF,MIN,OFF,PLUS,OFF,OFF,OFF}*/B01010000,/*0809.SECOND_SEG_2{OFF,MIN,OFF,OFF,PLUS,OFF,OFF}*/B01001000,/*0910.USB{OFF,MIN,OFF,OFF,OFF,PLUS,OFF}*/B01000100,/*1011.FIRST_SEG_1{PLUS,OFF,MIN,OFF,OFF,OFF,OFF}*/B10100001,/*1112.SECOND_SEG_0{OFF,PLUS,MIN,OFF,OFF,OFF,OFF}*/B01100001,/*1213.THIRD_SEG_5{OFF,OFF,MIN,PLUS,OFF,OFF,OFF}*/B00110000,/*1314.THIRD_SEG_6{OFF,OFF,MIN,OFF,PLUS,OFF,OFF}*/B00101000,/*1415.THIRD_SEG_4{OFF,OFF,MIN,OFF,OFF,PLUS,OFF}*/B00100100,/*1516.FM{OFF,OFF,MIN,OFF,OFF,OFF,PLUS}*/B00100010,/*1617.FIRST_SEG_4{PLUS,OFF,OFF,MIN,OFF,OFF,OFF}*/B10010001,/*1718.SECOND_SEG_1{OFF,PLUS,OFF,MIN,OFF,OFF,OFF}*/B01010001,/*1819.COLON:{OFF,OFF,PLUS,MIN,OFF,OFF,OFF}*/B00110001,/*1920.THIRD_SEG_0{OFF,OFF,OFF,MIN,PLUS,OFF,OFF}*/B00011000,/*2021.FIFTH_SEG_3{OFF,OFF,OFF,MIN,OFF,PLUS,OFF}*/B00010100,/*2122.SD{PLUS,OFF,OFF,OFF,MIN,OFF,OFF}*/B10001001,/*2223.SECOND_SEG_4{OFF,PLUS,OFF,OFF,MIN,OFF,OFF}*/B01001001,/*2324.THIRD_SEG_1{OFF,OFF,PLUS,OFF,MIN,OFF,OFF}*/B00101001,/*2425.THRID_SEG_2{OFF,OFF,OFF,PLUS,MIN,OFF,OFF}*/B00011001,/*2526.FIFTH_SEG_5{OFF,OFF,OFF,OFF,MIN,PLUS,OFF}*/B00001100,/*2627.PLAY{PLUS,OFF,OFF,OFF,OFF,MIN,OFF}*/B10000101,/*2728.SECOND_SEG_3{OFF,PLUS,OFF,OFF,OFF,MIN,OFF}*/B01000101,/*2829.PAUSE{OFF,OFF,PLUS,OFF,OFF,MIN,OFF}*/B00100101,/*2930.FIFTH_SEG_4{OFF,OFF,OFF,PLUS,OFF,MIN,OFF}*/B00010101,/*3031.FIFTH_SEG_2{OFF,OFF,OFF,OFF,PLUS,MIN,OFF}*/B00001101,/*3132.FIFTH_SEG_0{OFF,OFF,OFF,OFF,OFF,MIN,PLUS}*/B00000110,/*3233.MP3{OFF,OFF,PLUS,OFF,OFF,OFF,MIN}*/B00100011,/*3334.FIFTH_SEG_6{OFF,OFF,OFF,OFF,PLUS,OFF,MIN}*/B00001011,/*3435.FIFTH_SEG_1{OFF,OFF,OFF,OFF,OFF,PLUS,MIN}*/B00000111};
Puedousarestapantalladebidoalainvestigación,puedomostrarloquequiera.Tambiéncreóunmétododebúferypuedeleerelestadodevisualización(veatambiénlasfuncionesgetChars()ygetOption()enelcódigofuenteacontinuación).
Sinembargo,nopuedoaveriguarcómoleerlapantalladesdeeldispositivo(estádiseñadoparaeso)directamentedesdelassalidas.
¿Unatareaimposible?
Notengounosciloscopioperoparecequeelcontroladordelapantallalohacedemaneradiferenteacomolohagoyo.Asignacióndeestados"ALTOS" y menos de "BAJOS". ¿Cuál es la mejor manera de leer la pantalla y cómo sincronizarse? ¿Algún ejemplo en algún lugar? Consejos?
Utilice un Arduino Nano como controlador de pantalla (con el uso del código a continuación) y lea la salida del controlador de pantalla en los pines analógicos del Nano.
Código fuente (no se puede publicar aquí porque parece demasiado grande para los estándares de stackoverflow)
Aquí un enlace a la fuente completa: enlace Hay dos directorios:
-
DisplayReadDisplayTimerDemo
, la demostración muestra el funcionamiento de la pantalla, el temporizador -
DisplayReadReader
, intenta leer la demostración de demostración