Comportamiento defectuoso de la pantalla al usar un Atmega328 debido a (¿incorrecto?) nivel de voltaje lógico

1

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.

    
pregunta georgjz

1 respuesta

1

Este comportamiento es normal. La secuencia de inicialización que está enviando no borra la pantalla; simplemente prepara la pantalla para mostrar los datos. Dado que la pantalla no se ha borrado, mostrará todos los datos aleatorios que se encuentren en la memoria al inicio.

Para borrar la pantalla, establezca una dirección y comience a escribir algunos datos en ella.

    
respondido por el duskwuff

Lea otras preguntas en las etiquetas