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.

439 lines
19 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. # Diseño de PCB para LCD NHD-C0216CZ-FSW-FBW-3V3 y uso mediante comunicación SPI empleando un microcontrolador 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 show the process of making the PCB design for the LCD implementing UPVERTER program to built the circuit required for the LCD screen NDH-C0216CZ-FSW-FBW-3V3. It will also be explained how it works the connection between the LCD and the target device such as an msp430 microcontroller through SPI communication.
  7. [TOC]
  8. #### Introducción
  9. El diseño de circuitos impresos (PCBs) es bastante útil y ha ido mejorando conforme pasa el tiempo. Gracias a softwares de diseño, el trabajo se ha facilitado; en este caso se implementó LibrePCB para el primer diseño [2] y UPVERTER para realizar el diseño final del PCB.
  10. Además del diseño de PCBs, es bastante importante la comunicación entre dispositivos; en este caso, se usará una comunicación SPI para enviar información desde el microcontrolador **MSP430FR6989** a la LCD.
  11. La comunicación 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.
  12. Este tipo de comunicación cuenta con varias ventajas como lo son la interfaz direccionada de hardware simple que ofrece completa flexibilidad para la cantidad de bits transferidos [3].
  13. Existen varios tipos de configuraciones cuando se implementa comunicación SPI; no obstante, para este trabajo se usa un modelo maestro-esclavo, siendo el microcontrolador MSP430FR6989 el maestro y la LCD el esclavo.
  14. Este tipo de comunicación usa tres o cuatro líneas de señal para poder hacer la transmisión y/o recepción de información con los dispositivos que estén conectados.
  15. **SPI usa un máximo de cuatro líneas de señal.**
  16. El dispositivo que funge como maestro, (por lo general un controlador o un procesador), suministra y controla el reloj ***SCLK*** y la linea de selección de chip ***CS***.
  17. La operación completa de multiplexor se maneja a través de las lineas de datos Master Out Slave In ***MOSI*** y Master In Slave Out ***MISO***.
  18. Cada esclavo dispone de una entrada SS que le permite ser seleccionado por el maestro. Una vez que se selecciona como esclavo, la comunicación puede empezar entre los dos.
  19. Puede haber esclavos en una comunicación SPI siempre que el microcontrolador maestro disponga de conectores de salida digital.
  20. ![sip.png](https://i.postimg.cc/z3ZhTMr7/sip.png)
  21. **Conexión SPI recuperada de [2]**
  22. 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 .
  23. 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.
  24. ------
  25. ### Lista de materiales.
  26. - 1 LCD NHD-C0216CZ-FSW-FBW-3V3
  27. [LINK]: https://newhavendisplay.com/2x16-character-cog-lcd-fstn-display-with-side-white-backlight-3-3v/ "Pantalla LCD"
  28. - 1 Microcontrolador MSP430FR6989
  29. [LINK]: https://www.ti.com/tool/MSP-EXP430FR6989?keyMatch=MSP-EXP430FR6989%20LAUNCHPAD%20DEVELOPMENT%20KIT "Microcontrolador TI"
  30. - 1 Resistencia de 220 Ohms
  31. - 1 Resistencia de 180 Ohms
  32. - 1 Resistencia de 100 Ohms
  33. - 3 jumpers
  34. [LINK]: https://www.electronica60norte.com/producto/jumper-para-pines-macho "Jumpers"
  35. - 1capacitores de 1µF
  36. - 1 capacitor de 0.47µF-2.2µF
  37. - 1 diodo 1N34A
  38. [DiLINK]: https://articulo.mercadolibre.com.mx/MLM-803309950-set-5pz-diodo-germanio-1n34a-65v-500ma-genuinos-itt-_JM?matt_tool=91188883&matt_word=&matt_source=google&matt_campaign_id=15698047816&matt_ad_group_id=143431914600&matt_match_type=&matt_network=g&matt_device=c&matt_creative=620253690479&matt_keyword=&matt_ad_position=&matt_ad_type=pla&matt_merchant_id=123849863&matt_product_id=MLM803309950&matt_product_partition_id=1638503335577&matt_target_id=pla-1638503335577&gclid=CjwKCAiAoL6eBhA3EiwAXDom5nsjCrCxhHtzpArJXs-A0Ulgv33Tuy87OMwgecTjlAUTKI0cp_2yYxoCd5cQAvD_BwE "Diodo 1N34A "
  39. - 1 Resistencia de 120 Ohms
  40. ------
  41. ### Diseño de PCB para LCD.
  42. #### Funciones y características
  43. - 2 lineas x 16 caracteres
  44. - 4 linea de interfaz serial
  45. - Controlador/Driver integrado (ST7032)
  46. - 1/6 duty , 1/5 vias
  47. - 5x8 puntos con cursor
  48. #### Dimensiones de Pantalla
  49. 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.
  50. ![esquematico-LCDd.png](https://i.postimg.cc/0yNzXNp7/esquematico-LCDd.png)
  51. **Datos recopilados y adaptados de *NEWHAVEN DISPLAY*.**
  52. #### Esquemático de conexión
  53. A continuación se muestran las conexiones que se deben realizar para que la pantalla LCD funcione correctamente.
  54. ![esquematico1.png](https://i.postimg.cc/R0fV2xyS/esquematico1.png)
  55. > **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.**
  56. #### Distribución de pines
  57. | Noº | Pines de Pantalla | Descripción |
  58. | ---- | :---------------- | ------------------------------------------------------------ |
  59. | 1 | RST | Activa la señal de reset |
  60. | 2 | RS | Señal de selección de registro RS=0 instrucción , RS=1 datos |
  61. | 3 | CSB | Señal de selección de chip LOW |
  62. | 4 | SCL | Señal de reloj |
  63. | 5 | SI | Datos de entrada |
  64. | 6 | VSS | Ground |
  65. | 7 | VDD | Suministro de energía |
  66. | 8 | VOUT | DC/DC convertidor de voltaje |
  67. | 9 | C1+ | Anodo 3.0v |
  68. | 10 | C1- | Catodo Ground |
  69. #### Conexión de pines MPU
  70. | Noª | Pines MPU |
  71. | ---- | --------- |
  72. | 1 | VSS |
  73. | 2 | VDD |
  74. | 3 | SI |
  75. | 4 | SCL |
  76. | 5 | CSB |
  77. | 6 | RS |
  78. | 7 | RST |
  79. Tomando en cuenta las dimensiones que presentan los pines de la LCD explicadas en la siguiente imagen.
  80. ![dimLCD.png](https://i.postimg.cc/FHj7yBVC/dimLCD.png)
  81. | Tabla de dimensiones de pines de LCD | Medidas |
  82. | ------------------------------------ | ------------- |
  83. | Diámetro | 0.5mm a 0.7mm |
  84. | Distancia entre pines | 1.5mm |
  85. | Distancia total del pin 10 al 1 | 13.5mm |
  86. | Ánodo y cátodo | Medidas |
  87. | ----------------------------- | ------- |
  88. | Distancia entre A y K | 34.6mm |
  89. | Distancia entre A y pin | 13.95mm |
  90. | Distancia desde la mitad A x | 3.4mm |
  91. | Distancia entre mitad de A y | 2.5mm |
  92. | Largo de pin | 2mm |
  93. | Ancho de pin | 1mm |
  94. ### Diseño de conexión
  95. 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.
  96. 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.
  97. ![](https://i.postimg.cc/tJxZCHck/up1.png)
  98. Una vez dentro de la pestaña para crear un nuevo componente se tienen varios iconos para dar forma al nuevo componente.
  99. #### Symbol
  100. ![up2.png](https://i.postimg.cc/zG6BtfGf/up2.png)
  101. ##### Explicación de iconos.
  102. 1. El primer icono sirve para seleccionar y mover el componente.
  103. 2. En caso de realizar algún símbolo existente con este icono podrás cargar uno determinado.
  104. 3. Dibuja forma del componente.
  105. 4. Genera el pin.
  106. 5. Agregar pin.
  107. 6. Desplazarse sobre la pantalla.
  108. Como se muestra en el ejemplo de la figura anterior solo se agregaron dos pines y se delimitó el espacio del componente ya que solo se esta generando un breve ejemplo de un pin para conexión de voltaje positivo y negativo.
  109. En la pestaña de la parte derecha se visualiza un menú en donde nos dirigiremos a **PINS** para posteriormente dar clic en **EDITAR** lo cual despliega la siguiente ventana.
  110. ![up3.png](https://i.postimg.cc/YCvdQdPW/up3.png)
  111. En dicha ventana se asignarán diferentes parámetros para los pines agregados, entre los más importantes se encuentra el número del pin y el nombre del componente, pues estos son necesarios para asignar a la parte de Footprint.
  112. #### FootPrint
  113. 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.
  114. ![up4.png](https://i.postimg.cc/Pq2c4C4L/up4.png)
  115. **En este caso se asocio a V+**
  116. 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.
  117. ![up5.png](https://i.postimg.cc/ZYBbWmbP/up5.png)
  118. > 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 asoció correctamente o aún no se encuentra asociado.
  119. ### SCHEMATHIC en el programa UPVERTER
  120. ![16681991930000-hd-default.png](https://i.postimg.cc/vmCzNGVv/16681991930000-hd-default.png)
  121. > **El diseño se adaptó a las necesidades que se presentaron a lo largo de los diferentes diseños propuestos.**
  122. Por ello, el diseño final presenta variantes como lo es la integración de resistencias para controlar la intensidad de la LCD seleccionando diferentes valores de resistencias mediante Jumppers.
  123. Otra modificación que se realizó fue la adición de un diodo de silicio y una resistencia colocadas en serie a la entrada de voltaje para evitar que la pantalla se dañe en caso de invertir a polaridad al momento de conectar.
  124. #### FOOTPRINT en programa UPVERTER
  125. **El diseño fue impreso al revés ya que se realizo de manera inversa.**
  126. ![Captura-desde-2022-12-13-10-22-29.png](https://i.postimg.cc/yxj6JkQS/Captura-desde-2022-12-13-10-22-29.png)
  127. > **La imagen anterior muestra la vista frontal del circuito propuesto para la pantalla LCD.**
  128. **Diseño correcto vista bottom**
  129. El diseño que se imprimió inicialmente tuvo varios problemas previo al maquinado, pues este se realizó de manera inversa sin tomar en cuenta que el archivo se estaba realizando en la capa Bottom, de modo que el diseño correcto es el siguiente.
  130. ![finally2.png](https://i.postimg.cc/KYMsCDXW/finally2.png)
  131. #### Diseño final de PCB impreso parte frontal
  132. ![Whats-App-Image-2022-12-13-at-10-00-40-AM.jpg](https://i.postimg.cc/2STtPCsS/Whats-App-Image-2022-12-13-at-10-00-40-AM.jpg)
  133. > **Diseño parte frontal circuito impreso. **
  134. ![Whats-App-Image-2022-12-13-at-10-42-08-AM.jpg](https://i.postimg.cc/4xxSzmdQ/Whats-App-Image-2022-12-13-at-10-42-08-AM.jpg)
  135. > **Parte trasera de circuito impreso.**
  136. 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.
  137. 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.
  138. 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).
  139. Configuración de interfaz SPI
  140. 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.
  141. ### Código implementado para la inilización de la pantalla LCD mediante la comunicación SPI.
  142. ```c
  143. #include <msp430fr6989.h>
  144. //GPIO definitions
  145. #define CSBdefinition P1SEL1 |= BIT4 // Configure UCA0STE (slave select)
  146. #define CLKdefinition P1SEL1 |= BIT5 // Configure UCA0CLK
  147. #define SIMOdefinition P2SEL0 |= BIT0 // Configure UCA0SIMO/TXD
  148. //Output configuration
  149. #define DDRP1 P1DIR = 0x78; // 0111 1000
  150. #define DDRP2 P1DIR |= BIT0;
  151. /////////////////////////////////////////
  152. #define RST_0 P1OUT &= ~BIT3
  153. #define RST_1 P1OUT |= BIT3
  154. #define CSB_0 P1OUT &= ~BIT4
  155. #define CSB_1 P1OUT |= BIT4
  156. #define RS_0 P1OUT &= ~BIT6
  157. #define RS_1 P1OUT |= BIT6
  158. #define SI_0 P2OUT &= ~BIT0
  159. #define SI_1 P2OUT |= BIT0
  160. // Global variables
  161. unsigned char text1[] = {"Hi :D "};
  162. unsigned char text2[] = {"It's done! "};
  163. unsigned int position;
  164. //**************************
  165. // MSP430F59xx Demo - eUSCI_A0, SPI 4-Wire Master
  166. //
  167. // Description: SPI master send data to SPI slave using 4-wire mode.
  168. // ACLK = 32.768kHz, MCLK = SMCLK = DCO ~1MHz. BRCLK = ACLK/2
  169. //
  170. //
  171. // MSP430FR6989
  172. // -----------------
  173. // /|\| XIN|-
  174. // | | | 32KHz Crystal
  175. // --|RST XOUT|-
  176. // | |
  177. // | P2.0|-> Data Out (UCA0SIMO)
  178. // | |
  179. // | P1.3|-> RST LCD
  180. // | P1.6|-> RS LCD
  181. // | P1.5|-> Serial Clock Out (UCA0CLK)
  182. // | P1.4|-> Slave Select (UCA0STE)
  183. // | |
  184. //
  185. // William Goh
  186. // Texas Instruments Inc.
  187. // April 2014
  188. // Built with IAR Embedded Workbench V5.60 & Code Composer Studio V6.0
  189. //**************************
  190. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  191. //Function initialization
  192. void initLCD();
  193. void initSPI();
  194. void display();
  195. void wData(unsigned char d);
  196. void wCommand(unsigned char c);
  197. volatile unsigned char TXData;
  198. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  199. void main(void)
  200. {
  201. WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
  202. PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode to activate
  203. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  204. //Pin configuration
  205. CSBdefinition; // Configure UCA0STE (slave select)
  206. CLKdefinition; // Configure UCA0CLK
  207. SIMOdefinition; // Configure UCA0SIMO/TXD
  208. PJSEL0 |= BIT4 | BIT5; // For XT1
  209. DDRP1;
  210. DDRP2;
  211. initSPI();
  212. initLCD();
  213. __delay_cycles(50);
  214. display();
  215. __delay_cycles(50);
  216. while(1){
  217. }
  218. }//main
  219. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  220. void initSPI(void){
  221. // Configure USCI_A0 for SPI operation
  222. UCA0CTLW0 = UCSWRST; // **Put state machine in reset**
  223. UCA0CTLW0 |= UCSSEL__SMCLK; // Choose SMLCK (1MHz)
  224. UCA0BR0 = 0x04;//4 // Set prescaler to 8 to get SCLK=125kHz
  225. UCA0BR1 = 0;
  226. UCA0MCTLW = 0;
  227. // By default -> 4-pin, 8-bit SPI master
  228. UCA0CTLW0 |= UCMST; // Master mode
  229. UCA0CTLW0 |= UCSYNC; // Synchronous mode
  230. UCA0CTLW0 |= UCCKPL; // Clock polarity high
  231. UCA0CTLW0 |= UCMSB; // MSB first (Most Significant Bit)
  232. UCA0CTLW0 |= UCMODE_2; // 4-pin SPI with UCxSTE active high
  233. UCA0CTLW0 |= UCSTEM; // Generate the enable signal for a 4-wire slave
  234. UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
  235. UCA0IE |= UCTXIE; // Enable USCI_A0 TX interrupt
  236. UCA0IFG &= ~UCTXIFG;
  237. }
  238. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  239. //Initialize the LCD
  240. void initLCD(){
  241. RST_0; //reset
  242. __delay_cycles(2);
  243. RST_1; //end reset
  244. __delay_cycles(20);
  245. wCommand(0x30); //wake up
  246. __delay_cycles(2);
  247. wCommand(0x30); //wake up
  248. wCommand(0x30); //wake up
  249. wCommand(0x39); //function set
  250. wCommand(0x14); //internal osc frequency
  251. wCommand(0x56); //power control
  252. wCommand(0x6D); //follower control
  253. wCommand(0x70); //contrast
  254. wCommand(0x0C); //display on
  255. wCommand(0x06); //entry mode
  256. wCommand(0x01); //clear
  257. __delay_cycles(100);
  258. }
  259. void wCommand(unsigned char c){
  260. CSB_0; //CSB active
  261. RS_0; //Command/Instruction
  262. UCA0TXBUF = c;
  263. CSB_1; //CSB disabled
  264. __delay_cycles(200);
  265. }
  266. void wData(unsigned char d){
  267. CSB_0; //CSB active
  268. RS_1; //Data
  269. UCA0TXBUF = d;
  270. CSB_1; //CSB disabled
  271. }
  272. void display(){
  273. int a;
  274. wCommand(0x80);
  275. for(a=0; a<16; a++){
  276. wData(text1[a]);
  277. }
  278. wCommand(0xC0);
  279. for(a=0; a<16; a++){
  280. wData(text2[a]);
  281. }
  282. }
  283. ```
  284. > El código se realizó con base en el código y manuales propuestos por el fabricante de la pantalla (Newhaven Display International), así como en ejemplos proporcionados por Texas Instruments para la comunicación SPI.
  285. ### Referencias
  286. [1] Newhaven Display International. Inc, NHD-C0216CZ-FSW-FBW-3V3 COG (Chip-on-Glass) Liquid Crystal Display Module.
  287. [LINK]: https://newhavendisplay.com/content/specs/NHD-C0216CZ-FSW-FBW-3V3.pdf "PDF "
  288. [2] Galvan,A Chávez ,G Diseño de placa para pantalla NHD-C0216CZ-FSW-FBW-3V3, Repositorio de primer diseño.
  289. [LINK ]: http://gmarxcc.com:8088/MSP430/LCD-NHD-SPI "Repositorio"
  290. [3] Control automático educación, Comunicación SPI con PIC Microcontroladores.
  291. [LINK]: https://controlautomaticoeducacion.com/microcontroladores-pic/comunicacion-spi/