You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

373 lines
15 KiB

  1. # Diseño y uso de LCD (NDH-C0216CZ-FSW-FBW-3V3) mediante comunicación SPI, para microcontroladores MSP430
  2. Galván.A, Chávez.G, Diciembre,2022.
  3. [^] : (Chip-on-Glass) Liquid Crystal Display Module para MSP430
  4. ------
  5. #### Abstract
  6. The main objective of this manual is to explain the operation of the UPVERTER program, to make a connection circuit for the LCD screen NDH-C0216CZ-FSW-FBW-3V3 conditioned to connect it to any external device such as an msp430 through spi communication.
  7. [TOC]
  8. #### Introducción
  9. El diseño de circuitos en la actualidad cada vez a mejorado tratando de facilitar el manejo de estos programas mediante diversos beneficios como lo es UPVERTER la cual es un sitio web que permite el diseño, simulación y producción de productos electrónicos con un funcionamiento en cloud (en la nube), es por ello que al brindar dichas facilidades se implemento este programa para el diseño del PCB de la LCD.
  10. La SPI fue desarrollada por Motorola (Ahora parte de NXP semiconductors) aproximadamente en 1985. Y esta trata de una interfaz sincrona prevista para la comunicación entre dispositivos a corta distancia.
  11. El SPI cuenta con varias ventajas como lo son la interfaz direccionada de hardware simple que ofrece completa flexibilidad para la cantidad de bits transferidos.
  12. Usa un modelo de maestro- esclavo con un maestro simple y puede manejar varios dispositivos secundarios usando comunicaciones dúplex que operan a velocidades de reloj de hasta 50 MHz.
  13. No usa protocolo estándar y transfiere solo paquetes de datos, lo que la hace ideal para transferir flujos de datos largos.
  14. **SPI usa un máximo de cuatro líneas de señal.**
  15. El dispositivo maestro, (por lo general un controlador o un procesador), suministra y controla el reloj **SCK** y la linea de selección de chip **CS** .
  16. La operación multiplexor completa se maneja a traves de las lineas de datos Master Out In **MOSI** y Master In Slave Out **MISO**.
  17. Cada esclavo dispone de una entrada SS que le permite ser seleccionado por el maestro. Una vez que se seleccione como esclavo, la conversión puede empezar entre los dos.
  18. Puede haber esclavos en una comunicación SPI siempre que el microcontrolador maestro disponga de conectores de salida digital.
  19. ![sip.png](https://i.postimg.cc/z3ZhTMr7/sip.png)
  20. El bus SPI esta formado por cuatro cables y el cable SCLK, que gestiona la señal de reloj. Esta señal la emite la emite el maestro .
  21. Antes de seguir explicando es necesario ver las características presentadas por los desarrolladores de la LCD para empezar con el diseño de la PCB.
  22. ### Diseño de PCB para LCD.
  23. #### Funciónes y caracteristicas
  24. - 2 lineas x 16 caracteres
  25. - 4 linea de interfaz serial
  26. - controlador integrado (ST7032)
  27. - 1/6 duty , 1/5 vias
  28. - 5x8 puntos con cursor
  29. #### Dimensiones de Pantalla
  30. Para un diseño del circuito primero se tiene que tener en cuenta las dimensiones de la pantalla, para que este se adecue a la placa.
  31. ![esquematico-LCDd.png](https://i.postimg.cc/0yNzXNp7/esquematico-LCDd.png)
  32. [^]: Datos recopilados y adaptados de *NEWHAVEN DISPLAY* .
  33. #### Esquematico de conexión
  34. A continuación se muestran las conexiones que se deben realizar para que la pantalla LCD funcione correctamente.
  35. ![esquematico1.png](https://i.postimg.cc/R0fV2xyS/esquematico1.png)
  36. [^]: Los valores recomendados de los capacitores son 1µF en VDD oVSS, 0.47µF-2.2µF en los pines P9 y P10 y una resistencia de 10 Ohms.
  37. #### Distribución de pines
  38. | Noº | Pines de Pantalla | Descripción |
  39. | ---- | :---------------- | ------------------------------------------------------------ |
  40. | 1 | RST | Activa la señal de reset |
  41. | 2 | RS | Señal de selección de registro RS=0 instracción , RS=1 datos |
  42. | 3 | CSB | Señal de selección de chip LOW |
  43. | 4 | SCL | Señal de reloj |
  44. | 5 | SI | Datos de entrada |
  45. | 6 | VSS | Ground |
  46. | 7 | VDD | Suministro de energia |
  47. | 8 | VOUT | DC/DC convertidor de voltaje |
  48. | 9 | C1+ | Anodo 3.0v |
  49. | 10 | C1- | Catodo Ground |
  50. #### Conexión de pines MPU
  51. | Noª | Pines MPU |
  52. | ---- | --------- |
  53. | 1 | VSS |
  54. | 2 | VDD |
  55. | 3 | SI |
  56. | 4 | SCL |
  57. | 5 | CSB |
  58. | 6 | RS |
  59. | 7 | RST |
  60. Tomando en cuenta las dimensiones que presentan los pines de la LCD explicadas en la siguiente imagen.
  61. ![dimLCD.png](https://i.postimg.cc/FHj7yBVC/dimLCD.png)
  62. | Tabla de dimenciones de pines de LCD | Medidas |
  63. | ------------------------------------ | ------------- |
  64. | Diametro | 0.5mm a 0.7mm |
  65. | Distancia entre pines | 1.5mm |
  66. | Distancia total del pin 10 al 1 | 13.5mm |
  67. | Anodo y catodo | Medidas |
  68. | ----------------------------- | ------- |
  69. | Distancia entre A y K | 34.6mm |
  70. | Distancia entre A y pin | 13.95mm |
  71. | Distancia desde la mitad A x | 3.4mm |
  72. | Distancia entre mitad de A y | 2.5mm |
  73. | Largo de pin | 2mm |
  74. | Ancho de pin | 1mm |
  75. ## Diseño de conexión
  76. Para el diseño del circuito se utilizo el programa UPVERTER, para ello, en la siguiente imagen se muestra un diseño simple para un diseño de la placa PCB.
  77. Para crear un nuevo componente en UPVERTER es necesario dirigirse a la esquina superior derecha y dar clic en la pestaña de **Create** después se desplegara un menú donde dará la opción de **Create New Part** como se muestra en la siguiente imagen.
  78. ![](https://i.postimg.cc/tJxZCHck/up1.png)
  79. Una vez dentro de la pestalla para crear un nuevo componete se tiene varios iconos para dar forma al nuevo componente.
  80. #### Symbol
  81. ![up2.png](https://i.postimg.cc/zG6BtfGf/up2.png)
  82. ##### Explicación de iconos.
  83. 1. El primer icono sirve para seleccionar y mover el componente.
  84. 2. En caso de realizar algún símbolo existente con este icono podrás cargar uno determinado.
  85. 3. Dibuja forma del componente
  86. 4. genera el pin
  87. 5. agregar pin
  88. 6. desplazarse sobre la pantalla.
  89. Como se muestra en el ejemplo de la figura anterior solo se agrego dos pines y se delimito el espacio del componente ya que solo se esta generando un breve ejemplo de un pin para conexión de voltaje positivo y negativo.
  90. En la pestaña de la parte derecha se visualiza un menú en donde nos dirigiremos a **PINS** para posteriormente dar clic en **EDITAR** de modo que se desplegara la siguiente ventana.
  91. ![up3.png](https://i.postimg.cc/YCvdQdPW/up3.png)
  92. En dicha ventana se asignaran diferentes parametros para los pines agregados, entre los mas importantes se encuentra **el numero del pin y el nombre del componente,** pues estos son necesarios para asignar a la parte de Footprint.
  93. #### FootPrint
  94. Para asociar el símbolo con el FootPrint es necesario primero agregar un Hole dando clic en el se podrán modificar diferentes aspectos entre ellos asociar el pin con el FootPrint.
  95. ![up4.png](https://i.postimg.cc/Pq2c4C4L/up4.png)
  96. [^]: En este caso se asocio a V+
  97. Para saber cuando los elementos se encuentran asociados se tiene que dirigir al menú que se encuentra desplegado en la parte derecha y dentro de la pestaña ver si el elemento se encuentra asociado.
  98. ![up5.png](https://i.postimg.cc/ZYBbWmbP/up5.png)
  99. > Cuando ambos símbolos se encuentren de color gris, estos indican que el elemento esta asociado correctamente, de no ser así el elemento no se asocio correctamente o no se encuentra asociado aun.
  100. ### Esquemático
  101. ![16681991930000-hd-default.png](https://i.postimg.cc/vmCzNGVv/16681991930000-hd-default.png)
  102. **Falta imagen de footprint de UPVERTER**
  103. --------se esta haciendo la correcion de pcb en UPVERTER---------
  104. El diseño fue impreso al revés ya que se realizo de manera imversa.
  105. **Diseño impreso**
  106. ![finally.png](https://i.postimg.cc/66YBptSh/finally.png)
  107. **Diseño correcto**
  108. ![finally2.png](https://i.postimg.cc/KYMsCDXW/finally2.png)
  109. **Diseño impreso de manera física con conexiones**
  110. ![fanally3.png](https://i.postimg.cc/gj2FZtj7/fanally3.png)
  111. Como se puede apreciar en las especificaciones de la pantalla NHD-C0216CZ-FSW-FBW-3V3, la LCD integra un controlador de matriz de puntos ST7032-0D el cual opera mediante comunicación SPI (3/4 líneas), bus de 4 y 8 bits; por lo que es necesario configurar correctamente este apartado de comunicación para poder transmitir y/o recibir datos correctamente.
  112. Nota: Se recomienda revisar la hoja de datos de la LCD que se va a emplear para saber con certeza qué tipo de interfaz se debe utilizar para la comunicación.
  113. En este caso se configuró la interfaz de comunicación serial eUSCI como modo SPI para enviar datos desde el microcontrolador MSP430FR6989 a la LCD en cuestión. Es decir, se realizó la configuración “Maestro-Esclavo” para que el microcontrolador (maestro) envíe información a la LCD (esclavo).
  114. Configuración de interfaz SPI
  115. Se empleó la interfaz A0 (eUSCI_A0) para la operación del SPI; se configuró en modo maestro de 4 pines 8 bits, síncrono, con un reloj de 500 kHz y envío del primer bit más significativo. La figura muestra la configuración realizada en donde se puede observar de manera más clara los parámetros establecidos.
  116. #### Código implementado para la inilizacion de la pantalla LCD mediante la comunicación SPI.
  117. ```c
  118. #include <msp430fr6989.h>
  119. //GPIO definitions
  120. #define CSBdefinition P1SEL1 |= BIT4 // Configure UCA0STE (slave select)
  121. #define CLKdefinition P1SEL1 |= BIT5 // Configure UCA0CLK
  122. #define SIMOdefinition P2SEL0 |= BIT0 // Configure UCA0SIMO/TXD
  123. //Output configuration
  124. #define DDRP1 P1DIR = 0x78; // 0111 1000
  125. #define DDRP2 P1DIR |= BIT0;
  126. /////////////////////////////////////////
  127. #define RST_0 P1OUT &= ~BIT3
  128. #define RST_1 P1OUT |= BIT3
  129. #define CSB_0 P1OUT &= ~BIT4
  130. #define CSB_1 P1OUT |= BIT4
  131. #define RS_0 P1OUT &= ~BIT6
  132. #define RS_1 P1OUT |= BIT6
  133. #define SI_0 P2OUT &= ~BIT0
  134. #define SI_1 P2OUT |= BIT0
  135. // Global variables
  136. unsigned char text1[] = {"Hi :D "};
  137. unsigned char text2[] = {"It's done! "};
  138. unsigned int position;
  139. //**************************
  140. // MSP430F59xx Demo - eUSCI_A0, SPI 4-Wire Master
  141. //
  142. // Description: SPI master send data to SPI slave using 4-wire mode.
  143. // ACLK = 32.768kHz, MCLK = SMCLK = DCO ~1MHz. BRCLK = ACLK/2
  144. //
  145. //
  146. // MSP430FR6989
  147. // -----------------
  148. // /|\| XIN|-
  149. // | | | 32KHz Crystal
  150. // --|RST XOUT|-
  151. // | |
  152. // | P2.0|-> Data Out (UCA0SIMO)
  153. // | |
  154. // | P1.3|-> RST LCD
  155. // | P1.6|-> RS LCD
  156. // | P1.5|-> Serial Clock Out (UCA0CLK)
  157. // | P1.4|-> Slave Select (UCA0STE)
  158. // | |
  159. //
  160. // William Goh
  161. // Texas Instruments Inc.
  162. // April 2014
  163. // Built with IAR Embedded Workbench V5.60 & Code Composer Studio V6.0
  164. //**************************
  165. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  166. //Function initialization
  167. void initLCD();
  168. void initSPI();
  169. void display();
  170. void wData(unsigned char d);
  171. void wCommand(unsigned char c);
  172. volatile unsigned char TXData;
  173. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  174. void main(void)
  175. {
  176. WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
  177. PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode to activate
  178. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  179. //Pin configuration
  180. CSBdefinition; // Configure UCA0STE (slave select)
  181. CLKdefinition; // Configure UCA0CLK
  182. SIMOdefinition; // Configure UCA0SIMO/TXD
  183. PJSEL0 |= BIT4 | BIT5; // For XT1
  184. DDRP1;
  185. DDRP2;
  186. initSPI();
  187. initLCD();
  188. __delay_cycles(50);
  189. display();
  190. __delay_cycles(50);
  191. while(1){
  192. }
  193. }//main
  194. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  195. void initSPI(void){
  196. // Configure USCI_A0 for SPI operation
  197. UCA0CTLW0 = UCSWRST; // **Put state machine in reset**
  198. UCA0CTLW0 |= UCSSEL__SMCLK; // Choose SMLCK (1MHz)
  199. UCA0BR0 = 0x04;//4 // Set prescaler to 8 to get SCLK=125kHz
  200. UCA0BR1 = 0;
  201. UCA0MCTLW = 0;
  202. // By default -> 4-pin, 8-bit SPI master
  203. UCA0CTLW0 |= UCMST; // Master mode
  204. UCA0CTLW0 |= UCSYNC; // Synchronous mode
  205. UCA0CTLW0 |= UCCKPL; // Clock polarity high
  206. UCA0CTLW0 |= UCMSB; // MSB first (Most Significant Bit)
  207. UCA0CTLW0 |= UCMODE_2; // 4-pin SPI with UCxSTE active high
  208. UCA0CTLW0 |= UCSTEM; // Generate the enable signal for a 4-wire slave
  209. UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
  210. UCA0IE |= UCTXIE; // Enable USCI_A0 TX interrupt
  211. UCA0IFG &= ~UCTXIFG;
  212. }
  213. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  214. //Initialize the LCD
  215. void initLCD(){
  216. RST_0; //reset
  217. __delay_cycles(2);
  218. RST_1; //end reset
  219. __delay_cycles(20);
  220. wCommand(0x30); //wake up
  221. __delay_cycles(2);
  222. wCommand(0x30); //wake up
  223. wCommand(0x30); //wake up
  224. wCommand(0x39); //function set
  225. wCommand(0x14); //internal osc frequency
  226. wCommand(0x56); //power control
  227. wCommand(0x6D); //follower control
  228. wCommand(0x70); //contrast
  229. wCommand(0x0C); //display on
  230. wCommand(0x06); //entry mode
  231. wCommand(0x01); //clear
  232. __delay_cycles(100);
  233. }
  234. void wCommand(unsigned char c){
  235. CSB_0; //CSB active
  236. RS_0; //Command/Instruction
  237. UCA0TXBUF = c;
  238. CSB_1; //CSB disabled
  239. __delay_cycles(200);
  240. }
  241. void wData(unsigned char d){
  242. CSB_0; //CSB active
  243. RS_1; //Data
  244. UCA0TXBUF = d;
  245. CSB_1; //CSB disabled
  246. }
  247. void display(){
  248. int a;
  249. wCommand(0x80);
  250. for(a=0; a<16; a++){
  251. wData(text1[a]);
  252. }
  253. wCommand(0xC0);
  254. for(a=0; a<16; a++){
  255. wData(text2[a]);
  256. }
  257. }
  258. ```
  259. > El código fue basado tanto como en los códigos propuestos para la inilización de la pantalla Newhaven Display International, así como en ejemplos proporcionados por Texas Instruments para la comunicación SPI.
  260. ### Referencias
  261. [1] Newhaven Display International. Inc, NHD-C0216CZ-FSW-FBW-3V3 COG (Chip-on-Glass) Liquid Crystal Display Module.