>

Programar tarjeta Freedom KL25Z en MBED.COM

No hace mucho que mis clases de Dispositivos Programables empezamos a trabajar con una nueva tarjeta por lo menos para mí, no es que sea compleja realmente comparada con otras básicamente se programa en C++ y es bastante dinámica, como yo muchos al toparse con ella tienen dudas así que hoy este breve tutorial será sobre como poder configurar y empezar a programar la tarjeta Freedom KL25Z desarrollada por NXP.

¿Qué vamos a aprender aquí?

Como dije anteriormente el objetivo es configurar nuestra tarjeta freedom para poder programar en ella esto haciéndolo desde la plataforma online mbed.com (No, no necesitas descargar e instalar nada de nada).


Tutorial paso a paso 

1. Muy bien, lo primero será ir a la web de mbed.com y registrarnos de forma común y corriente o puedes ir al formulario de registro directamente dando click por aquí.

2. Por supuesto es obvio que ya debemos tener por ahí en la mesa nuestra tarjeta pero aún no la conectaremos, una vez hemos completado el formulario de registro ¡Tarea fácil!  los logueamos ahora sí como se ve en la imagen:

Te dejo una cuenta de prueba:

Ya tiene la tarjeta configurada puedes checar y mirar lo que gustes y luego crear la tuya.
USUARIO: reymundo28894@mailbox52.ga
CONTRASEÑA: 52b927635


3. Una vez dentro nos volverá a cargar el home del portal de mbed ahora vamos a seleccionar nuestra tarjeta para empezar a programarla vamos darle donde dice "Compiler":



4. Nos abrirá por aparte nuestro entorno de Desarrollo o también llamado "Workspace Management" no explicaré cada parte del entorno ya que el objetivo es seleccionar la tarjeta y dejarla lista así que iremos donde dice "No device selected":

5. Este es el punto clave ahora daremos donde dice "Add board" y luego buscaremos la que dice "FRDM-KL25Z" veamos el siguiente GIF:

Click sobre la imagen para ampliar

6. Luego de ver algunas características sobre nuestra tarjeta simplemente daremos donde dice "Add to your Mbed Compiler" 

7. Luego volveremos a nuestro "Workspace" y actualizamos con F5 para finalmente ver nuestra tarjeta seleccionada y lista nos saldrá automáticamente la posibilidad de crear un nuevo programa:


El anterior programa precargado se trata del famoso "Hola mundo" o hacer titilar un led , luego, nos creará los archivos necesarios para trabajar en nuestro código y de allí todo lo haremos en el archivo "main.cpp":

Click en la imagen para ampliar
 
8. Ahora simplemente crearás tu código o puedes cargar ese que ya hay de prueba para ello conecta tu tarjeta en tu puerto USB y luego da en compile:



9. Nos creará un archivo con extensión ".bit" y lo descargará a nuestro equipo generalmente en la carpeta descargas o escritorio lo que haremos será con la tarjeta ya conectada (Que fue reconocida como un dispositivo de almacenamiento USB) copiar el archivo dentro de ella como si fuera una USB común y corriente:




10. Observa tu tarjeta y como el led RBG empieza a titilar ¿Lo hace? felicidades ya puedes empezar a usar tu tarjeta sin problema alguno con cuánto código se te ocurra.

En conclusión, como vimos configurar esta tarjeta es bastante fácil y preferí hacerlo paso a paso para que alguien por más nuevo que sea no se pierda, la ventaja de todo esto es que no es necesario instalar nada en nuestro equipo ya que el entorno de programación está en la nube al ser la plataforma "mbed.com" espero les haya gustado este breve tutorial.

Hasta la próxima SkullTraper ;)


Compartir:

PROYECTO: Cronómetro con PIC16F877A y display 7 segmentos en Assembler

Este proyecto es desarrollado en Assembler al final del post puedes descargar todo el proyecto + código + simulación

¡Un post más! Un buen SkullTraper sabe que aquí ponemos excelentes proyectos para motivarte, el día de hoy traemos un proyecto hecho en el lenguaje "Assembler" antes que nada quiero agradecer a +Juanita triana y +Nathan Bromberg  que me facilitó su proyecto yo hice algunos vídeos y pequeñas modificaciones sobre su proyecto ya que son compañeros de la Universidad.




¿DE QUE TRATA EL PROYECTO? 

Te dejo un vídeo del Proyecto funcionando ;)


Este proyecto tiene como objetivo realizar un cronómetro pero en lenguaje ensamblador (Este no es en C como los otros proyectos 😧), más exactamente el planteamiento dice lo siguiente:

  • Tomando como referencia el diagrama que se ilustra en la figura, se desea diseñar e implementar un cronómetro cuyo conteo esté dado en décimas de segundo (0.0 - 0.1 - 0.2 --- 9.8 - 9.9 - 0.0 --). Un pulsador permite iniciar o continuar el conteo, otro permite detener y otro borrar. 


DESARROLLO COMPLETO DEL PROYECTO

Como siempre y es sagrado de inicio aclaro que el proyecto fue realizado en MPLAB "El viejo confiable para proyectos con PIC" no se hizo uso de librerías especiales añadidas, para simulación proteus como siempre, como tal el proyecto es sencillo y fácil de entender al final podrás descargar todo el contenido de este proyecto 😄:


1. MATERIALES Y COMPONENTES En este proyecto fue necesario el siguiente uso de componentes:

- x1 Programador de PICS (Pickit2)
- x1 PIC16F877A
- x2 Displays 7 segmentos 
- x3 leds pequeños
- x3 pulsadores normales
- x3 resistencias de 220 ohms
- x2 Capacitores de 15pF
- Jumpers o puentes de conexión
- x1 Protoboard
- x1 fuente de voltaje, 5V está bien para trabajar
- x1 Cristal de Cuarzo de 4MHz
- x2 resistencias de 330 ohms
- x1 resistencia de 10k ohms
- x1 capacitor de 0,1uF

¡Listo! con esto podremos iniciar el proyecto sin problema alguno.

1.1. Cálculos de resistencias y demás   

Este paso es opcional pues prácticamente más arriba di los números precisos de cada componente, pero, si deseas saber como se hizo aquí te lo explico, este paso es para determinar a exactitud que valor de resistencias usar para los leds y displays, ¡Vamos que si llevan por seguridad! 

  • Resistencias de los LEDS, sabemos que la máxima corriente de salida de los puertos del micro que usamos, es decir, el PIC es de 25mA, pero, en este caso sólo se usará 15mA. El voltaje promedio son 5V y en los leds irán 3,5V usarán los leds, ahora, por ley de ohm nuestro pequeño despeje queda:

  • Resistencias para los displays, aplicamos el mismo principio anterior, ley de Ohm, entonces nos da:
  • Retardo en mS, para el retardo incialmente se había propuesto 100mS, pero, después del retardo siguen algunas instrucciones antes de volver a incrementar, se propone un retardo de 45mS aproximadamente:
 2. SIMULACIÓN PROTEUS 

La simulación como siempre hecha en Proteus todo normal y fácil de entender es apenas algo así: 


 3. CÓDIGO COMPLETO, PROGRAMA PIC

El código del proyecto no es muy largo y de hecho es bastante fácil de entender "siempre y cuando domines el lenguaje" no se hizo necesario el uso de alguna librería personalizada o similar:
 

 ;******************************************************************************************
;*           *
;* DESCRIPCIÓN DEL PROGRAMA
;* 
;* *ESTE PROGRAMA PERMITIRA CONTAR DE 0 A 99 DE FORMA ASCENDENTE Y DESCENDENTE
;* ACCIONADO POR DOS BOTONES. AL PULSAR UN BOTON, ESTE EMPIEZA A CONTAR DE FORMA ASCENDENTE
;    Y AL PULSAR EL OTRO, DE MANERA DESCENDENTE    *
;*          *
;*  AUTORES: JUANITA TRIANA 
;*                       *NATHAN BROMBERG
;*   *EDGAR CHICA
;*  MICRO:  PIC 16F877A           *
;*  OSCILADOR: 4 MHz            *
;*                *
;******************************************************************************************
;
;
 LIST p=16F877A
 #INCLUDE "p16F877A.inc"
;
 __CONFIG 3F71
;
;
; *************  DECLARACIÓN DE VARIABLES         *******************************
;
 CBLOCK 20
 UNID,DEC, R1, R2 
 ENDC
;

;EQU 

;
; ********************        DEFINICIONES GENERALES      ******************************
     #DEFINE BOTON_START PORTB,7 
     #DEFINE BOTON_STOP PORTB,6 
     #DEFINE BOTON_RESET PORTB,5
     #DEFINE LED_VERDE PORTB,0
     #DEFINE LED_ROJO PORTB,1
     #DEFINE LED_AZUL PORTB,2
     
;

;
; ________________________________________________________________________________________
;|          |
;|          DECLARACIÓN DE MACROS         |
;|________________________________________________________________________________________|
  INI_PUERTOS MACRO
    BCF STATUS,RP1 ;BK1
    BSF STATUS,RP0 ;BK0
    BCF OPTION_REG,7 ;PULL UP
    BSF TRISB,7 ;RB7 ENTRADA
    BSF TRISB,6 ;RB6 ENTRADA
    BSF TRISB,5 ;RB5 ENTRADA
    BCF TRISB,0 ;RB0 SALIDA
    BCF TRISB,1 ;RB1 SALIDA
    BCF TRISB,2 ;RB2 SALIDA
    CLRF TRISC ;PORTC SALIDA
    CLRF TRISD ;PORTD SALIDA
    BCF STATUS,RP0    ;BK0
    ENDM 



;-----------------------------------------------------------------------------------------
;
 ORG 00   ; VECTOR DE RESET
 GOTO INICIO
;
;
; ________________________________________________________________________________________
;|          |
;|         TABLAS Y PROCEDIMIENTOS    |
;|________________________________________________________________________________________|
;TABLA DECO
TABLA_DECO ;ANODO COMÚN 
 CLRF PCLATH
 ADDWF PCL,F
    DT 40, 79, 24, 30, 19, 12, 2, 78, 0, 10
 RETURN
;---------------------------------------------------------------------------------------------- 
;VISUALIZA
VISUALIZA
    MOVFW UNID
    CALL TABLA_DECO
    MOVWF PORTC
    MOVFW DEC
    CALL TABLA_DECO
    MOVWF PORTD
    RETURN
    
;INCREMENTA
INCREMENTA
    INCF UNID,F
    MOVLW .10
    XORWF UNID,W
    BTFSS STATUS,Z 
    GOTO SALE_INC
    CLRF UNID
    INCF DEC,F
    MOVLW .10
    XORWF DEC,W
    BTFSS STATUS,Z
    GOTO SALE_INC
    CLRF DEC
SALE_INC
    RETURN
    
;RESET
REINICIAR
    CLRF UNID
    CLRF DEC
    CALL VISUALIZA
    RETURN
    
;RETARDO_100MS
RETARDO_100MS
    MOVLW .122
    MOVFW R2
    
CICLO2
    MOVLW .122
    MOVWF R1
    
CICLO1 
    DECFSZ R1,F
    GOTO CICLO1
    DECFSZ R2,F
    GOTO CICLO2
    
   RETURN 
;LEDS
LED_1
BTFSC PORTB,7
GOTO SALE_L1
BCF PORTB,0
SALE_L1
RETURN

LED_2
BTFSC PORTB,6
GOTO SALE_L2
BCF PORTB,1
SALE_L2
RETURN

LED_3
BTFSC PORTB,5
GOTO SALE_L3
BCF PORTB,2
SALE_L3
RETURN

APAGA1
BSF PORTB,0
RETURN

APAGA2
BSF PORTB,1
RETURN

APAGA3
BSF PORTB,2
RETURN



   
;

;
;
;******************************************************************************************
;*          *
;*                   PROGRAMA  PRINCIPAL       *
;*               *
;******************************************************************************************
;
;
;
INICIO
    INI_PUERTOS
    CLRF UNID
    CLRF DEC
    CALL VISUALIZA
    
PRINCIPIO
    BTFSC BOTON_START
    GOTO PRINCIPIO
    
INCREMENTO
    CALL APAGA2
    CALL APAGA3
    CALL LED_1
    CALL INCREMENTA
    CALL VISUALIZA
    CALL RETARDO_100MS
    
    BTFSC BOTON_STOP
    GOTO INCREMENTO
    CALL APAGA1
    CALL LED_2
    CALL VISUALIZA
    GOTO MIENTRAS
    
MIENTRAS
    BTFSC BOTON_START
    GOTO REINICIO
    GOTO INCREMENTO
    
REINICIO
    BTFSC BOTON_RESET
    GOTO MIENTRAS
    CALL APAGA2
    CALL LED_3
    CALL REINICIAR
    GOTO PRINCIPIO
    
 END 
4. MONTAJE FINAL DEL PROYECTO 

Como es siempre sagrado el montaje final del proyecto en una foto, aunque este proyecto no lo montó ningún miembro del equipo de SkullTrap damos la foto de como debería quedar similar:


Es todo en este proyecto, como siempre digo que en la publicación de proyectos no profundizamos mucho en explicaciones ya que seguro si buscas un proyecto de este calibre es porque entiendes la gran mayoría de cosas. De igual forma si tienes dudas puedes comentar libremente, seguro te la podemos resolver de ser posible.

https://drive.google.com/open?id=0B8xtMFpL-ixBdWd6SmtqcmFzWmc


Es todo en este artículo hasta la próxima 😊,
Compartir:

PROYECTO: Control temperatura LM35 en PIC16F877A con LCD y teclado 4x4

ACTUALIZACIÓN 22/11/2018: He hecho algunas mejoras al código por problemas con el teclado y mostrar valores que no correspondían, además detallaré mejor la explicación del proyecto y su simulación.


¡Hola SkullTraper! Bienvenidos a un nuevo artículo "Publicación de un proyecto"  Donde Vamos a ver  un proyecto 100% funcional lo hemos desarrollado con unos compañeros de la Universidad en algunos 3 o 4 días tuvimos algunos líos de manejo de teclado con el PIC pero todo bien.



¿DE QUÉ TRATA EL PROYECTO? 
Mira el funcionamiento del proyecto en este vídeo ;)

El Proyecto como el título lo indica se trata de controlar temperatura con un LM35 pero más a fondo el problema planteado es el siguiente:

Se desea implementar un sistema regulador de temperatura, que adquiera y visualice en una pantalla LCD el valor de temperatura registrado por medio de un LM35, y lea por un teclado matricial valores de alarma de temperatura alta y baja. Si los valores límites son alcanzados debe mostrarse en la pantalla mensajes que así lo indiquen. En la pantalla debe mostrarse siempre la temperatura leída, y un mensaje que indique si está baja, normal o alta.


DESARROLLO COMPLETO DEL PROYECTO

Aclaro de inicio como siempre se usó MPLAB y PIC C para ejecutar archivos, además se hizo uso de librerías para LCD y el teclado es importante que no modifiques nada de las librerías salvo que seas excelente manejando C, si no mueves nada y lo haces tal cuál el proyecto te funcionará:

1. Materiales y componentes

Para este proyecto los materiales y componentes a precisión fueron los siguientes:

- x1 Programador de PICS (Pickit 2 el que usamos).
- x1 PIC16F877A.
- x1 LCD 16x2.
- x1 teclado matricial 4x4.
- x1 fuente de voltaje, 5 voltios está bien para trabajar.
- Jumpers o puentes de cable UTP para conexiones.
- x1 Potenciometro de 10k.
- x1 LM35 para sensar la temperatura.
- x1 Cristal de Cuarzo de 4MHz.
- x1 Protoboard (Ahí cabe todo el proyecto).

¡Listo! con esto iniciamos el proyecto sin problema alguno.


2. Simulación Proteus

La simulación en Proteus aunque es una captura apenas, sería algo así, recuerden que al final del post dejaré el link para descargar el proyecto completo si lo desean:

2.1. ¿Cómo probar el código en la simulación?

Muchos me han escrito para probar la simulación en proteus antes de montar el circuito con el PIC, para hacerlo es muy fácil, cuando descargues el proyecto al final del post, abrirásla carpeta simulación > templm35, esto será un archivo proteus que se verá como la imagen anterior, luego daremos doble click sobre el PIC y nos saldrá la siguiente ventana:
Carga de archivo .hex en el pic en proteus

- Daremos click en la carpeta de "Program file" y buscaremos luego el archivo con extensión (.HEX) luego click en abrir:

Una vez cargado el archivo procedemos a simular nuestro proyecto y comprobar el funcionamiento de forma correcta como se ve en la siguiente imagen todo pinta bien al ver en el display el mensaje "HOLA USUARIO BIENVENIDO":
Simulación funcionando

Si ves que todo está OK sólo queda que realices el montaje y montes el archivo finalemente en el pic de forma física. 


3. Código completo, programar PIC 

En el proyecto completo están incluídas las librerías las cuales son "DriverTec4x4.c" y "LCD.c" no hace falta modificarlas en lo absoluto ¡No lo hagas!.

El código del proyecto en sí completo (Hay que tener en cuenta las librerías de teclado y LCD) es el siguiente:
 #include <16F877A.h>  
#device ADC=10    
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
//LIBRERÍAS AÑADIDAS *NO MODIFICAR LIBRERÍAS*
#include <lcd.c>
#include <DriverTec4x4.c>

int8 dig1,min0,dig2,min3,imprime,dig3,atencion,dig,max0,max3;
int1 detector;
int16 ayuda,temperatura,temp,Tmax,Tmin,min1,max1;

lcd_init();

void EjecuConversor(){
   setup_adc(ADC_CLOCK_INTERNAL);    // Configura el conversor
   setup_adc_ports(AN0);          // Entrada RA0 como analógica
   set_tris_A(0xFF);            // Todo el PortA como entrada
   set_adc_channel(0);            // Seleccionar un canal (en este caso Canal 0)
   delay_us(10);               // Retardo necesario entre la selección de canal y la adquisición.
}
void DescomponerDigitos(int16 Dato){
   int16 aux;
   
   Dig1= Dato/1000;
   Dig2= (Dato%1000)/100;
   aux= Dato%100;
   Dig3= aux/10;   
}
void ProcesarSenal(){
   int32 Read;
   
   Read= ayuda;
   temperatura=(100)*((Read*5.0)/1023.0)*(100);
   //temperatura=*100;
   DescomponerDigitos(temperatura);
      
   Dig1+= '0';
   Dig2+= '0';
   Dig3+= '0';
}

// Esta función ejecuta la acción requerida por cada pulsador del teclado.

void ProcesarTeclado(){   
      
   switch (atencion){
   
      case 0:   //TECLA 1            
           imprime="1";
         dig=1;
          detector=1;
            break;
            
      case 1:   //TECLA 2            
          imprime="2";
         dig=2;
          detector=1;
            break;
            
      case 2:  //TECLA 3             
          imprime="3";
         dig=3;
          detector=1;
            break;
         
      case 3:  //TECLA A             
         imprime="A";
          break;
          
      case 4:  //TECLA 6      
          imprime="6";
          dig=6;
          detector=1;
          break;
          
      case 5:   //TECLA 5      
          imprime="5";
          dig=5;
          detector=1;
          break;
          
      case 6:   //TECLA 4           
          imprime="4";
          dig=4;
          detector=1;
          break;
          
      case 7:   //TECLA B           
          imprime="B";
          break;
          
      case 8:  //IMPRIME 7             
          imprime="7";
          dig=7;
          detector=1;
          break;
          
      case 9:   //TECLA 8            
          imprime="8";
          dig=8;
          detector=1;
          break;
          
      case 10:  //TECLA 9         
          imprime="9";
          dig=9;
          detector=1;
          break;
          
      case 11:  //TECLA C        
           imprime="C";
           break;
           
      case 12:  //TECLA ASTERISCO          
          imprime="x";
          break;
          
      case 13:   //TECLA CERO          
          imprime="0";
          dig=0;
          detector=1;
          break;
          
      case 14:  //TECLA NUMERAL           
           imprime="X";
           break;
           
      case 15:   //TECLA D         
          imprime="D";
    }

   if(atencion!=16){  // Si se oprimió algún pulsador se
      delay_ms(150);  // elimina rebote.
   }
}   
void VisualizarLCD(){

   lcd_gotoxy(1,2);
   lcd_putc("Temp: ");
   lcd_putc(Dig1);
   lcd_putc(Dig2);
   lcd_putc(".");
   lcd_putc(Dig3);
   lcd_putc("    ");
}

//===========EJECUCIÓN DEL PROGRAMA 

void main() {

   lcd_init();
   EjecuConversor();
   set_tris_B(0x0F);
    port_b_pullups(TRUE);
   while(TRUE){
   
lcd_gotoxy(13,1);
    lcd_putc("fHOLA USUARIO");
    lcd_gotoxy(1,2);                 
          lcd_putc("BIENVENIDO");
          delay_ms(4000);
   lcd_putc("fIngresar limites");
   lcd_putc("nTmin: ");
   
   while(TRUE){      
   atencion=LeerTeclado(); //Lee la funcion teclado
   ProcesarTeclado();
   min1=dig;
   lcd_gotoxy(7,2);
   lcd_putc(imprime);
   delay_ms(150);
   
   if(detector==1){
      break;
      }
   }
   
   imprime=" ";
   detector=0;
   while(TRUE){
   atencion=LeerTeclado();
   ProcesarTeclado();
   min0=dig;
   lcd_gotoxy(8,2);
   lcd_putc(imprime);
   delay_ms(150);
   if(detector==1){
      break;
      }
      }
   imprime="  ";
   detector=0;
      while(TRUE){
   atencion=LeerTeclado();
   ProcesarTeclado();
   min3=dig;
   lcd_gotoxy(9,2);
   lcd_putc(".");
   lcd_putc(imprime);
   delay_ms(150);
   if(detector==1){
      break;
      }
      }
      
   imprime=" ";
   detector=0;
   
   Tmin=(min1*100)+(min0*10)+min3;
   
   lcd_putc("fIngresar limites");
   lcd_putc("nTmax:");
  
   while(TRUE){  
   atencion=LeerTeclado();
   ProcesarTeclado();
   max1=dig;
   lcd_gotoxy(7,2);
   lcd_putc(imprime);
   delay_ms(150);
   if(detector==1){
      break;
      }
   }
   
   detector=0;   //DETECTA MI PULSACIÓN DE TECLA ANTES DE DAR
                 // UN SALTO AL SIGUIENTE DIGITO O TEMP
   imprime="  ";
   
   while(TRUE){
   atencion=LeerTeclado();
   ProcesarTeclado();
   max0=dig;
   lcd_gotoxy(8,2);
   lcd_putc(imprime);
   delay_ms(150);
   if(detector==1){
      break;
      }
      }
      detector=0;
      imprime="  ";
      while(TRUE){
   atencion=LeerTeclado();
   ProcesarTeclado();
   max3=dig;
   lcd_gotoxy(9,2);
   lcd_putc(".");
   lcd_putc(imprime);
   delay_ms(150);
   
   if(detector==1){    //SI EL DETECTOR SE ACTIVA PASA AL 
                       //SIGUIENTE REGISTRO LUEGO DE LEER LOS DATOS
      break;
      }
      }
    
   Tmax=(max1*100)+(max0*10)+max3;
   
   lcd_putc("fmin=");
   if(min1==0)
   {min1="0";
      }else
      {
   min1=min1+'0';
   }
   min0=min0+'0';
   lcd_putc(min1);
   lcd_putc(min0);
   if(min3==0){
   min3=" ";
   }else{
   min3=min3+'0';
   lcd_putc(".");
   }
   lcd_putc(min3);
   lcd_gotoxy(9,1);
   
   lcd_putc("max=");
      if(max1==0)
   {max1=" ";
      }else
      {
   max1=max1+'0';
   }
   max0=max0+'0';
    lcd_putc(max1);
   lcd_putc(max0);
   if(max3==0){
   max3=" ";
   }else{
   max3=max3+'0';
   lcd_putc(".");
   }
   lcd_putc(max3);
   

   
   while (true){
      delay_ms(200);
      ayuda= read_adc();         // Adquisición de la señal   
      ProcesarSenal();      // Función encargada de procesar el dato adquirido
      temp=temperatura/10;
      if(temp<=Tmin)
      {
         lcd_gotoxy(1,2);
         VisualizarLCD();
         lcd_gotoxy(13,2);
          lcd_putc("Bajo");
       }else if(temp>Tmin && temp<Tmax)  //COMPARACION BOOLEANA !!!!importante!!!!
         {
            VisualizarLCD();
            lcd_gotoxy(13,2);
            lcd_putc(" :)");
            }else if(temp>=Tmax)
            {
               lcd_gotoxy(1,2);
               VisualizarLCD();
               lcd_gotoxy(13,2);
                  lcd_putc("Alto");
               }   
               
//============INICIO MANEJO DE ERRORES
   if(Tmax==Tmin){
    lcd_gotoxy(13,1);
    lcd_putc("fLOS LIMITES NO");
    lcd_gotoxy(1,2);                 
          lcd_putc("DEBEN SER IGUAL");
          delay_ms(4000);
           lcd_gotoxy(13,1);
           lcd_putc("fINGRESE DATOS");
    lcd_gotoxy(1,2);                 
          lcd_putc("VALIDOS DE NUEVO");
          delay_ms(5000);
          break; 
           
   }
    if(Tmax<Tmin){
        lcd_gotoxy(13,1);
    lcd_putc("fTMin NO DEBE SER");
    lcd_gotoxy(1,2);                 
          lcd_putc("MAYOR QUE TMax");
          delay_ms(4000);
           lcd_gotoxy(13,1);
           lcd_putc("fINGRESE DATOS");
    lcd_gotoxy(1,2);                 
          lcd_putc("VALIDOS DE NUEVO");
          delay_ms(5000);
          break;
             
   }
    
   //=============FIN MANEJO DE ERRORES
      }
      }
}


4. Montaje final proyecto 

El montaje final no siempre es el más estético y no todos deben parecerse jajaja después de todo son proyectos un poquito apresurados pero funcionan al 100 de 100 entonces algo así a los afanes el montaje nos quedó como vemos todo en una sola protoboard:


Es todo el contenido de este proyecto si notas algún error o problema puedes comentar estamos para resolver dudas recuerda visitar nuestra tienda para adquirir nuestros productos.

https://drive.google.com/open?id=0B8xtMFpL-ixBYkhjSnpQUFFtME0


Hasta la próxima,  
Compartir:

SkullTrapers

Posts más vistos

 

CLICK AQUI PARA IR A NUESTRA TIENDA ON LINE ARDUINO, ELECTRÓNICA, COMPONENTES