Primera vez intentando encender
Dirección del código del programa , contraseña: 1234.
Compré un OLED de dos colores y descargué la información. Tenía un Arduino 8266 en la mano, así que lo usé por conveniencia. La razón principal para usar Arduino es que la llave del microcontrolador es demasiado grande y es problemático encontrar el archivo y modificar los pines. De hecho, los principios de la comunicación SPI son los mismos.
Primer intento, encontré problemas:
1. Es necesario modificar el número de PIN en la información.
2. El archivo **font.h y el archivo de proyecto (.ino)** de varios caracteres obtenidos mediante el módulo de matriz de puntos deben colocarse en el Clip de archivo del mismo nivel en el interior. En la introducción se recomienda colocarlo en la carpeta lib de Arduino, pero para mayor comodidad, también se puede leer directamente, así que simplemente muévalo a una carpeta. Y este es sólo un archivo de caracteres de muestra, no es necesario guardarlo.
3. Cabe señalar que si solo se suministra el voltaje de la fuente de alimentación, el OLED no se iluminará. Al principio sospeché que la pantalla estaba rota, luego, luego de conectar el cable de señal y descargar el programa, descubrí que la pantalla era normal, no sé por qué los colores tomados por el teléfono móvil estaban un poco distorsionados.
El controlador SSD1306 lee el análisis del tiempo de trabajo
Como se puede ver en el diagrama de tiempos, incluye principalmente 6 tipos de tiempo: ciclo de reloj, tiempo de configuración de dirección, tiempo de selección de chip, tiempo de lectura y escritura de datos, tiempo alto y bajo en el ciclo del reloj, tiempo de flanco ascendente y descendente. ciclo
: mayor que 100 ns = 10 -7 s, es decir, la frecuencia del reloj es menor que 10 MHz,
el tiempo de bajo y alto nivel en el ciclo del reloj : mayor que 15 ms
configuración/tiempo de retención de dirección (datos/comando), Tiempo de escritura/lectura de datos: configurando si desea transmitir datos o ordenar , encontrará dos tipos. El valor del tiempo es el mismo. Básicamente, escribir comandos y escribir direcciones son transferencias de información.
Tiempo de flanco ascendente y descendente : El máximo es 40 ns. En teoría, la forma de onda ideal debería ser una onda rectangular, es decir, los flancos ascendente y descendente son 0 s.
Análisis general del tiempo:
en primer lugar, la primera vez es cuando entra en vigor el tiempo de selección del chip cs . Después de todo, el dispositivo no se ha seleccionado bien y no tiene sentido enviar datos o comandos, ya que la transmisión de datos o comandos se completa en el flanco ascendente del reloj , por lo que durante el período del flanco ascendente, se debe garantizar que el nivel de D/C (datos/comando) y la transmisión de datos sean estables.
Análisis de configuraciones comunes (en realidad, la comprensión de cómo conducir SSD1306)
Parámetros básicos OLED
Pantalla de dos colores de 0,96 pulgadas, compatible con comunicación IIC y spi, 128*64 píxeles, memoria de visualización de 8 páginas, lo que equivale a dividir las líneas de la pantalla en 8 partes según el número de bytes
Uso de comandos y método de búsqueda del manual del conductor
Fuente: Hay muchas formas, algunas de las cuales solo proporcionan contenido común. Si desea conocer el manual detallado, puede visitar algunos sitios web sobre manuales de hardware (como chips semiconductores, etc.) para verificar y descargar. Es una interceptación de una parte de la tabla de comandos para explicar cómo usarla.
Comando de inicialización
El siguiente OLED_WR_Byte es una función definida: la MCU escribe el programa en el controlador para controlar la pantalla. Dependiendo del software de programación y de la MCU, el programa puede aparecer en diferentes formas, pero los comandos básicos son los mismos. Estos comandos se pueden encontrar a través del manual.
Varios comandos que son más importantes y que a menudo necesitan ser cambiados:
1. Establecer contraste : Aquí se siente como brillo. El comando es como se muestra a continuación. De acuerdo con la forma de ver el comando manual anterior, puede saber que necesita enviar el comando dos veces . El primer 0x81 es solo para informar al conductor. El primer comando propio es el valor de contraste
2. Los comandos relacionados con la pantalla incluyen pantalla encendida (AF)/apagada (AE), bit de datos 0 (A7) o 1 (A6). ) encendido, arriba y abajo, izquierda y derecha (26/27), todo se puede encontrar en el manual
Comando de ubicación de visualización de dirección
Consulte la Tabla de comandos de configuración de direcciones 3 en la Tabla de comandos 9 en el manual.
La posición de visualización de esta pantalla de control debe controlar el modo de dirección de memoria, el inicio de la columna, el inicio y el final de la fila. En primer lugar, sabemos
que hay 8 páginas, lo que equivale a almacenar 8 cachés de pantalla de 128*64
Hay tres modos de dirección de memoria : modo de dirección de página , modo de dirección horizontal , modo de dirección vertical
OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
OLED_WR_Byte(0x02,OLED_CMD);//也就是A[1:0]=10b
Modo de direccionamiento de página
Este modo: El puntero irá automáticamente al principio cuando llegue al final de cada página, pero no irá a la página siguiente.
Este modo requiere dos comandos para establecer la posición inicial de la columna.
Configuración del inicio de la página
Modo de direccionamiento horizontal
Este tipo de distribución de direcciones salta automáticamente al principio al final de la línea, y la página pasa automáticamente a la siguiente. Cuando finalice la última página, apuntará a la primera.
Establecer el inicio y el final de la columna
Establecer el inicio de la página
La distribución de direcciones del siguiente patrón es de arriba a abajo y de izquierda a derecha.
Transferencia de datos de bytes (datos/comando)
La configuración en el programa a continuación coincide exactamente con el diagrama de tiempo de transmisión de datos anterior.
Visualización de datos de caracteres
El método general consiste en tomar un módulo de los caracteres y, cuando se completan los ajustes de inicialización, los datos de la matriz de fuentes se pasan a la
marca de letras ASCII del controlador.
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
/*
x±íʾ¿ªÊ¼ÏÔʾµÄÏñËØÆðʼλÖÃ
y±íʾÏÔʾÔÚÄÇÒ»Ò³
*/
OLED_WR_Byte(0xb0+y,OLED_CMD); //ÉèÖõØÖ·Ò³£¬y¡Ê[0£¬7]
//½«ÏÔʾµÄ¿ªÊ¼µØÖ·ÖеĸßËÄ룬ºÍµÍËÄλ·Ö¿ªºóдÈë¸øOLED
//¶ø8λµÄ·¶Î§
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD); //ÉèÖÃÏÔʾλÖᪿªÊ¼ÁеØÖ·µÄµÍËÄλ
OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD); //ÉèÖÃÏÔʾλÖᪿªÊ¼ÁеØÖ·¸ßËÄλ
}
/*参数含义(c51程序)
x,显示位置的横坐标x
y,显示位置纵坐标y
下面程序中几个参数是宏定义过的,
size=16(字模16*8),OLED_DATA=1(传送的是数据)
*/
void OLED_ShowChar(u8 x,u8 y,u8 chr)
{
unsigned char c=0,i=0;
c=chr-' '; //字符在ascii位置
if(x>Max_Column-1) //如果显示到最右边
{
x=0;y=y+2;} //到最左边,向下移动两个像素
if(SIZE ==16)
{
OLED_Set_Pos(x,y); //设置字符显示的起始地址
for(i=0;i<8;i++) //将一个字节的8个位按位传送出去
OLED_WR_Byte(F8X16[c*16+i],OLED_DATA); //F8X16是取字模的数组,这个传送方式要看具体的取模方式
OLED_Set_Pos(x,y+1); //向下移动一个地址页page
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
}
else {
OLED_Set_Pos(x,y+1);
for(i=0;i<6;i++)
OLED_WR_Byte(F6x8[c][i],OLED_DATA);
}
}
Si desea analizar los motivos de la asignación de ubicación del código que se muestra arriba, debe considerar la forma de obtener el modelo de fuente.
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",0*/
/* (8 X 16 , 隶书 )*/
Busque la matriz del carácter "-" en la biblioteca de fuentes e invierta el método del módulo.
Modo módulo, bit bajo primero.
El siguiente es el método de asignación de direcciones de píxeles en el controlador.
/*传入显示的数据*/
OLED_Set_Pos(x,y); //设置字符显示的起始地址
for(i=0;i<8;i++) //将一个字节的8个位按位传送出去
OLED_WR_Byte(F8X16[c*16+i],OLED_DATA); //F8X16是取字模的数组,这个传送方式要看具体的取模方式
OLED_Set_Pos(x,y+1); //向下移动一个地址页page
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
/*设置地址OLED_Set_Pos中的纵轴方向设置,下面手册中命令可以看出*/
OLED_WR_Byte(0xb0+y,OLED_CMD);
El modo específico establecido aquí, el segundo dígito hexadecimal indica la página ingresada
El proceso de escritura de bytes del código anterior se muestra en la siguiente figura, F8X16[c*16+i] , donde c*16 es un carácter que ocupa 16 bytes, por lo que se obtiene el índice de caracteres y se requieren 16 bytes en un carácter. Se envía por bytes, por lo que hay un desplazamiento i . Una vez transferidos los 8 bytes de datos actuales, es necesario cambiar la página en el controlador. La función de **OLED_Set_Pos(x,y+1);** no es solo cambiar una línea, sino cambiar la línea en bytes, es decir, cambiar la página.
Transferencia de cuerdas
//实际上就是将字符串看作指针,对每个字符遍历显示,直到最后一位
void OLED_ShowString(u8 x,u8 y,u8 *chr)
{
unsigned char j=0;
while (chr[j]!='\0')
{
OLED_ShowChar(x,y,chr[j]);
x+=8; //每个字符横向占8个位
//到屏幕最右边若不够放下一个字符,会跳转到下一行显示,y+=2是因为,一个字符高度是两个字节
if(x>120){
x=0;y+=2;}
j++;
}
}
sentimientos y percepciones personales
En general, parece que hay muchos comandos. Pero sigue siendo muy conveniente inicializar de acuerdo con la introducción del manual.
Es importante revisar la hoja de datos. La visualización normal de la pantalla requiere una comprensión clara del módulo de hardware y los métodos de escritura de datos basados en software .
La visualización de la pantalla depende en gran medida del método de modulación de caracteres o imágenes y del método de cableado real del hardware.
Hay dos formas de controlar al conductor: comandos entrantes o datos. El juicio de los comandos o datos entrantes se controla dándole a la pantalla un pin con niveles alto y bajo.