domingo, 23 de febrero de 2014

MICROCONTROLADORES PIC 35: LCD CON PBP PARTE 3

MICROCONTROLADORES PIC 35: LCD CON PBP PARTE 3

         Este un ejemplo de la forma en que podemos obtener información de lo que esta ocurriendo en el PIC y que esta información la podamos ver en una pantalla LCD, es un ejemplo sencillo que será muy útil para comprender futuros programas que se hagan con el PIC.

        En este caso se crea una variable, cuyo valor que va cambiando con el tiempo lo podemos ver mediante la pantalla LCD, ademas se activaran unos pines lo cual lo podemos ver mediante unos leds, a la vez que en la pantalla observaremos que led es el que esta activo.

 El vídeo es es siguiente:

El diagrama de flujo para crear el programa en el PBP a conticuación:

MICROCONTROLADORES PIC 34: LCD CON PBP PARTE 2

MICROCONTROLADORES PIC 34: LCD CON PBP PARTE 2

           En este ejemplo se trata sobre la forma en que podemos visualizar números en sus diferentes formatos en una pantalla LCD, utilizando el PBP.

  •   Para ver datos en forma decimal se usará la palabra dec o el caracter #                 
                 dec dato
                 # dato
  •  Para ver datos en forma binaria se usará la palabra bin
                 bin dato
  •   Para ver datos en forma hexadecimal se usará la palabra hex.
                 hex dato
  •  Si no se antepone ninguna de las palabras anteriores al dato que se quiere visualizar en la pantalla LCD, el dato se visualizara en su equivalente ASCII.
                 
                En este ejemplo también se trata sobre como podemos cambiar de línea en la pantalla LCD, en este caso se utiliza una pantalla de dos líneas(2x16).
                  Para eso se utilizan las siguientes instrucciones:
                               $fe,$80  con esta instrucción se va al inicio de la primera línea del LCD
                               $fe,$c0   con esta instrucción se va al inicio de la segunda línea del LCD.

El vídeo es el siguiente:

El diagrama de flujo del programa utilizado y el esquema del circuito a continuación:


El código del programa en PBP que se utilizo es el siguiente:

#CONFIG
   __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

 #ENDCONFIG

DEFINE OSC 4

DEFINE LCD_DREG PORTB             'Se definen los pines del pic que serán
DEFINE LCD_BITS 4                          'conectados al LCD
DEFINE LCD_DBIT 4                          'los datos al puerto b

DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1                        ' RS del LCD al pin RB1 del PIC
DEFINE LCD_EREG PORTB     
DEFINE LCD_EBIT 2                          'E del LCD al pin RB2 del PIC
DEFINE LCD_LINES 2                       'LCD de 2x16

pause 200

cuenta var byte                                     'Se crea una variable cuenta cuyo valor será el
cuenta=0                                              'que se visualice en el LCD en diferentes formatos

inicio:
    lcdout $fe,1                                                                    'limpia la pantalla
    lcdout $fe,$80,"Contando"," ",cuenta                              'primera linea en ASCII
    lcdout $fe,$c0,# cuenta," ",bin cuenta," ",hex cuenta       'segunda linea
                                                                                            'en decimal, binario y hexadecimal  
    pause 200
    cuenta=cuenta+1
goto inicio
end

MICROCONTROLADORES PIC 33: LCD CON PBP PARTE 1

            Se realiza un primer programa para el manejo de una pantalla LCD de 2x16 con el PBP, en este caso se utiliza el PIC16F84A; en este primer ejemplo se trata sobre la forma en que hay que escribir el código para decirle al programa que pines del PIC serán utilizados para datos y que pines serán los de control; luego mediante la instrucción lcdout del PBP se enviarán mensajes que se podrán ver en la pantalla LCD.

              El formato de la instrucción lcdout que se utiliza tiene la siguiente forma:

                          lcdout dato,dato,dato...
             
             Donde dato puede ser una instrucción para la pantalla LCD, y si dato va entre comillas será eso lo que se imprima en la pantalla.

              En este caso se utiliza la instrucción $fe,1, la cual sirve para limpiar la pantalla LCD, es decir que borre todo lo escrito en la pantalla.

              El vídeo es el siguiente:

           El esquema del circuito utilizado, así como el diagrama  de flujo del programa utilizado en este ejemplo a continuación:

           El código en PBP del programa que se realizó para el ejemplo es el siguiente:

#CONFIG
   __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

 #ENDCONFIG

DEFINE OSC 4

DEFINE LCD_DREG PORTB     'Se utiliza el puerto b para los datos a enviar al LCD.
DEFINE LCD_BITS 4                  'Se utilizarán 4 bits para el bus de datos.
DEFINE LCD_DBIT 4                 'Se utilizaran los pines D4,D5,D6 y D7 del LCD.

DEFINE LCD_RSREG PORTB    'El pin  RS del LCD se conectará al puerto b.
DEFINE LCD_RSBIT 1               'RS se conectará en el pin RB1 del PIC.
DEFINE LCD_EREG PORTB      'El pin E del LCD se conectará al puerto b.
DEFINE LCD_EBIT 2                  'E se conectará en el pin RB2 del PIC.
DEFINE LCD_LINES 2               'El LCD será de 2 líneas(2x16).

pause 200

inicio:
    lcdout $fe,1,"Hola Mundo"        'La instrucción $fe,1 sirve para limpiar la pantalla LCD.
    pause 500
    lcdout $fe,1,"Real Madrid"
    pause 500
goto inicio
end


Atte: Benny

sábado, 22 de febrero de 2014

MICROCONTROLADORES PIC 32: PANTALLAS LCD


          En este caso se hacen unos comentarios sobre los pines de las pantallas LCD, se comenta sobre una pantalla de 2x16, la forma en que se conecta la alimentación, el como controlar el contraste de los caracteres y como utilizar el led de iluminación del LCD.



          Los pines que corresponden a estos LCD basados en el microcontrolador HD44780 o compatibles se indican a continuación:

        PIN               NOMBRE              FUNCIÓN
          1                     Vss                        0v (tierra, negativo)
          2                     Vdd                       5v (positivo)
          3                     Vee                        Contraste de caracteres
          4                      RS                         Selección de registro
          5                     R/W                       Lectura/Escritura
          6                     E                            Habilitación
          7                     D0                         bit 0 de datos
          8                     D1                         bit 1 de datos
          9                     D2                         bit 2 de datos
          10                   D3                         bit 3 de datos
          11                   D4                         bit 4 de datos
          12                   D5                         bit 5 de datos
          13                   D6                         bit 6 de datos
          14                   D7                         bit 7 de datos
          15                   A                           Ánodo del led de iluminación
          16                   K                          Cátodo del led de iluminación

     
El vídeo es el siguiente:

La forma en que se conectarán los pines del LCD con los de PIC sera como se indica en la figura:

                                                                     Atte Benny



domingo, 9 de febrero de 2014

MICROCONTROLADORES PIC 31: WHILE(MIENTRAS) EN XC8.

          En el siguiente ejemplo realizado para programar el PIC16F84A  con el XC8, se comenta sobre la utilización de la instrucción WHILE para realizar ciclos repetitivos(bucles); en este ejemplo se programa el pic mediante while anidados. 
              
            El vídeo es el siguiente:


            El diagrama de flujo y el esquema del circuito se muestra a continuación:


            El programa realizado en el XC8 utilizado en el ejemplo es el siguiente:

#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (Power-up Timer is enabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

#include <xc.h>
#define _XTAL_FREQ 4000000

void main(void) {
    TRISBbits.TRISB2=1;       //entrada
    TRISBbits.TRISB3=0;        //salida
    TRISBbits.TRISB4=0;       //salida
    TRISBbits.TRISB5=1;       //entrada

    PORTBbits.RB3=0;
    PORTBbits.RB4=0;

    while(1){

        while(PORTBbits.RB2==0){                         //bucle exterior
            __delay_ms(2);
            PORTBbits.RB3=~PORTBbits.RB3;

                while(PORTBbits.RB5==0){                     //bucle anidado
                    __delay_ms(1);                                      //dentro del bucle
                    PORTBbits.RB4=~PORTBbits.RB4;     //exterior
                }
        }

    PORTBbits.RB3=0;                               
    PORTBbits.RB4=0;
    }
    return;
}



MICROCONTROLADORES PIC 30: WHILE(MIENTRAS) EN CCS.

         Un programa de ejemplo sobre como utilizar la instrucción WHILE en el CCS, para realizar instrucciones que se tengan que repetir(bucles) dentro de un programa realizado para el PIC, en este caso el PIC16F84A.

               El vídeo es el siguiente:

              
            El diagrama de flujo y el esquema del circuito utilizado a continuación:


El código en CCS utilizado en el ejemplo es:

#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES PUT                      //Power Up Timer

#use delay(crystal=4000000)

//Lo de arriba nos lo crea el asistente, son los bits de configuración y la 
//velocidad del cristal.

#include <led1.h>                                       //Depende del nombre que le des a tu programa

void main()
{
   int a=0;
   int tiempo=50;
   
   output_low(pin_b4);
   
   delay_ms(tiempo);
   

   while(TRUE)                      //Corresponde al ciclo repetitivo del programa principal
   {

      while(a<=10){                //Aquí se realiza el bucle repetitivo con el cual
         delay_ms(tiempo);        //conseguimos el efecto de parpadeo del led
         a++;
      }
      
      output_toggle(pin_b4);
      a=0;
      
   }

}


MICROCONTROLADORES PIC 29: WHILE(MIENTRAS) EN PBP

         Se realiza un programa de ejemplo en el PBP, para ver como podemos utilizar la instrucción WHILE WEND,  para realizar ciclos repetitivos(bucles).
          
          El vídeo es el siguiente:



       El diagrama de flujo del programa y el esquema del circuito utilizado a continuación:


        El código en PBP del programa utilizado en el ejemplo es el siguiente:

'Los bits de configuración se han establecido con la asistencia
'del programador, en este caso el PICkit3, en el vídeo se muestra
'la forma de hacerlo.

DEFINE OSC 4

trisb.2=0
trisb.3=0
trisb.4=1

portb.2=0
portb.3=0

tiempo var word
tiempo=200

inicio:
while portb.4=0                'Este es el ciclo que se quiere
pause  tiempo            'que se repita, se encuentra dentro 
toggle portb.2            'de while...wend.
wend

pause tiempo
toggle portb.3

goto inicio
end

Atte Benny.

MICROCONTROLADORES PIC 28: WHILE(MIENTRAS) EN PBP, CCS, XC8 Y ARDUINO.

        Se hace un breve comentario a la forma en que se codifica el bucle While para trabajar con los microcontroladores.

1) En PBP tiene esta forma:
            .
            .
            .
while condición
     sentencia1
     sentencia2
           .
           .
           .
wend

        El PBP tiene otra forma de realizar lo mismo mediante la instrucción do...loop, de la cual se comentará mas adelante.

2) En CCS, XC8 y ARDUINO, el código será de la siguiente forma:
          .
          .
          .
while(condición){
       sentencia1;
       sentencia2;
              .
              .
              .
}  

El vídeo sobre el tema es el siguiente:  


Atte Benny.      

sábado, 1 de febrero de 2014

TRANSITORIO: CARGA Y DESCARGA DEL CONDENSADOR

           En los siguientes vídeos se trata sobre el estado transitorio del condensador, se observan los tiempos de carga y descarga; se prepara un circuito de prueba para el cual la constante de tiempo sea aproximadamente 1ms, se usa el arduino mega para obtener la señal cuadrada que nos ayudará a ver dicho fenómeno; el código utilizado para obtener la señal cuadrada es el siguiente:

int tiempo=1050;

void setup(){
  pinMode(52,OUTPUT);
  digitalWrite(52,LOW);
}

void loop(){
  digitalWrite(52,HIGH);
  delayMicroseconds(tiempo);
  digitalWrite(52,LOW);
  delayMicroseconds(tiempo);
}

  Los vídeo son:







          Estas son algunas imágenes de lo que ve en los vídeos:

Circuito utilizado

Aquí se puede observar la carga y descarga del condensador

Se observa indirectamente a través de la resistencia como varía
la corriente en un circuito RC


Atte Benny.