Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Descripción.-
Este laboratorio propone desarrollar un conversor análogo digital y así conocer los registros
del controlador ATMEGA32 encargados de controlar los puertos analógicos.
Para ello el microcontrolador Atmega posee 8 pines habilitados para la conversión análogo-
digital, su método de conversión es por aproximaciones sucesivas y su resolución es de 10 bits.
En el registro ADMUX:
o Configuramos los bits REFS1 y REFS0 para seleccionar el voltaje de referencia
o Determinamos el ajuste del resultado de la conversión a la izquierda o a la
derecha
o Elegimos el canal de entrada analógica
En el registro ADCSRA:
o Para la conversión colocamos el bit ADEN a 1
o Para la conversión el módulo de conversión necesita una frecuencia de reloj
que nosotros tomamos de la base de frecuencia del oscilador del
microcontrolador.
En el registro SFIOR
o Determina el evento de conversión análogo-digital en modo auto disparo,
algunos eventos que disparan la conversión son:
Comparador analógico
Interrupciones externas
Temporizadores
Firmas.-
Para este laboratorio logramos conseguir una firma, la segunda, por falta de tiempo para la
presentación ya que el código ya estaba en funcionamiento en la simulación, no se logró
hacer.
Implementación y resultados.-
DFD:
Firma 1:
Inicio
NO SI
Switch = 1
Entrada 2 Entrada 1
Conversor
Analogo-digital
Salida Puertos
DyB
FIN
Firma 2:
Inicio
NO SI
Switch1 = 1
NO SI NO SI
Switch2 = 1 Switch2 = 1
Conversor
Analogo-digital
Salida Puertos
DyB
FIN
Código:
Firma 1:
FIRMA 2:
rjmp start ; va al programa Principal
start:
ldi r16,$04 ; cargamos r16 con $04
out sph,r16
ldi r16,$5F
out spl,r16 ; la pila : stack: $045F = RAMEND
ser r16 ; cargamos r16 con $FF
out ddrd,r16 ; Puerto D como salidas
ldi r17,0b00111111 ;
out ddrb,r17; Puerto B(0-5) como salidas y B(6-7)como entradas
rjmp programa ; vamos al programa
programa:
SBIC PINB,7 ; preguntamos si el pin 7 del puerto b esta en uno
RJMP btn ; si esta en uno saltamos a btn
RJMP ben1 ; si esta en cero saltamos a btn1
btn:
SBIC PINB,6; preguntamos si el pin 6 del puerto b esta en uno
RJMP uno ; si esta en uno saltamos a uno
RJMP dos ; si esta en uno saltamos a dos
btn1:
SBIC PINB,6 ; preguntamos si el pin 6 del puerto b esta en uno
RJMP tres ; si esta en uno saltamos a tres
RJMP cuatro ; si esta en uno saltamos a cuatro
uno:
ldi r16,$40
out admux,r16 ; configuramos ADC a canal 0; con ajuste a la derecha
RJMP convertir
dos:
ldi r16,$42
out admux,r16; configuramos ADC a canal 2; con ajuste a la derecha
RJMP convertir
uno:
ldi r16,$44
out admux,r16 ; configuramos ADC a canal 4; con ajuste a la derecha
RJMP convertir
dos:
ldi r16,$46
out admux,r16; configuramos ADC a canal 6; con ajuste a la derecha
RJMP convertir
convertir:
ldi r16,$85
out adcsra,r16 ; habilito ADC, interrupción y free running desactivados, divisor 32
call delay200u; retardo para iniciar conversor
sbi adcsra,adsc ; iniciamos conversor A/D, seteando el bit ADSC
sbis adcsra,adsc; pregunto por el bit de conversión terminada
rjmp leer ; si termino la conversión voy a leerla
rjmp convertir ; sino sigue esperando hasta que termine
leer:
in r16,adcl ; carga el valor ADCL en R16
out portd,r16 ; Muestra por el puerto D
in r16,adch ; carga el valor ADCH en R16
out portb,r16 ; Muestra por el puerto B
call delay25m ; retardo para visualizar
rjmp programa ; bucle infinito
; programa para el retardo
delay25m:
ldi r17,$A5
WGOOP0: ldi r18,$C9
WGOOP1: dec r18
brne WGOOP1
dec r17
brne WGOOP0
ldi r17,$03
WGOOP2: dec r17
brne WGOOP2
nop
ret
delay200u:
ldi r17,$02
WGOOP3:ldi r18,$84
WGOOP4: dec r18
brne WGOOP4
dec r17
brne WGOOP3
nop
nop
ret
Esquematico:
Firma 1:
Firma 2;
Bibliografía.-