Prueba todas las maneras de configurar una pantalla LCD alfanumérica

Dependencies:   FRDM_TSI TextLCD mbed

Committer:
Antulius
Date:
Wed May 08 07:39:20 2019 +0000
Revision:
8:39219ab1efd9
Parent:
7:af295ac5f904

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Antulius 6:333a2763ad29 1 /* ###########################################################################
Antulius 6:333a2763ad29 2 ** Archivo : main.c
Antulius 8:39219ab1efd9 3 ** Proyecto : FRDM-KL46Z_LCD_Test
Antulius 6:333a2763ad29 4 ** Procesador : MKL46Z256VLL4
Antulius 6:333a2763ad29 5 ** Herramienta : Mbed
Antulius 6:333a2763ad29 6 ** Version : Driver 01.01
Antulius 6:333a2763ad29 7 ** Compilador : GNU C Compiler
Antulius 6:333a2763ad29 8 ** Fecha/Hora : 14-07-2015, 11:48, # CodeGen: 0
Antulius 6:333a2763ad29 9 ** Descripción :
Antulius 6:333a2763ad29 10 ** Este proyecto hace...
Antulius 6:333a2763ad29 11 ** This module contains user's application code.
Antulius 6:333a2763ad29 12 ** Componentes : GPIO, Timer, etc .
Antulius 6:333a2763ad29 13 ** Configuraciones : Includes, Stacks y Drivers externos
Antulius 6:333a2763ad29 14 ** Autores :
Antulius 6:333a2763ad29 15 ** ATEAM Development Group:
Antulius 6:333a2763ad29 16 ** - Antulio Morgado Valle
Antulius 6:333a2763ad29 17 **
Antulius 6:333a2763ad29 18 ** Versión : Beta
Antulius 6:333a2763ad29 19 ** Revisión : A
Antulius 6:333a2763ad29 20 ** Release : 0
Antulius 8:39219ab1efd9 21 ** Date : 20/10/2019
Antulius 6:333a2763ad29 22 ** Bugs & Fixes :
Antulius 6:333a2763ad29 23 ** Added support for Led_RGB
Antulius 6:333a2763ad29 24 ** 22/09/2018
Antulius 6:333a2763ad29 25 ** Added LCD Menu, Beta version (with bugs)
Antulius 6:333a2763ad29 26 **
Antulius 6:333a2763ad29 27 ** ###########################################################################*/
Antulius 6:333a2763ad29 28 /*
Antulius 6:333a2763ad29 29 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 6:333a2763ad29 30 : Includes
Antulius 6:333a2763ad29 31 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 6:333a2763ad29 32 */
emilmont 0:0f00f07ebde0 33 #include "mbed.h"
Antulius 8:39219ab1efd9 34 #include "I2C.h"
Antulius 8:39219ab1efd9 35 #include "SPI.h"
Antulius 8:39219ab1efd9 36 #include "Serial.h"
Antulius 8:39219ab1efd9 37 #include "TextLCD.h"
Antulius 8:39219ab1efd9 38 #include "stdio.h"
Antulius 6:333a2763ad29 39 /*
Antulius 6:333a2763ad29 40 :...............................................................................
Antulius 6:333a2763ad29 41 : Definiciones
Antulius 6:333a2763ad29 42 :...............................................................................
Antulius 6:333a2763ad29 43 */
Antulius 8:39219ab1efd9 44 #define Ticker_Rate 1000 // Periodo de interrupción (us)
Antulius 8:39219ab1efd9 45 #define LCD_Filas 4 // Número de Renglones del LCD
Antulius 8:39219ab1efd9 46 #define LCD_Columnas 20 // Número de Caracteres x Renglón del LCD
Antulius 8:39219ab1efd9 47 #define Buzz_On 1 // Estado para Buzzer Encendido
Antulius 8:39219ab1efd9 48 #define Buzz_Off 0 // Estado para Buzzer Apagado
Antulius 8:39219ab1efd9 49 #define on 0 // Estado para botón presionado
Antulius 8:39219ab1efd9 50 #define off 1 // Estado para botón sin presionar
Antulius 8:39219ab1efd9 51 #define hold 2 // Estado para botón mantenido presionado
Antulius 8:39219ab1efd9 52 #define release 3 // Estado para botón al liberarse
Antulius 6:333a2763ad29 53 /*
Antulius 6:333a2763ad29 54 +-------------------------------------------------------------------------------
Antulius 6:333a2763ad29 55 | Configuración de Puertos
Antulius 6:333a2763ad29 56 +-------------------------------------------------------------------------------
Antulius 6:333a2763ad29 57 */
Antulius 8:39219ab1efd9 58 Ticker TimerInt; // Inicializa la Interrupción por Timer
Antulius 8:39219ab1efd9 59 DigitalOut led_monitor(LED2); // Inicializa el LED Monitor
Antulius 8:39219ab1efd9 60 DigitalOut buzzer (PTE31); // Inicializa el Buzzer Piezo Eléctrico
Antulius 8:39219ab1efd9 61 //PwmOut buzzer (PTE31); // PWM Control del Elemento Calefactor
Antulius 8:39219ab1efd9 62 /*
Antulius 8:39219ab1efd9 63 ** -------------------------------------------------------------------
Antulius 8:39219ab1efd9 64 ** Inicialización de los Pines de Funciones Especiales.
Antulius 8:39219ab1efd9 65 ** -------------------------------------------------------------------
Antulius 8:39219ab1efd9 66 */
Antulius 8:39219ab1efd9 67
Antulius 8:39219ab1efd9 68 /*************************************************
Antulius 8:39219ab1efd9 69 * Host PC Communication channels
Antulius 8:39219ab1efd9 70 **************************************************/
Antulius 7:af295ac5f904 71 Serial terminal(USBTX, USBRX); // Inicializa la Comunicación Serial a la PC
Antulius 8:39219ab1efd9 72 //Serial terminal(PTA2,PTA1); // Terminal Serial
Antulius 8:39219ab1efd9 73 //Serial terminal(PTE0, PTE1); // Tx, Rx Using MAX3232 or BlueTooth
Antulius 8:39219ab1efd9 74
Antulius 8:39219ab1efd9 75 /*************************************************
Antulius 8:39219ab1efd9 76 * Bluetooth Communication support
Antulius 8:39219ab1efd9 77 **************************************************
Antulius 8:39219ab1efd9 78 * Initialize the library with the numbers of the interface pins
Antulius 8:39219ab1efd9 79 * Board Freedom FRDM-KL46Z
Antulius 8:39219ab1efd9 80 * IDE Mbed On Line Compiler
Antulius 8:39219ab1efd9 81 ***************************************************/
Antulius 8:39219ab1efd9 82 Serial bluetooth(PTE0, PTE1); // Tx, Rx
Antulius 8:39219ab1efd9 83
Antulius 8:39219ab1efd9 84 /*************************************************
Antulius 8:39219ab1efd9 85 * I2C Communication
Antulius 8:39219ab1efd9 86 **************************************************
Antulius 8:39219ab1efd9 87 * Initialize the library with the numbers of the interface pins
Antulius 8:39219ab1efd9 88 * Board Freedom FRDM-KL46Z
Antulius 8:39219ab1efd9 89 * IDE Mbed On Line Compiler
Antulius 8:39219ab1efd9 90 * LCD I2C PCF8574A
Antulius 8:39219ab1efd9 91 * Pin Board LCD
Antulius 8:39219ab1efd9 92 * I2C_SCL SCL (white) + resistance pull-up 4.7k
Antulius 8:39219ab1efd9 93 * I2C_SDA SDA (blue) + resistance pull-up 4.7k
Antulius 8:39219ab1efd9 94 * 5V 5V (red)
Antulius 8:39219ab1efd9 95 * GND GND (black)
Antulius 8:39219ab1efd9 96 ***************************************************/
Antulius 8:39219ab1efd9 97 //I2C i2c_lcd(PTC2,PTC1); // SDA, SCL
Antulius 8:39219ab1efd9 98
Antulius 8:39219ab1efd9 99 /*************************************************
Antulius 8:39219ab1efd9 100 * SPI Communication
Antulius 8:39219ab1efd9 101 **************************************************
Antulius 8:39219ab1efd9 102 * Initialize the library with the numbers of the interface pins
Antulius 8:39219ab1efd9 103 * Board Freedom FRDM-KL46Z
Antulius 8:39219ab1efd9 104 * IDE Mbed On Line Compiler
Antulius 8:39219ab1efd9 105 * LCD SPI SN74HC595
Antulius 8:39219ab1efd9 106 * Pin Board LCD
Antulius 8:39219ab1efd9 107 * SPI_MOSI SER (white)
Antulius 8:39219ab1efd9 108 * SPI_MISO none (blue)
Antulius 8:39219ab1efd9 109 * SPI_CLK SRCLK
Antulius 8:39219ab1efd9 110 * SPI_PCS RCLK
Antulius 8:39219ab1efd9 111 * 5V 5V (red)
Antulius 8:39219ab1efd9 112 * GND GND (black)
Antulius 8:39219ab1efd9 113 ***************************************************/
Antulius 8:39219ab1efd9 114 SPI spi_lcd(PTD6,PTD7,PTD5,PTD4); // MOSI, MISO, SCLK, SSEL
Antulius 8:39219ab1efd9 115
Antulius 8:39219ab1efd9 116 /*************************************************
Antulius 8:39219ab1efd9 117 * LCD instantiation
Antulius 8:39219ab1efd9 118 **************************************************/
Antulius 8:39219ab1efd9 119 //TextLCD LCD(PTC5, PTC6, PTC8, PTC9, PTC10, PCT11, TextLCD::LCD20x2); // 4bit bus: rs, e, d4-d7
Antulius 8:39219ab1efd9 120 //TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD20x4); // I2C bus, PCF8574A Arduino Shield, LCD Type
Antulius 8:39219ab1efd9 121 TextLCD_SPI lcd(&spi_lcd, PTD4, TextLCD::LCD16x4, TextLCD::HD44780); // SPI bus, SN74595 expander, CS pin, LCD Type
Antulius 8:39219ab1efd9 122
Antulius 6:333a2763ad29 123 /*
Antulius 8:39219ab1efd9 124 ** ===================================================================
Antulius 8:39219ab1efd9 125 ** Variables Globales del Programa
Antulius 8:39219ab1efd9 126 ** ===================================================================
Antulius 6:333a2763ad29 127 */
Antulius 7:af295ac5f904 128 uint16_t Rate=Ticker_Rate/2; // Velocidad de barrido (500us = 0.5ms)
Antulius 7:af295ac5f904 129 uint16_t counter=250; // Cuenta inicial de 250us
Antulius 8:39219ab1efd9 130 int16_t N_Interrupciones; // Contador de Overrunig
Antulius 6:333a2763ad29 131 /*
Antulius 6:333a2763ad29 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 7:af295ac5f904 133 | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
Antulius 6:333a2763ad29 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 6:333a2763ad29 135 */
Antulius 8:39219ab1efd9 136 void setup(void); // Rutina de Inicialización para el Hardware
Antulius 8:39219ab1efd9 137 void Ticker_OnInterrupt(void); // Rutina de Atención para el Ticker
Antulius 8:39219ab1efd9 138 void buzzer_beep(void); // Pitidos del Buzzer
Antulius 8:39219ab1efd9 139 //void I2C_scanner(void); // Busca dispositivos conectados al bus I2C
Antulius 8:39219ab1efd9 140 void test_LCD(void); // Prueba la operación del LCD
Antulius 8:39219ab1efd9 141 void blinking_led(void); // Rutina de Parpadeo del Led monitor
Antulius 6:333a2763ad29 142 /*
Antulius 6:333a2763ad29 143 #===============================================================================
Antulius 6:333a2763ad29 144 |
Antulius 6:333a2763ad29 145 | P R O G R A M A P R I N C I P A L
Antulius 6:333a2763ad29 146 |
Antulius 6:333a2763ad29 147 #===============================================================================
Antulius 6:333a2763ad29 148 */
Antulius 6:333a2763ad29 149 int main()
Antulius 6:333a2763ad29 150 {
Antulius 6:333a2763ad29 151 // Inicialización de variables, puertos e interrupciones
Antulius 8:39219ab1efd9 152 terminal.baud(115200); // Se configura la velocidad de transmisión e inicia la comunicación serial.
Antulius 7:af295ac5f904 153 terminal.printf(" System is Wake Up!.\n\r");
Antulius 8:39219ab1efd9 154 setup(); //Inicializa el Hardware Principal
Antulius 7:af295ac5f904 155
Antulius 7:af295ac5f904 156 while (true) // El Lazo del Programa principal está aquí !!!
Antulius 6:333a2763ad29 157 {
Antulius 8:39219ab1efd9 158 lcd.cls();
Antulius 8:39219ab1efd9 159 lcd.locate(0,0);
Antulius 8:39219ab1efd9 160 lcd.printf("Bienvenidos Sean"); // El LCD saluda al Mundo
Antulius 8:39219ab1efd9 161 lcd.printf(" a la \n"); // y a la
Antulius 8:39219ab1efd9 162 // lcd.setInvert(on);
Antulius 8:39219ab1efd9 163 lcd.printf("Gloriosa ESIME !\n"); // Gloriosa ESIME !
Antulius 8:39219ab1efd9 164 // lcd.setInvert(off);
Antulius 8:39219ab1efd9 165 lcd.locate(0,4);
Antulius 8:39219ab1efd9 166 lcd.printf("Flashings: %d",N_Interrupciones); // Led Flasings Transcurridos
Antulius 8:39219ab1efd9 167 wait(0.5);
Antulius 8:39219ab1efd9 168
Antulius 8:39219ab1efd9 169 // Blinking_Led(); // Parapadeo del LED por Software
emilmont 0:0f00f07ebde0 170 }
Antulius 6:333a2763ad29 171 }
Antulius 7:af295ac5f904 172 /* END main */
Antulius 7:af295ac5f904 173
Antulius 7:af295ac5f904 174 /*
Antulius 7:af295ac5f904 175 ................................................................................
Antulius 7:af295ac5f904 176 : Rutinas de los Vectores de Interrupción
Antulius 7:af295ac5f904 177 ................................................................................
Antulius 7:af295ac5f904 178 */
Antulius 8:39219ab1efd9 179 void Ticker_OnInterrupt() // Rutina de Atención al Ticker
Antulius 7:af295ac5f904 180 {
Antulius 7:af295ac5f904 181 counter--; // Aquí va la Rutina de Servicio !
Antulius 7:af295ac5f904 182 if (!counter)
Antulius 7:af295ac5f904 183 {
Antulius 7:af295ac5f904 184 terminal.printf("Counter Finish! \r\n");
Antulius 7:af295ac5f904 185 led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (Toggle the LED)
Antulius 8:39219ab1efd9 186 N_Interrupciones++;
Antulius 7:af295ac5f904 187 counter = Rate; // Restablece el contador
Antulius 8:39219ab1efd9 188 }
Antulius 7:af295ac5f904 189 }
Antulius 7:af295ac5f904 190 /* END Events */
Antulius 7:af295ac5f904 191 /*
Antulius 7:af295ac5f904 192 ________________________________________________________________________________
Antulius 7:af295ac5f904 193 |
Antulius 7:af295ac5f904 194 | Funciones Prototipo
Antulius 7:af295ac5f904 195 |_______________________________________________________________________________
Antulius 7:af295ac5f904 196 */
Antulius 7:af295ac5f904 197 // Las Funciones Prototipo van aquí !
Antulius 8:39219ab1efd9 198 void setup() // Inicialización del Hardware del Sistema
Antulius 8:39219ab1efd9 199 {
Antulius 8:39219ab1efd9 200 /* Inicia la comunicación la Terminal */ /* 115200 Bauds, 8 bits, 1 stop, N parity */
Antulius 8:39219ab1efd9 201 terminal.baud(115200); // Se inicia la comunicación serial.
Antulius 8:39219ab1efd9 202 terminal.printf(" System is Wake Up!.\n\r");
Antulius 8:39219ab1efd9 203
Antulius 8:39219ab1efd9 204 /* Inicialización del Bluetooth */
Antulius 8:39219ab1efd9 205 bluetooth.baud(115200); // Se inicia la comunicación Bluetooth.
Antulius 8:39219ab1efd9 206 // bluetooth.scanf("%s", buf); //Lee un carácter desde el Bluetooth
Antulius 8:39219ab1efd9 207 // bluetooth.printf("recv: %s", buf); //Hace eco al Bluetooth
Antulius 8:39219ab1efd9 208 // terminal.printf("recv: %s\r\n", buf); //Imprime en la Terminal el caracter recibido
Antulius 8:39219ab1efd9 209 bluetooth.printf("Bluetooth Starting OK! ... \n\r");
Antulius 8:39219ab1efd9 210 terminal.printf("Bluetooth Starting OK! ... \n\r");
Antulius 8:39219ab1efd9 211 /* Prueba del Buzzer */
Antulius 8:39219ab1efd9 212 terminal.printf("Testing Buzzer... \n\r");
Antulius 8:39219ab1efd9 213 buzzer_beep();
Antulius 8:39219ab1efd9 214
Antulius 8:39219ab1efd9 215 /* Configufración del Display LCD */ /* Mucho OjO !!! */
Antulius 8:39219ab1efd9 216
Antulius 8:39219ab1efd9 217 /* LCD Utilizando el SPI */
Antulius 8:39219ab1efd9 218 spi_lcd.frequency(1000000); // Frecuencia de operación para el SPI
Antulius 8:39219ab1efd9 219 spi_lcd.format(8,0); // Modo de Operación para el SPI
Antulius 8:39219ab1efd9 220
Antulius 8:39219ab1efd9 221 /* LCD Utilizando el I2C */
Antulius 8:39219ab1efd9 222 // I2C_scanner(); // Busca Dispositivos I2C conectados al Bus
Antulius 8:39219ab1efd9 223 /* i2c_lcd.frequency(100000); // Frecuencia de operación para el I2C (100KHz)
Antulius 8:39219ab1efd9 224 i2c_lcd.start(); // Inicio de operación para el I2C
Antulius 8:39219ab1efd9 225 // lcd.setBacklight(LightOn ); // Enciende la luz de fondo del LCD
Antulius 8:39219ab1efd9 226 terminal.printf("I2C Initialized...\n\r");
Antulius 8:39219ab1efd9 227 */
Antulius 8:39219ab1efd9 228 /* Prueba de operación del LCD */
Antulius 8:39219ab1efd9 229 terminal.printf("LCD Test, please wait...\n\r");
Antulius 8:39219ab1efd9 230 test_LCD(); // Rutina de pueba del LCD
Antulius 8:39219ab1efd9 231 terminal.printf("LCD Initialized Succesfuly...\n\r");
Antulius 8:39219ab1efd9 232 /* Arranque de la interrupción por el Ticker */
Antulius 8:39219ab1efd9 233 terminal.printf("Ticker Starting Now...\n\r");
Antulius 8:39219ab1efd9 234 TimerInt.attach_us(&Ticker_OnInterrupt, Ticker_Rate); // Le asigna el periodo de barrido de 1ms (Ticker_Rate=1000)
Antulius 8:39219ab1efd9 235 }
Antulius 8:39219ab1efd9 236
Antulius 8:39219ab1efd9 237 void test_LCD()
Antulius 8:39219ab1efd9 238 {
Antulius 8:39219ab1efd9 239 lcd.cls();
Antulius 8:39219ab1efd9 240 lcd.printf("Hello World!\n"); // El LCD saluda al Mundo!
Antulius 8:39219ab1efd9 241 lcd.setInvert(on);
Antulius 8:39219ab1efd9 242 lcd.printf("Hola Mundo!\n"); // El LCD saluda al Mundo!
Antulius 8:39219ab1efd9 243 lcd.setInvert(off);
Antulius 8:39219ab1efd9 244 lcd.printf("Ciao Mondo!\n"); // El LCD saluda al Mundo!
Antulius 8:39219ab1efd9 245 lcd.setInvert(on);
Antulius 8:39219ab1efd9 246 lcd.printf("Bonjour le Monde"); // El LCD saluda al Mundo!
Antulius 8:39219ab1efd9 247 wait(10);
Antulius 8:39219ab1efd9 248 lcd.cls(); // Limpia el Display LCD
Antulius 8:39219ab1efd9 249 lcd.setBacklight(TextLCD::LightOff); // Apaga la Iluminación de Fondo
Antulius 8:39219ab1efd9 250 Timer Elpased_Time; //Inicializa el Tiempo a Transcurrir
Antulius 8:39219ab1efd9 251 Elpased_Time.start();
Antulius 8:39219ab1efd9 252 for (int row=0; row<lcd.rows(); row++)// Prueba toda la Pantalla
Antulius 8:39219ab1efd9 253 {
Antulius 8:39219ab1efd9 254 uint16_t col=0;
Antulius 8:39219ab1efd9 255 lcd.putc('0' + row);
Antulius 8:39219ab1efd9 256 for (col=1; col<lcd.columns()-1; col++)
Antulius 8:39219ab1efd9 257 {
Antulius 8:39219ab1efd9 258 lcd.putc('*'); // Llena lalinea con el carácter "*"
Antulius 8:39219ab1efd9 259 }
Antulius 8:39219ab1efd9 260 lcd.putc('+'); // Al final pone el carácter "+"
Antulius 8:39219ab1efd9 261 }
Antulius 8:39219ab1efd9 262 Elpased_Time.start(); // Calcula el tiempo transcurrido
Antulius 8:39219ab1efd9 263 terminal.printf("All my hard work took %f sec\r\n", Elpased_Time.read());
Antulius 8:39219ab1efd9 264 wait(1);
Antulius 8:39219ab1efd9 265 terminal.printf("LCD Display and TextLCD Enhanced Test Completed.\n\r");
Antulius 8:39219ab1efd9 266 lcd.cls();
Antulius 8:39219ab1efd9 267 lcd.setCursor(TextLCD::CurOff_BlkOn); //
Antulius 8:39219ab1efd9 268 // Set and show user defined characters. A maximum of 8 UDCs are supported by the HD44780.
Antulius 8:39219ab1efd9 269 // They are defined by a 5x7 bitpattern.
Antulius 8:39219ab1efd9 270 lcd.setUDC(0, (char *) udc_0); // Muestra el cursor |>
Antulius 8:39219ab1efd9 271 lcd.putc(0);
Antulius 8:39219ab1efd9 272 terminal.printf("LCD Starting OK! ... \n\r");
Antulius 8:39219ab1efd9 273 }
Antulius 8:39219ab1efd9 274
Antulius 8:39219ab1efd9 275 void buzzer_beep()
Antulius 8:39219ab1efd9 276 {
Antulius 8:39219ab1efd9 277 buzzer = Buzz_On;
Antulius 8:39219ab1efd9 278 wait_ms(750);
Antulius 8:39219ab1efd9 279 buzzer = Buzz_Off;
Antulius 8:39219ab1efd9 280 wait_ms(125);
Antulius 8:39219ab1efd9 281 buzzer = Buzz_On;
Antulius 8:39219ab1efd9 282 wait_ms(250);
Antulius 8:39219ab1efd9 283 buzzer = Buzz_Off;
Antulius 8:39219ab1efd9 284 wait_ms(125);
Antulius 8:39219ab1efd9 285 buzzer = Buzz_On;
Antulius 8:39219ab1efd9 286 wait_ms(500);
Antulius 8:39219ab1efd9 287 buzzer = Buzz_Off;
Antulius 8:39219ab1efd9 288 }
Antulius 8:39219ab1efd9 289
Antulius 8:39219ab1efd9 290 void blinking_led() // Software Blinking routine for LED
Antulius 7:af295ac5f904 291 {
Antulius 7:af295ac5f904 292 // The on-board LED is connected, via a resistor, to +3.3V (not to GND).
Antulius 7:af295ac5f904 293 // So to turn the LED on or off we have to set it to 0 or 1 respectively
Antulius 7:af295ac5f904 294 led_monitor = 0; // turn the LED on
Antulius 7:af295ac5f904 295 wait_ms(200); // 200 millisecond
Antulius 7:af295ac5f904 296 led_monitor = 1; // turn the LED off
Antulius 7:af295ac5f904 297 wait_ms(1000); // 1000 millisecond
Antulius 7:af295ac5f904 298 }
Antulius 8:39219ab1efd9 299 /*
Antulius 8:39219ab1efd9 300 void I2C_scanner()
Antulius 8:39219ab1efd9 301 {
Antulius 8:39219ab1efd9 302 terminal.printf ("I2C scanner. Scanning ...");
Antulius 8:39219ab1efd9 303 uint8_t count = 0;
Antulius 8:39219ab1efd9 304 char test[] = { 0b00000000, 0b00000000, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=DB6=DB7=0 en datos
Antulius 8:39219ab1efd9 305 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos,
Antulius 8:39219ab1efd9 306 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos,
Antulius 8:39219ab1efd9 307 0b01101100, 0b00101100, // RS=0, EN=1,0, LED+=1, NC, DB4=DB5=1 en datos,
Antulius 8:39219ab1efd9 308 0b01100100, 0b00100100, // RS=0, EN=1,0, LED+=1, NC, DB5=1 en datos,
Antulius 8:39219ab1efd9 309 0b01100100, 0b00100100, // RS=0, EN=1,0, LED+=1, NC, DB5=1 en datos,
Antulius 8:39219ab1efd9 310 0b01100110, 0b00100001, // RS=0, EN=1,0, LED+=1, NC, DB7=N=1 2 líneas, DB6=F=0 5x7puntos,
Antulius 8:39219ab1efd9 311 0b01100000, 0b00100000, // => Display ON/OFF Control.
Antulius 8:39219ab1efd9 312 0b01100001, 0b00100001, // RS=0, EN=1,0, LED+=1, NC, DB7=1 (Display off, cursor off, blink off)
Antulius 8:39219ab1efd9 313 0b01100000, 0b00100000, // => Display Clear.
Antulius 8:39219ab1efd9 314 0b01101000, 0b00101000};// RS=0, EN=1,0, LED+=1, NC, DB4=1 en datos, (Cursor Home}; // Patrón de Prueba
Antulius 8:39219ab1efd9 315
Antulius 8:39219ab1efd9 316 // char test[2] = {0x55,0xAA};// Patrón de Prueba
Antulius 8:39219ab1efd9 317 i2c_lcd.frequency(100000); // Frecuencia de operación para el I2C (100KHz)
Antulius 8:39219ab1efd9 318 i2c_lcd.start(); // Inicio de operación para el I2C
Antulius 8:39219ab1efd9 319 for (int i = 8; i < 128; i++)
Antulius 8:39219ab1efd9 320 {
Antulius 8:39219ab1efd9 321 uint8_t acknoledge = i2c_lcd.write (i,test,22,1); //(dirección, ap_datos, N°_datos, repetición)
Antulius 8:39219ab1efd9 322 if (acknoledge == 0)
Antulius 8:39219ab1efd9 323 {
Antulius 8:39219ab1efd9 324 terminal.printf ("\n\rFound address: ");
Antulius 8:39219ab1efd9 325 terminal.printf ("%u DEC",i); // Valor de la dirección en Decimal
Antulius 8:39219ab1efd9 326 terminal.printf (" (0x%x HEX)\n\r",i); // Valor de la dirección en Hexadecimal
Antulius 8:39219ab1efd9 327 // terminal.printf (" (0x%hd HEX)\n\r",i); // Valor de la dirección en Hexadecimal
Antulius 8:39219ab1efd9 328 count++;
Antulius 8:39219ab1efd9 329
Antulius 8:39219ab1efd9 330 wait (1); // maybe unneeded?
Antulius 8:39219ab1efd9 331 } // end of good response
Antulius 8:39219ab1efd9 332 led_monitor = !led_monitor; // Parapadeo del LED
Antulius 8:39219ab1efd9 333 } // end of for loop
Antulius 8:39219ab1efd9 334 led_monitor = 1; // Apaga el LED
Antulius 8:39219ab1efd9 335 i2c_lcd.stop(); // Fin de operación para el I2C
Antulius 8:39219ab1efd9 336 terminal.printf ("\n\rDone.\n\r");
Antulius 8:39219ab1efd9 337 terminal.printf ("Found %d Device(s)\n\r",count);
Antulius 8:39219ab1efd9 338 } // end of setup
Antulius 8:39219ab1efd9 339 */
Antulius 7:af295ac5f904 340
Antulius 7:af295ac5f904 341 /* END Program */
Antulius 7:af295ac5f904 342
Antulius 7:af295ac5f904 343 /* END Mbed */