martes, 11 de marzo de 2014

CX SERIAL CON MICROCONTROLADOR ATMEGA164PA CODEVISION Y PROTEUS

WE UNIT TALENT THEY CREATE THE FUTURE


Continuando con el estudio del ATMEGA164PA vamos a conocer como funciona la cx serial en este microcontrolador, pero primero debemos preguntarnos.... 
¿QUÉ ES CX SERIAL?
La comunicación serial consiste en el envío de un bit de información de manera secuencial, esto es,  un bit a la vez  y en una frecuencia acordada entre el emisor y el receptor. La cx serial se utiliza para transmitir datos en formato ASCII.
La parte física encargada de la comunición es la UART (Universal Asynchronous Receiver and Transmitter). Los microcontroladores Atmega 8/168/328,  disponen de un dispositivo compatible llamado USART (Universal Synchronous and Asynchronous serial Receiver and Transmitter) que permite tanto la comunicación asincrónica como sincrónica.                                                                                             -----------------------------------------------------------------------

El momento de programar debemos tener en cuenta las siguientes funciones para cx serial.

x=getchar( ); 
getchar( );          recibe un caracter en valor ASCII .+
putchar('*');     se envía el código ASCII del asterisco. En la pantalla observaremos un asterisco.
printf("_",_);   imprime un mensaje mediante comunicación serial
scanf("_",_);    lee un mensaje desde otro dispositivo haciendo uso de  la comunicación serial.


Los registros que se configuran el momento de habilitar la cx serial en CODEVISION son los siguientes:
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;

Estos registros indican que se ha habilitado tanto el transmisor como el receptor del microcontrolador.


No olvides que el momento de simular tu programa debes escoger la opción de VIRTUAL TERMINAL(barra de herramientas, Virtual Instruments Mode) esta herramienta te permitirá visualizar la información tanto del TX como del RX. 




A continuación les dejo un ejemplo de un proyecto con cx serial para que lo puedan compilar y simular:

#include <mega164a.h>
#include <delay.h>
#include <stdio.h>
int i, n;
char dato;

interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
i=1-i;
delay_ms(20);
if(i==1)
{
  printf("\r SISTEMA ENCENDIDO");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
}   
if(i==0)
{
 printf("\r SISTEMA APAGADO");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
}
}

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

while (1)
     {
         if(i==1)
         { 
printf("\r PRESIONE A, B, C, D PARA INICIAR UN NUEVO JUEGO DE LUCES");//IMPRIME UN MENSAJE O CADENA DE CARACTERES  
          dato=getchar();//LEE UN CARACTER DESDE UN DISPOSITIVO
           switch (dato) 
           {
              case 'A':
  printf("\r JUEGO DE LUCES #1 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES 
                PORTA=0xFF;
                delay_ms(500);
                PORTA=0x00;
                 delay_ms(500);
              break;
 
              case 'B':
  printf("\r JUEGO DE LUCES #2 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES 
               PORTA=0X01;              
           for(n=1;n<8;n++)
           {
             PORTA=PORTA*2;
             delay_ms(100);
           }   
          PORTA=0b10000000;
          for(;n>1;n--)
           {
            PORTA=PORTA/2;
            delay_ms(100);
           } 
              break; 
              case 'C':
   printf("\r JUEGO DE LUCES #3 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES  
                PORTA=0x01;
           for(n=0;n<8;n++)
              {
                PORTA=PORTA*2;  
                delay_ms(100); 
               }
           for(;n>1;n--)
              {
               PORTA.0=1; 
               delay_ms (50);
               PORTA=PORTA*2;
               delay_ms(100);
              }   
              break; 
 
               case 'D':
  printf("\r JUEGO DE LUCES #4 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES 
               PORTA=0X01; 
           delay_ms(100);
          for(n=1;n<128;n++)
           {
            PORTA=PORTA+1;
            delay_ms(50);
           }   
           
            for(;n>122;n--)
           {
            PORTA=PORTA/2;
            delay_ms(50);
           }      
              break; 
 
              default:  
        printf("\r LETRA ERRONEA");//IMPRIME UN MENSAJE O CADENA DE CARACTERES   
            }; 
          }
          else
          {
           PORTA=0x00;
          }
      }

}

/*******************************************************************************************************************/ 
Este programa es una pequeña aplicación de lo que podemos obtener con cx serial, nos permite tanto enviar como recibir datos los cuales  se visualizarán en el VIRTUAL TERMINAL de PROTEUS controlando asi nuestra interacción con el usuario.

--------------------------------------------------------------------------------------------------------------------

 

Para mayor información puedes visitar nuestro canal de Youtube y terminar tu aprendizaje con el video tutorial:  COMUNICACIÓN SERIAL CON ATMEGA164PA


No lo olvides APRENDE, PRACTICA, DESARROLLA!!! 



  

No hay comentarios:

Publicar un comentario