Está en la página 1de 20

SEPTIEMBRE - FEBRERO 2011

INFORME #6

ERICK PEÑAHERRERA
JOSE BUCHELI
XAVIER MUÑOZ
DATASHEETS
 PIC16F877A

 LCD 16x2
 SENSOR LM35

 DAC 0808

 AMPLIFICADOR OPERACIONAL 741


DESARROLLO PRÁCTICO
OBJETIVO: Utilizar los conversores A/D y D/A del microcontrolador PIC
1. EJERCICIO 1
PROBLEMA:
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.
ALGORITMO:
Entradas:
El puerto A que ingresa la señal del potenciómetro.
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)
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 FLUJO

INICIO

Configuro el puerto A
como entrada y el
puerto B como salida

Realizo subrutina

Configuro el LCD

Leo valor de voltaje en el


Puerto A

Muestro la conversión el
LCD
ESQUEMÁTICO

FOTOS
2. EJERCICIO 2
PROBLEMA:
S 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.
ALGORITMO:
Entradas:
El puerto A que ingresa la señal del potenciómetro.
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)
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 FLUJO

INICIO

Configuro el puerto A
como entrada y el
puerto B como salida

Realizo subrutina

Configuro el LCD

Leo valor de voltaje en el


Puerto A

Muestro el voltaje en el
LCD

Retardo de 300 ms
ESQUEMÁTICO

FOTOS
3. EJERCICIO 3
PROBLEMA:
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.
ALGORITMO:
Entradas:
El puerto A que ingresa la señal del potenciómetro.
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 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
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 FLUJO

INICIO

Configuro el puerto A
como entrada y el
puerto B como salida
Configuro Vref y AN0.

Mostramos “Temp en el LCD”

Leo la entrada Analógica

Leo valor de voltaje en el


Puerto A

Realizamos la conversión
ADC/temperatura

Muestro la conversión en
el LCD

Retardo de 100 ms
ESQUEMÁTICO

FOTOS
4. EJERCICIO 4
PROBLEMA:
Conversión digital análoga
ALGORITMO:
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

FOTOS
5. EJERCICIO 5
PROBLEMA:
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.
ALGORITMO:
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


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)
portc.2=1
tx
ret1
Lcd_Out(2,7, txt1)
Lcd_Out(2,11, " ")
wend
end.
DIAGRAMA DE FLUJO

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

Nota: Esta parte no tenemos fotos a causa de que la práctica se hizo


solamente en simulador proteus 7.7 por la razón de que no encontramos el
circuito integrado MCP 3202

CONCLUSIONES

 La operación de lectura o de adquisición de datos no representa ningún tipo de problema;


solamente se deberá cambiar el orden de los operando en la instrucción respecto a la de
escritura, el ejercicio de la temperatura fue una aplicación muy práctica de las conversiones.

 Que la elaboración nos sirve para comprender un poco más la teoría de los
microcontroladores y su aplicación; de ahí la importancia del mismo, pues a través de él se
puede apreciar lo interesante de la construcción de los microcontroladores y utilizamos los
conversores A/D y D/A del microcontrolador PIC

 Como los puertos están asignados a un espacio separado de la memoria, se tiene


disponible la capacidad total de direccionamiento del microprocesador para circuitos de
memoria.
BIBLIOGRAFIA

 http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf. datasheet. microcontrolador 16f877A


fecha de revisión: 07/12/2010.

 Hojas guías de la práctica. Proporcionadas por el Ing. Luis Oñate

 http://www.national.com/ds/DA/DAC0808.pdf, Microchip, datasheet conversor DAC0808,


fecha de revisión: 07/12/2010.

 http://www.national.com/ds/LM/LM35.pdf, datasheet, Sensor de temperatura LM35, fecha de


revisión: 07/12/2010.

También podría gustarte