MARZO – JULIO 2010
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 QUITO - ECUADOR
PRÁCTICA 05 OBJETIVO: Utilizar los conversores A/D y D/A del microcontrolador 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 AnalogoDigital dim voltaje as word dim valor as string[10] sub procedure init adcon1=$80 trisa=$FF lcd_config(portb,7,6,5,4,po lcd_config(portb,7,6,5,4,portb,0,1,2) rtb,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.
DIAGRAMA DE FLUJOS.
INICIO
Configuro el puerto A como entrada y el puerto B como salida
Realizo subrutina
Configuro el LCD
Leo valor de voltaje en Puerto A
Muestro la conversión el LCD
ESQUEMÁTICO.
FOTOS.
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,po lcd_config(portb,7,6,5,4,portb,0,1,2) rtb,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.
DIAGRAMA DE FLUJOS.
INICIO
Configuro el puerto A como entrada y el puerto B como salida
Realizo subrutina
Configuro el LCD
Leo valor de voltaje en Puerto A
Muestro el voltaje en el LCD
Retardo de 300 ms
ESQUEMÁTICO.
FOTOS.
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 paso=Voltaje/Resolución ADC Donde 5v/1024(bits)=0.00488+1000=4.88 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 conversión ADC/temperatura
•
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,po lcd_config(portb,7,6,5,4,portb,0,1,2) rtb,0,1,2) lcd_cmd(lcd_cursor_off) lcd_cmd(lcd_clear) lcd_out(1,1,"temperatura: lcd_out(1,1,"temperatura: ") while true temp_res = adc_read(0) resultado = temp_res*48
wordtostr(resultado, 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.
DIAGRAMA DE FLUJOS.
INICIO
Configuro el puerto A como entrada y el puerto B como salida. Conf Confii uro uro Vref Vref AN0. AN0.
Mostramos “Temp en el LCD”
Leo la entrada analógica
Realizamos la conversión ADC/temperatura
Muestro la conversión en el LCD
Retardo de 100 ms
ESQUEMÁTICO.
FOTOS.
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
a=a+1 portd=a next i wend end.
ESQUEMÁTICO Y SIMULACIÓN.
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.
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
k=k and %1111111111111000 k=k>>3 wordtostr(k,txt1) l=k floattostr(l,txt1) end sub main: TRISB=0 Spi_Init
' Standard configuration configurat ion
Lcd_Config(PORTb,3,2,1,0,PORTB,5,6,4) Lcd_Cmd(Lcd_CURSOR_OFF) 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)
")
portc.2=1 tx ret1 Lcd_Out(2,7, txt1) Lcd_Out(2,11, " wend end.
")
DIAGRAMA DE FLUJOS.
INICIO
Configuro el puerto B como salida
Defino variables
Configuro el LCD
Realizo lazo while para leer el puerto C
Muestro el voltaje en el LCD
ESQUEMÁTICO.
FOTOS.
CONCLUSIONES. •
Utilizamos los conversores A/D y D/A del microcontrolador microcontrolador PIC
•
Con esta práctica se optimizó las conversiones 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 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 Proporcionadas por el Ing. Luis Oñate
•
Ayuda del software Mikrobasic.