Microprocesadores - Introducción al Lenguaje C

Anuncio
Microprocesadores
Introducción al Lenguaje C - Parte VI
Prof. Luis Araujo
Universidad de Los Andes
Prof. Luis Araujo
Microprocesadores
Conversor Análogo Digital (ADC)
Prof. Luis Araujo
Microprocesadores
Conversor Análogo Digital (ADC)
Prof. Luis Araujo
Microprocesadores
Conversor Análogo Digital (ADC)
Prof. Luis Araujo
Microprocesadores
Conversor Análogo Digital (ADC)
Prof. Luis Araujo
Microprocesadores
Conversor Análogo Digital (ADC)
Prof. Luis Araujo
Microprocesadores
Conversor Análogo Digital (ADC)
Prof. Luis Araujo
Microprocesadores
adc 4620.h
# ifndef ADC_4620_H
# define ADC_4620_H
// Definiciones
void ADC_init ( unsigned int );
int ADC_get ( char );
# endif
Prof. Luis Araujo
Microprocesadores
adc 4620.h
# define ADC_VREF_P
# define ADC_VREF_N
0 x0010
0 x0020
# define
# define
# define
# define
# define
# define
# define
# define
# define
# define
# define
# define
# define
0 x000E
0 x000D
0 x000C
0 x000B
0 x000A
0 x0009
0 x0008
0 x0007
0 x0006
0 x0005
0 x0004
0 x0003
0 x0002
ADC_AN01
ADC_AN02
ADC_AN03
ADC_AN04
ADC_AN05
ADC_AN06
ADC_AN07
ADC_AN08
ADC_AN09
ADC_AN10
ADC_AN11
ADC_AN12
ADC_AN13
Prof. Luis Araujo
Microprocesadores
adc 4620.h
# define ADC_10bit
# define ADC_08bit
0 x8000
0 x0000
# define
# define
# define
# define
# define
# define
# define
# define
0 x0380
0 x0300
0 x0280
0 x0200
0 x0180
0 x0100
0 x0080
0 x0000
ADC_20TAD
ADC_16TAD
ADC_12TAD
ADC_08TAD
ADC_06TAD
ADC_04TAD
ADC_02TAD
ADC_00TAD
Prof. Luis Araujo
Microprocesadores
adc 4620.h
# define
# define
# define
# define
# define
# define
# define
ADC_FRC
ADC_FOSC64
ADC_FOSC16
ADC_FOSC04
ADC_FOSC32
ADC_FOSC08
ADC_FOSC02
# define ADC_OFF
0 x0300
0 x0600
0 x0500
0 x0400
0 x0200
0 x0100
0 x0000
0 x0000
Prof. Luis Araujo
Microprocesadores
adc 4620.c
# include < xc .h >
# include " adc_4620 . h "
void ADC_init ( unsigned int conf )
{
if ( conf == ADC_OFF )
{
ADCON1 = 0 x0F ;
ADCON0 = 0 x00 ;
}
else
{
ADCON2 = conf >> 8;
ADCON1 = conf ;
ADCON0 = 0 x01 ;
}
}
Prof. Luis Araujo
Microprocesadores
adc 4620.c
int ADC_get ( char canal )
{
if ( ADON == 1)
{
ADCON0
= ( canal << 2) | 0 x01 ;
GO_nDONE = 1;
while ( GO_nDONE == 1) continue ;
if ( ADFM == 1)
return ( int ) ADRESH * 256 + ADRESL ;
else
return ( int ) ADRESH ;
}
return 0;
}
Prof. Luis Araujo
Microprocesadores
Sensor de Temperatura LM35
Prof. Luis Araujo
Microprocesadores
Ejercicio 16 (E16)
Prof. Luis Araujo
Microprocesadores
Ejercicio 16 (E16)
# include < xc .h >
# include < stdio .h >
# include < string .h >
# include " lcd_4bit . h "
# include " adc_4620 . h "
// Palabra de CONFIGURACION
void main ( void ) {
float temperatura ;
char texto [17] = " ** Termometro ** " ;
OSCCON = 0 x68 ;
LCD_init ();
ADC_init ( ADC_AN01 | ADC_10bit |
ADC_FOSC04 | ADC_02TAD );
// ......
}
Prof. Luis Araujo
Microprocesadores
Ejercicio 16 (E16)
LCD_clear ();
LCD_puts ( texto );
while (1)
{
temperatura = ADC_get (0) * 500.0 / 1023;
sprintf ( texto , " %5.2 f %cC " , temperatura ,0 xDF );
LCD_gotoxy (4 ,1);
LCD_puts ( texto );
}
Prof. Luis Araujo
Microprocesadores
Ejercicio 16 (E16)
Imprimir en Entero
sprintf ( texto , " %02 d %cC " ,( int ) temperatura ,
0 xDF );
Trabajando con 8 bits
ADC_init ( ADC_AN01 | ADC_08bit |
ADC_FOSC04 | ADC_02TAD );
temperatura = ADC_get (0) * 500.0 / 255;
Prof. Luis Araujo
Microprocesadores
Ejercicio 17 (E17)
Prof. Luis Araujo
Microprocesadores
Ejercicio 17 (E17)
void main ( void )
{
int temperatura ;
char texto [17] = " ** Termometro ** " ;
OSCCON = 0 x68 ;
LCD_init ();
ADC_init ( ADC_AN01 | ADC_10bit | ADC_FOSC04 |
ADC_02TAD | ADC_VREF_P );
LCD_clear (); LCD_puts ( texto );
while (1)
{
temperatura = ADC_get (0) * 100 / 341;
sprintf ( texto , " %02 d %cC " , temperatura ,0 xDF );
LCD_gotoxy (4 ,1); LCD_puts ( texto );
}
}
Prof. Luis Araujo
Microprocesadores
Interrupciones
Existen 2 métodos para comunicar el microcontrolador y los
dispositivos externos
Sondeo
Interrupciones
Prof. Luis Araujo
Microprocesadores
Sondeo
En este método, el microcontrolador accede al dispositivo
externo en un tiempo especifico y obtiene la información
requerida.
El perı́odo de tiempo es determinado por el usuario. Cuando
se utiliza el método, el microcontrolador debe acceder al
dispositivo y solicitar la información que se necesita para ser
procesada.
En este método, no hay independencia de los dispositivos
externos mismos, sino que dependen del microcontrolador.
El inconveniente principal de utilizar este método es que se
produce pérdida de tiempo. El microcontrolador tiene que
esperar y revisar si una nueva información llegó.
Prof. Luis Araujo
Microprocesadores
Interrupción
La Interrupción es una señal enviada al microcontrolador para
indicar un acontecimiento que requiere atención inmediata.
La Interrupción pide al procesador que pare la ejecución del
programa en curso y ejecute un código especial.
El método de interrupción es la opción para transferir la
información generada por los dispositivos externos al interior
del microcontrolador, por ellos mismos.
Una vez que el ocurra la Interrupción, el microcontrolador
puede acceder y recibir la información y utilizarla.
Finalizada la interrupción, el microcontrolador continua la
ejecución del programa.
Prof. Luis Araujo
Microprocesadores
Fuentes de Interrupción
Interrupciones externas INTx
Interrupción por cambio lógico en el puerto B (pines RB7 a
RB4)
Interrupciones por desborde de los Timers
Interrupción del Convertidor A/D
Interrupción del Puerto Serial
Interrupción del Módulo CCP
Interrupción del EEPROM
etc
Prof. Luis Araujo
Microprocesadores
Interrupciones PIC16F87
Prof. Luis Araujo
Microprocesadores
Configurar Interrupciones
XXIE bit que permite activa la interrupción de un dispositivo
especifico
XXIF bit que indica que se activo la interrupción de un
dispositivo especifico
GIE bit que permite habilitar las Interrupciones
PEIE bit que permite activa el segundo nivel de interrupciones
bit = 1 → Activada o Habilitada
bit = 0 → Desactivada o Des-habilitada
Prof. Luis Araujo
Microprocesadores
Interrupciones PIC16F87
Prof. Luis Araujo
Microprocesadores
Interrupciones PIC18F4620
Prof. Luis Araujo
Microprocesadores
Interrupciones PIC18F4620
Prof. Luis Araujo
Microprocesadores
Configurar Interrupciones
IPEN bit que permite habilitar el uso de la prioridad en las
interrupciones
IPEN = 1 → Prioridad Habilitada
IPEN = 0 → Prioridad Des-habilitada
GIEH/GIE bit que permite habilitar las Interrupciones de Alto
Nivel
GIEL/PEIE bit que permite habilitar las Interrupciones de
Bajo Nivel
XXIP bit que permite establecer la prioridad de la interrupción
XXIP = 1 → Interrupción de Alta Prioridad
XXIP = 0 → Interrupción de Baja Prioridad
Prof. Luis Araujo
Microprocesadores
Interrupciones PIC18F4620
Prof. Luis Araujo
Microprocesadores
Interrupciones PIC18F4620
Prof. Luis Araujo
Microprocesadores
Interrupciones PIC18F4620
Prof. Luis Araujo
Microprocesadores
Ejercicio 18 (E18)
Prof. Luis Araujo
Microprocesadores
Ejercicio 18 (E18)
# include < xc .h >
# include < stdio .h >
# include " lcd_4bits . h "
// Palabra de Configuracion
char hor = 0 , min = 0 , seg = 0;
char texto [17] = " ** Cronometro ** " ;
char contar = 0;
void Delay_Seg ( char );
Prof. Luis Araujo
Microprocesadores
Ejercicio 18 (E18)
void main ( void )
{
OSCCON = 0 x68 ;
INTE = 1;
GIE = 1;
LCD_init ();
LCD_clear ();
LCD_puts ( texto );
sprintf ( texto , " %02 d : %02 d : %02 d " ,
hor , min , seg );
LCD_gotoxy (4 ,1);
LCD_puts ( texto );
while (1)
{
}
}
Prof. Luis Araujo
Microprocesadores
Ejercicio 18 (E18)
if ( contar == 0) continue ;
Delay_Seg (1);
if ( contar == 1) {
if ( seg == 59) {
seg = 0;
if ( min == 59) {
min = 0;
if ( hor == 23) hor = 0;
else
hor ++;
}
else min ++;
}
else seg ++;
}
sprintf ( texto , " %02 d : %02 d : %02 d " ,
hor , min , seg );
LCD_gotoxy (4 ,1);
LCD_puts ( texto );
Prof. Luis Araujo
Microprocesadores
Ejercicio 18 (E18)
void interrupt isr ( void )
{
if ( INTF == 1)
{
if ( contar == 0)
contar = 1;
else
contar = 0;
INTF = 0;
}
}
Prof. Luis Araujo
Microprocesadores
Descargar