conversores dac y adc con pic16f877a
TRANSCRIPT
![Page 1: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/1.jpg)
UNIVERSIDAD POLITÉCNICA
SALESIANA
SISTEMAS MICROPROCESADOS 1
INFORME PRÁCTICA #06
TEMA: Conversión análoga digital y digital análoga.
DAVID ESPIN
ANDRÉS MOGRO
MARZO – JULIO 2010
QUITO - ECUADOR
![Page 2: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/2.jpg)
PRÁCTICA 05
OBJETIVO: Utilizar los conversores A/D y D/A del microcontrolador PIC
1. Conversión A/D con el microcontrolador pic 16f877a. 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.
Entradas:
• El puerto A que ingresa la señal del potenciómetro.
• Datos que se guardan en el microcontrolador
Procesos:
• Configuro el LCD en el puerto B
• Leo la señal del potenciómetro.
• Transformo la señal y la envío al LCD
Salidas:
La salida del puerto B hacia el LCD.
CÓDIGO.
program AnalogoDigital
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)
![Page 3: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/3.jpg)
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.
![Page 4: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/4.jpg)
DIAGRAMA DE FLUJOS.
INICIO
Configuro el puerto A
como entrada y el
puerto B como salida
Configuro el LCD
Leo valor de voltaje
en Puerto A
Muestro la conversión
el LCD
Realizo subrutina
![Page 5: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/5.jpg)
ESQUEMÁTICO.
FOTOS.
![Page 6: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/6.jpg)
2. Conversión A/D con el microcontrolador pic 16f877A
Se requiere un valor entre 0 y 5 voltios y se observa en el LCD el
valor entre 0 y 5 voltios.
Entradas:
• El puerto A que ingresa la señal del potenciómetro.
• Datos que se guardan en el microcontrolador
Procesos:
• Configuro el LCD en el puerto B
• Leo la señal del potenciómetro.
• Muestro el voltaje en el LCD
Salidas:
La salida del puerto B hacia el LCD.
CÓDIGO.
program analogdig1
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)
![Page 7: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/7.jpg)
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.
![Page 8: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/8.jpg)
DIAGRAMA DE FLUJOS.
INICIO
Configuro el puerto A
como entrada y el
puerto B como salida
Configuro el LCD
Leo valor de voltaje
en Puerto A
Muestro el voltaje en el
LCD
Realizo subrutina
Retardo de 300 ms
![Page 9: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/9.jpg)
ESQUEMÁTICO.
FOTOS.
![Page 10: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/10.jpg)
3. Medición de temperatura con LM35
El LM35 es un sensor analógico que devuelve la temperatura en forma de
tensión esta tensión devuelta es proporcional a la temperatura, Su rango
comprende desde -55º hasta 150 ºC y el valor devuelto es el equivalente a
la temperatura dividida por 10. Entonces es su salida se obtiene valores
como estos:
1000mv=100 ºC
240mv=24 ºC
-300mv=-30 ºC
En el Microcontrolador hay que implementar una regla de tres con el valor
analógico leído, de forma que podamos trabajar con el valor devuelto en
formato de temperatura real, ya sea para hacer un termómetro con
avisador o simplemente para mostrar la lectura en un LCD.
Los ADC en el pic 18f452 devuelven valores con 10bits de resolución, se
entiende que este valor comprende de 0-5v por lo tanto su valor máximo
es 1023y equivale a los 5voltios para el ejemplo que mostraremos más
abajo utilizaremos el sensor LM35 sin realimentación negativa con el cual
solo podemos obtener lectura de temperatura mayores a 0º.
Para esto utilizaremos esta expresión:
Resolución por paso=Voltaje/Resolución ADC
Donde 5v/1024(bits)=0.00488+1000=4.88
Ahora se multiplica por el valor de 10 devuelto para obtener un segundo
decimal del resultado de la conversión ADC/Temperatura, con esto
tenemos un valor que hemos redondeado a 48.
Entradas:
• El puerto A que ingresa la señal del potenciómetro.
• Datos que se guardan en el microcontrolador
Procesos:
• Configuro el LCD en el puerto B
• Leo la señal del potenciómetro.
• Configuro Vref y AN0
• Leo la entrada analógica
• Realizamos la conversión ADC/temperatura
![Page 11: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/11.jpg)
• Muestro la conversión en el LCD
Salidas:
La salida del puerto B hacia el LCD.
CÓDIGO.
program LM35
dim temp_res as word
dim resultado as word
dim 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,"temperatura: ")
while true
temp_res = adc_read(0)
resultado = temp_res*48
![Page 12: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/12.jpg)
wordtostr(resultado, outtxt)
lcd_chr(1,6,outtxt[0])
lcd_chr(1,7,outtxt[1])
lcd_chr(1,8,outtxt[2])
lcd_chr(1,9,".")
lcd_chr(1,10,outtxt[3])
lcd_chr(1,11,outtxt[4])
wend
end.
![Page 13: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/13.jpg)
DIAGRAMA DE FLUJOS.
INICIO
Configuro el puerto A
como entrada y el
puerto B como salida.
Configuro Vref y AN0.
Leo la entrada
analógica
Realizamos la conversión ADC/temperatura
Muestro la conversión
en el LCD
Mostramos “Temp
en el LCD”
Retardo de 100 ms
![Page 14: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/14.jpg)
ESQUEMÁTICO.
FOTOS.
![Page 15: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/15.jpg)
4. Conversión digital análoga
Entradas:
Para este ejercicio no hay entradas
Procesos:
• Configuro el puerto D como salida
• Realizo un lazo while para hacer un contador
• El puerto D será igual al valor del contador
Salidas:
La salida del puerto D hacia el DAC 0808 y del DCA 0808 hacia el LM 741
para observar la conversión.
CÓDIGO.
program DAC
sub procedure init
trisd=0
end sub
dim i as byte
dim a as byte
main:
init
while true
a=0
i=0
for i=1 to 255
![Page 16: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/16.jpg)
a=a+1
portd=a
next i
wend
end.
ESQUEMÁTICO Y SIMULACIÓN.
![Page 17: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/17.jpg)
FOTOS.
5. Conversión Análogo digital de 12 bits
MCP 3202
El conversor A/D 12 bits MCP320X soporta 100K muestras por segundo,
consume 400mA en modo funcionamiento y 500 nA en modo espera,
alimentado de 2.7V a 5.5 V y un rango de temperatura de -40C a 85C.
Otras características son ± 1 LSB DNL y ±1 LSB INL a 100k muestras/s, si
pérdida de código y una interface de salida serie para SPI. Estos nuevos
dispositivos están disponibles de 1, 2,4, 8 canales y una gran variedad de
encapsulados y números de pines.
![Page 18: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/18.jpg)
Entradas:
Para este ejercicio no hay entradas
Procesos:
• Declaro variables.
• Configuro puerto B como salida
• Configuro el LCD para el puerto B
• Configuro puerto C (portc.2)
• Leo el valor de la conversión
Salidas:
La salida del puerto B hacia el LCD para visualizar la conversión.
CÓDIGO.
program conversor12
dim i as byte
dim j as byte
dim k as word
dim l as float
dim txt1,txt2 as string[6]
sub procedure ret1 delay_ms(1000) end sub
sub procedure tx
k=i <<8
k=k+j
![Page 19: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/19.jpg)
k=k and %1111111111111000
k=k>>3
wordtostr(k,txt1)
l=k
floattostr(l,txt1)
end sub
main:
TRISB=0
Spi_Init ' Standard configuration
Lcd_Config(PORTb,3,2,1,0,PORTB,5,6,4)
Lcd_Cmd(Lcd_CURSOR_OFF) ' Turn off cursor
Lcd_Out(1, 1, " CONVERSOR ")
Lcd_Out(2, 1, " ")
TRISC = TRISC and $FB
portc.2=1
while true
portc.2=0
Spi_Write(%1011)
i = Spi_Read(i)
j = Spi_Read(j)
![Page 20: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/20.jpg)
portc.2=1
tx
ret1
Lcd_Out(2,7, txt1)
Lcd_Out(2,11, " ")
wend
end.
![Page 21: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/21.jpg)
DIAGRAMA DE FLUJOS.
INICIO
Configuro el puerto B
como salida
Configuro el LCD
Realizo lazo while
para leer el puerto C
Muestro el voltaje en el
LCD
Defino variables
![Page 22: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/22.jpg)
ESQUEMÁTICO.
FOTOS.
![Page 23: Conversores DAC y ADC Con PIC16F877A](https://reader034.vdocuments.mx/reader034/viewer/2022050708/5526e29b4a795946118b45b0/html5/thumbnails/23.jpg)
CONCLUSIONES.
• Utilizamos los conversores A/D y D/A del microcontrolador PIC
• Con esta práctica se optimizó las conversiones tanto A/D y D/A.
• El ejercicio de la temperatura fue una aplicación muy práctica de las
conversiones
BIBLIOGRAFÍA
• MICROCONTROLADORES PIC. Diseño práctico de aplicaciones
SEGUNDA PARTE: PIC 16F87X PIC 18FXXXX. Segunda edición.
Segundo Angulo, Susana Romero, Mc Graw Hill. España.
• Hojas guías de la práctica. Proporcionadas por el Ing. Luis Oñate
• Ayuda del software Mikrobasic.