Template - Laboratorio de Micro 1 (A) Guia Nro 6

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

Facultad de Tecnología Electrónica y Telecomunicaciones

Laboratorio de microprocesadores I Paralelo A

INTERFACE A DISPOSITIVOS DE
ENTRADA Y SALIDA
1 Objetivo
 Efectuar el manejo de conversor analógico a digital
 Efectuar el manejo de motores paso a paso

2 Base teórica
2.1 Modulo ADC
El módulo convertidor de analógico a digital (A / D) tiene 10 entradas para los
dispositivos de 28 pines y 13 para los dispositivos de 40/44 pines. Este módulo permite la
conversión de una señal de entrada analógica a una señal digital de 10 bits.

El módulo tiene cinco registros:

 ADRESH
 ADRESL
 ADCON0
 ADCON1
 ADCON2

El registro ADCON0, gobierna las operaciones del módulo A/D. El registro ADCON1
configura las funciones de los puertos. El registro ADCON2 configura el reloj, programa el
tiempo de adquisición y justificación.

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A

Ejemplo:

adcon0.adon = 1; // activa el módulo ADC


adcon0.go = 1; // inicia una conversión analógica a digital
adcon0 = 0b00001111; // selecciona el canal 3
// inicia una conversión analógica a digital
// activa el conversor analógico digital

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A

Ejemplo:

adcon1.vcfg0 = 0; // voltaje de referencia negativo a Vss (Vref-)


adcon1.vcfg1 = 0; // voltaje de referencia positivo a Vdd (Vref+)
adcon1 = 0b00001100; // voltaje de referencia negativo a Vss (Vref-)
// voltaje de referencia positivo a Vdd (Vref+)
// habilita tres canales analógicos (AN2 – AN0)

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A

Ejemplo

adcon2.adfm = 1; //adc modo 10 bita


adcon2.adfm = 0; //adc modo 8 bita
adcon2 = 0b10001111; //adc modo 10 bits
//tiempo de adquisición 2TAD
//oscilador interno (TAD = 2.5us)

3 Investigación
¿Qué es el LM35 y sus características?

¿Qué es un filtro anti alias y para qué sirve?

¿Qué son los motores paso a paso unipolar y bipolar?

¿Cómo determinar los pines de los motores paso a paso unipolar y bipolar?

¿Qué driver pueden ser usados para el manejo de los motores paso a paso?

¿Averigüe las secuencias usadas para el control de motores paso a paso unipolar y bipolar?

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A

4 Desarrollo del laboratorio


Ejemplo 1

Realizar la lectura de 2 entradas analógicas y uno conectado a un lm35 y el otro a un


potenciómetro, mostrar los valores de temperatura y los del potenciómetro en un lcd.

/*************************************************************************/
// LCD module connections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;


sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections

sbit led at RE2_bit;


sbit led_dir at TRISE2_bit;
/*************************************************************************/
void config_puertos_io()
{
adcon2 = 0b10001111; //modo 8 bits, 2TAD, osc RC interno (TAD = 2.5us)
adcon1 = 0b00001101; //vref Vcc y GND, RA0 y RA1 entradas analógicas
adcon0.adon = 1; //adc activado

cmcon = 0x0f;
cvrcon = 0x00;
ucon = 0x00;

led = 0;
led_dir = 0;
}
/*************************************************************************/
unsigned short leer_canal0()
{
unsigned short n;
unsigned int suma = 0;
unsigned int promedio;

adcon0 &= 0b00000011; // selecciona el canal 0

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A
for(n = 0; n<16; n++)
{
adcon0.go = 1; //inicia una conversión
while(adcon0.go == GO_DONE); //espera a terminar la conversión
suma += adresh<<8 | adresl;
delay_us(10);
}
promedio = suma/16;
return (unsigned short)(promedio*0.0488);
}
/*************************************************************************/
unsigned int leer_canal1()
{
unsigned short n;
unsigned int suma = 0;
unsigned int promedio;

adcon0 |= 0b00000100; // seleccioma el canal 0


for(n = 0; n<16; n++)
{
adcon0.go = 1; //inicia una convercion
while(adcon0.go == GO_DONE); //espera a terminar la conversion
suma += adresh<<8 | adresl;
delay_us(10);
}
promedio = suma/16;
return promedio;
}
/*************************************************************************/
void main()
{
unsigned int potenciometro;
unsigned short temperatura;
char temperaturaTxt[4];
char potenciometroTxt[6];

config_puertos_io();
lcd_init();
lcd_cmd(_LCD_CLEAR);
lcd_cmd(_LCD_CURSOR_OFF);
lcd_out(1,1,"Temperatura:");
lcd_out(2,1,"Pot");
while(1)
{
temperatura = leer_canal0();
potenciometro = leer_canal1();
byteToStr(temperatura,temperaturaTxt);
wordToStr(potenciometro,potenciometroTxt);
lcd_out(1,13,temperaturaTxt);
lcd_out(2,10,potenciometroTxt);
delay_ms(500);
led = !led;
}
}
/*************************************************************************/

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A

Ejemplo 2

Efectuar el control de un motor paso a paso de modo que exista un pulsador de inicio y
parada, asi también un pulsador de cambio de giro, el tipo de paso a ser usado será el paso
simple.

/*************************************************************************/
sbit pulsadorIniciaDetiene at RD0_bit;
sbit pulsadorIniciaDetiene_dir at TRISD0_bit;

sbit pulsadorGiro at RD1_bit;


sbit pulsadorGiro_dir at TRISD1_bit;

sbit ledRojo at LATE2_bit;


sbit ledRojo_dir at TRISE2_bit;

sbit ledVerde at LATE1_bit;


sbit ledVerde_dir at TRISE1_bit;

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A

sbit ledNaranja at LATE0_bit;


sbit ledNaranja_dir at TRISE0_bit;
/*************************************************************************/
void config_puertos_io()
{
adcon1 = 0x07;
cmcon = 0x0f;
cvrcon = 0x00;
ucon = 0x00;

latd = 0;
trisd = 0;

pulsadorIniciaDetiene = 1;
pulsadorIniciaDetiene_dir = 1;

pulsadorGiro = 1;
pulsadorGiro_dir = 1;

ledRojo = 0;
ledRojo_dir = 0;
ledVerde = 0;
ledVerde_dir = 0;
ledNaranja = 0;
ledNaranja_dir = 0;
}
/*************************************************************************/
char leer_pulsador_inicia_detiene()
{
static char estado = 0;
static char estadoAnterior = 1;
char estadoActual;

estadoActual = pulsadorIniciaDetiene;
if((!estadoActual) && (estadoAnterior))
{
estado ^= 1;
}
estadoAnterior = estadoActual;
return estado;
}
/*************************************************************************/
char leer_pulsador_giro()
{
static char estado = 0;
static char estadoAnterior = 1;
char estadoActual;

estadoActual = pulsadorGiro;
if((!estadoActual) && (estadoAnterior))
{
estado ^= 1;
}
estadoAnterior = estadoActual;
return estado;
}
/*************************************************************************/
void giro_motor_pap(char giro)
{
static unsigned short pasos[] = {1,2,4,8};

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A
static unsigned short n;
unsigned short paso;

switch(giro) //motor pap conectado al nible superior del puerto D


{
case 0:
{
n++;
break;
}
case 1:
{
n--;
}
}
n &=0x03;
paso = portd;
paso &= 0x0f;
paso |= pasos[n]<<4;
latd = paso;
}
/*************************************************************************/
void main()
{
config_puertos_io();
while(1)
{
switch(leer_pulsador_inicia_detiene())
{
case 1:
{
ledRojo = 1;
switch(leer_pulsador_giro())
{
case 1:
{
ledVerde = 1;
ledNaranja = 0;
giro_motor_pap(1);
break;
}
case 0:
{
ledVerde = 0;
LedNaranja = 1;
giro_motor_pap(0);
}
}
break;
}
case 0:
{
ledRojo = 0;
ledVerde = 0;
ledNaranja = 0;
}
}
delay_ms(500);
}
}
/*************************************************************************/

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A

Trabajo en laboratorio.

Programa 1

Mediante el sensor de temperatura LM35 haga un circuito en el cual se defina la


temperatura máxima mediante teclado y cuando se rebase dicha temperatura accione un
ventilador que debe ser alimentado con la tensión de res de 220Vef, tanto la pemperatura
actual como la máxima debes verse el lcd alfanumérico. Para efectos demostrativos si no
consta de un ventilador puede elegir otra carga que igualmente sea funcione con 220Vef..

Programa 2.

Efectué el control de dos motores paso a paso de manera que cada uno pueda ser
activado y pueda cambias su sentido de giro de manera independiente, en lo posible que un
motor sea unipolar y el otro bipolar, si no dispone de ambos tipos de motores puede usar dos
del mismo tipo.

Docente: Lic. Henry Alcón Choque


Facultad de Tecnología Electrónica y Telecomunicaciones
Laboratorio de microprocesadores I Paralelo A

5 Resultados

6 Conclusiones

Docente: Lic. Henry Alcón Choque

También podría gustarte