You are on page 1of 15

UNIVERSIDAD POLITECNICA

SALESIANA

SISTEMAS MICROPROCESADOS I

PRACTICA Nº6

ERIKA ABRIL
VINICIO DAVILA
REMIN ZAMBRANO

SEXTO SEMESTRE

OBJETIVO:
Utilizar los conversores A/D y D/A del Microcontrolador PIC

TEMA:

1
Conversión Análoga Digital y Digital Análoga.

EJERCICIO 1:
Conversor A/D con el Microcontrolador PIC 16F877
Se adquiere la señal de un potenciómetro entre 0 y 5 voltios y se observa en el LCD
un
valor entre 0 y 1024.
Esquemático

CÓDIGO :
program Voltaje
DIM voltaje as word
dim valor as string [10]
sub procedure init

ADCON1=$80
TRISA=$FF
Lcd_config(portb,7,6,5,4,portb,0,1,2)
lcd_cmd(lcd_cursor_off)
end sub
main:
init
WHIlE TRUE
voltaje=Adc_read(0)
WORDTOSTR(voltaje,valor)
lcd_cmd(lcd_clear)
LCD_OUT(1,1,valor)
delay_ms(300)
WEND
end.

ADCON1=$80
TRISA=$FF

2
Lcd_config(portb,7,6,5,4,portb,0,1,2)
lcd_cmd(lcd_cursor_off)
end sub
main:
init
WHIlE TRUE
voltaje=Adc_read(0)
WORDTOSTR(voltaje,valor)
lcd_cmd(lcd_clear)
LCD_OUT(1,1,valor)
delay_ms(300)
WEND
End

3
.

N

SI

EJRCICIO 2:

Conversión A/D con el Microcontrolador PIC 16F877. Se adquiere un valor entre 0 y 5

4
voltios y se observa, en el LCD el valor entre 0 y 5 voltios

CÓDIGO :
program Conversor
DIM voltaje as float
dim valor as string [10]
sub procedure init
OPTION_REG = $80
ADCON1=$80
TRISA=$FF
lcd_config(portb,7,6,5,4,portb,0,1,2)
lcd_cmd(lcd_cursor_off)
end sub
main:
init
WHILE TRUE
voltaje=Adc_read(0)

voltaje=(voltaje*5)/1024
FLOATTOSTR(voltaje,valor)
lcd_cmd(lcd_clear)
LCD_OUT(1,1,valor)
delay_ms(300)
WEND
end.

Entradas:
1. Señal análoga
Salidas:
1. Escribir en el LCD
2. Señales de datos
Proceso:
1. Dimensiono la variable voltaje como float.
2. Dimensiono la variable valor como String con un array de diez elementos.
3. Inicializó un sub procedimiento.
4. Configuro el option_reg
5. Configuro entrada análoga y voltaje de referencia.
6. Configuro el puerto A como entrada
7. Configuro los registros internos del LCD
8. Apago el cursor
9. Termino el sub proceso
10. Guardo en la variable voltaje los datos de entrada
11. Realizo una conversión para obtener el voltaje en voltios
12. Cambio la variable voltaje a string
13. Presento el resultado en el LCD
14. Retardo de 300ms

5
6
EJERCICIO 3:
Medición de temperatura con LM35
Los ADC en el pic 18f452 devuelven valores con 10 bits de resolución, se entiende
que este valor comprende de 0 a 5 V, por lo tanto su valor máximo es 1023 y equivale
a los 5 v Para el ejemplo que mostraremos más abajo utilizaremos el sensor LM35
sin realimentación negativa, con lo cual solo podremos obtener lecturas de
temperatura mayores de 0º.

Esquemático

CÓDIGO :
program temperatura
dim temp_res as word
Resultado as word
OutTxt as byte[5]
main:
ADCON1=%10001110
TRISA= %00000001
trisb=0
lcd_config(portb,7,6,5,4,portb,0,1,2)
LCD_Cmd(Lcd_CURSOR_OFF)
Lcd_Cmd(Lcd_Clear)
Lcd_Out(1,1,"Temperat:")
WHILE TRUE
temp_res=Adc_Read(0)
Resultado=temp_res*48
wordtostr(Resultado,OutTxt)

Lcd_Chr(1,11,OutTxt[0])
Lcd_Chr(1,12,OutTxt[1])
Lcd_Chr(1,13,OutTxt[2])
Lcd_Chr(1,14,".")

7
Lcd_Chr(1,15,OutTxt[3])
Lcd_Chr(1,16,OutTxt[4])
delay_ms(1000)
wend
end.

Entradas:
1. Señal análoga del lm35
Salidas:
1. Escribir en el LCD
2. Señales de datos
Proceso:
1. Dimensiono la variable temp_res y resultado como palabra.
2. Dimensiono la variable outtxt como byte de 5.
3. Configuro entrada análoga y voltaje de referencia.
4. Configuro el puerto A como entradas
5. Configuro el puerto b como salidas
6. Configuro los registros internos del LCD
7. Apago el cursor
8. Limpiamos el lcd
9. Mostramos “temp” en el lcd
10. Guardo en la variable temp_res los datos de entrada analogica
11. Guardo en una variable resultado la conversión ADC a temperatura
12. Cambio la variable resultado a string
13. Presento el resultado

8
9
EJERCICIO 4:

Conversion digital analógica.

Codigo:

Program dac

Sub procedure init

Trisd=0

End sub

Dim I as byte

Dim a as byte

a=0

i=0

main:

while true

init

for i=1 to 125

a=a+1

portd=a

next i

delay_ms(100)

wend

end.

Entradas:
1. Señal digital
Salidas:
1. Señales de datos
Proceso:
1. Dimensiono la variable i,a como byte
2. Inicializó un sub procedure
3. Configuro el puerto D como salida
4. Realizo una conversión para obtener el voltaje en voltios
5. Presento el resultado en el osciloscopio

10
6. Retardo de 100ms

EJERCICIO 5:

program dac1
dim i,a as byte
main:
trisd=0
for i=1 to 255
a=0
portd=a
a=a+1
next i
if a=255 then
else
end if
delay_us(100)
for i=255 to 1
a=255
portd=a
a=a-1
next i
if a=0 then
else
end if
goto main
end.

Entradas:
1. Señal digital

Salidas:
1. Señales de datos

Proceso:
1. Dimensiono la variable i,a
como byte
2. Inicializó un sub procedure
3. Configuro el puerto D como
salida
4. Realizo una conversión para obtener el voltaje en voltios
5. Presento el resultado en el osciloscopio
6. Retardo de 100ms

11
12
13
14
15