He construido un pequeño circuito usando un Atmega328P para conducir una pantalla DD-32645C-2A usando una placa de conectores. La pantalla utiliza un controlador SSD1303.
Así que aquí está mi circuito:
Bastantesencillo,creo.UsoelpuertoCparaconfigurarlospinesdecontroldelapantallayelpuertoDparaenviarcomandos/datos.AquíestáelcódigoqueprograméenmiMCU:
#include<avr/io.h>#defineF_CPU8000000UL#include<util/delay.h>voidinital(void);voidwrite_c(unsignedcharins_c);voidwrite_d(unsignedcharins_d);intmain(void){//setportsDandCasoutputDDRC=0b11111111;DDRD=0b11111111;inital();while(1){}}voidinital(void){PORTC&=0b00000000;//resetdisplaypins_delay_ms(150);//delay150msforresetPORTC|=(1<<5);//setREStohighwrite_c(0xAE);write_c(0x81);write_c(0xAF);write_c(0xA8);write_c(0x3F);write_c(0xA0);write_c(0xD3);write_c(0x00);write_c(0x40);write_c(0xC8);write_c(0xDA);write_c(0x12);write_c(0xD9);write_c(0xF1);write_c(0xDB);write_c(0x49);write_c(0xA4);write_c(0xA6);write_c(0xAF);}voidwrite_c(unsignedcharins_c){PORTC=0b00010100;//setpinsforsendingcommandsPORTD=ins_c;PORTC=0b00011111;}voidwrite_d(unsignedcharins_d){PORTC=0b00010101;//setpinsforsendingdataPORTD=ins_d;PORTC=0b00011111;}
Tambiénnoescomplicado,creo.ConfigurémispuertosCyDcomosalidasyllaméamifuncióndeinicialización.Estafunciónrestablecelapantallayenvíaunaseriedecomandosparaconfigurarlo(simplementecopiéestarutinadelahojadedatosdelapantalla).LasotrasdosfuncionessimplementeenvíanunbytededatosutilizandoelpuertoD.
Esteesmiproblema:larutinadeconfiguraciónparecefuncionarbien,peromipantallaseveasí(medisculpopormicámaradefectuosa):
La primera imagen muestra lo que obtuve inicialmente, lo cual no es realmente convincente. Ahora, después de verificar dos y tres veces todas mis conexiones y códigos para detectar errores, accidentalmente olvidé volver a conectar la alimentación VDD (3.3 V) a la placa del conector, que controla la lógica del controlador de la pantalla (consulte la página 5 de la hoja de datos de la placa del conector en la comentario). Y ese resultado se muestra en la segunda imagen / imagen inferior.
Todavía no es perfecto, pero está mucho más cerca del efecto deseado. Debe haber un gran rectángulo azul y cuatro más pequeños en la parte superior. Pero todavía algunos píxeles no se iluminan.
¿Alguien tiene una idea de lo que está pasando aquí? No conectar el pin VDD para la lógica del controlador de pantalla no tiene ningún sentido para mí, pero hace que mi pantalla funcione mejor.