Cryn
Cryn
Cryn
Hola Belgitaes, gracias por las respuestas y estaba viendo un poco rara la
correccin que me dabas, espero no quede dems decirte que si, hice la prueba
con las lneas que me dijiste que aumente y de todas formas segua funcionando
mal, pero en fin, ya va todo bien, te adjunto las secciones exportadas que saque
de los 6 primeros ejemplos que hice, para que si gustes puedas simularlo en el
proteus.
Enseguida ir colocando los siguientes ejemplos, como los anteriores.
saludos
Cryn:
EJEMPLO 4
Veremos un poco de las interrupciones, como bien sabemos una interrupcin es
un evento especial, ya que "interrumpe" al microcontrolador de su ejecucin en
curso, podramos mencionar como ejemplo el hecho de que el microcontrolador
este ocupado ejecutando una secuencia de cdigo para sumar multiplicar y hacer
algunos procesos ms de unos datos, una interrupcin se genera y el
microcontrolador es obligado a detener su ejecucin de ese proceso que estaba
haciendo y desviar su atencin por un momento para ejecutar un cdigo (rutina)
que se debe hacer por la presencia de la interrupcin, posteriormente cuando se
termine de ejecutar la rutina que se hace por la interrupcin, el procesador del
microcontrolador vuelve a ejecutar el proceso que antes estaba haciendo desde el
lugar desde donde fue interrumpido.
Las interrupciones tienen muchas ventajas, ya que se puede de cierta manera
obtener una especie de "paralelismo" porque el micro puede ejecutar el cdigo
principal, y en momentos especiales por las interrupciones, dedicarlo a ellos, que
nos puede hacer a la vista nuestra un efecto de ese tipo. Pero a la vez se debe
tener cuidado en su manejo, pues son un arma de doble filo si no son bien
administradas, en caso de tener que usar muchas interrupciones, o al tener mucho
cdigo que ejecutar en la rutina de interrupcin.
El microcontrolador tiene varias fuentes de interrupcion, como ser, por
Bit 3, 2 ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0: Se usan para
la INT1
Bit 1, 0 ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0: Se usan para
la INT0, y responde a la siguiente tabla:
Que nos dice como se generar la interrupcin, con un estado bajo en el pin, por
cualquier cambio de estado, por flanco de bajada, o por flanco de subida.
GICR General Interrupt Control Register
Bit 6 INT0: External Interrupt Request 0 Enable: Mediante este bit puesto en 1
se activa la mscara de Interrupcin Externa 0, esto quiere decir que activando el
bit de interrupciones globales se podr esperar por la interrupcin configurada.
GIFR General Interrupt Flag Register
int_ext:
ser flag ;ponemos flag a 255
reti ;retorno de rutina de interrupcin, habilitando I del SREG
;PROGRAMA PRINCIPAL
main:
ldi r16,$04
;Configuracion de...
out sph,r16
ldi r16,$5F
out spl,r16
;...la pila: Stack: $045F=RAMEND
ser r16
;r16 <- $FF
out ddrc,r16
;portC salida
ldi r16,$fb
;r16 <- $fb
out ddrd,r16
;portD salidas, excepto D2
ldi r16,3 ;r16 <- 3
out mcucr,r16 ;configuramos a modo sleep idle, y flanco de subida para INT0
ldi r16,$40 ;r16 <- $40
out gicr,r16 ;activamos la mscara de la INT0
clr r16 ;r16 <- 0
out gifr,r16 ;limpiarmos flags de interrupcion INTF0 e INTF1
sts unidades,r16 ;unidades <- 0
sts decenas,r16 ;decenas <- 0
clr flag ;bandera para identificar interrupcin pueta a 0
sei ;se habilitan las interrupciones globales
ldi r30,low(seg7) ;se carga en Z
ldi r31,high(seg7) ;la direccin en flash de los datos del display
ldi r16,2 ;r16 <- 2
add r30,r16 ;adecuamos el puntero Z para qeu apunte a bytes
loop:
cpi flag,255 ;preguntamos si flag es 255
breq incremento ;si es 255, la interrupcin ocurri, saltamos a incrementar
unidades
multi:
rcall multiplexar ;vamos a visualizar los datos en los displays
rjmp loop
;bucle infinito
incremento:
;rcall delay25m ;retardo antirrebote
rcall multiplexar ;mostramos datos, hasta que se suelte el pulsador
sbic pind,2 ;pin D2 esta todava siendo pulsado?
rjmp incremento ;si, est pulsado, volvemos a generar retardo, sino se salta
instruccin
lds r16,unidades ;r16 <- unidades
lds r17,decenas ;r17 <- decenas
inc r16 ;incrementamos el valor de r16 que contiene el valor de unidades
cpi r16,10 ;r16<10?
brmi salir ;si es menor, salimos, sino...
clr r16 ;r16 <- 0, unidades a cero
inc r17 ;incrementamos r17 que contiene el valor de decenas
cpi r17,10 ;r17<10?
brmi salir ;si es menor, salimos, sino...
clr r17 ;r17 <- 0,decenas a cero
salir:
sts unidades,r16 ;unidades <- r16
sts decenas,r17 ;decenas <- r17
clr flag ;ponemos flag a 0
rjmp multi ;volvemos a multiplexar, con los nuevos datos
multiplexar:
sbi portc,0 ;apagamos ambos
sbi portc,1 ;displays
lds r16,unidades ;r16 <- unidades
lds r15,decenas ;r17 <- decenas
mov r28,r30 ;copiamos la direccin donde estan
mov r29,r31 ;los datos del display
add r30,r16 ;se suma el valor de unidades, para desplazarse en la tabla
lpm r16,Z ;r16 <- (Z)
mov r30,r28 ;r30 <- r28
add r30,r15 ;se suma el valor de decenas, para desplazarse en la tabla
lpm r15,Z ;r17 <- (Z)
mov r30,r28 ;r30 <- r28
out portd,r16 ;se muestra en el display de unidades, el valor correspondiente
; 4000 cycles:
; ----------------------------; delaying 3999 cycles:
delay1m:
ldi R17, $1F
WGLOOP00: ldi R18, $2A
WGLOOP11: dec R18
brne WGLOOP11
dec R17
brne WGLOOP00
; ----------------------------; delaying 1 cycle:
nop
ret
; =============================
esquema:
circuito montado:
y el video funcionando:
Cryn:
Ejemplo 5
Es el turno de estudiar algo del Conversor Analgico a Digital, este tiene una
resolucin de conversin de 10bits de hasta 15kSPS, 6 canales Analgicos,
Ajuste a derecha i izquierda del resultado de la conversin, Voltajes de referencia,
2 modos de conversin: simple y contnuo, Interrupcin en el momento de la
conversin completada, cancelacin de ruido activando modo Sleep, y algunos
m que se pueden ver en la hoja de datos.
El mtodo de conversin que usa el micro es de aproximaciones sucesivas.
Los registros involucrados con el Conversor A/D son:
ADMUX ADC Multiplexer Selection Register ADMUXADCSRA ADC
Control and Status Register AADCL and ADCH The ADC Data Register
ADMUX ADC Multiplexer Selection Register ADMUX
Bit 7:6 REFS1:0: Reference Selection Bits:Se utilizan para seleccionar el tipo
de voltaje de referncia que se usar, si interno, externo o deshabilitado, segn la
tabla:
En este registro se hacen las dems configuraciones y tambin se tiene los bits de
control de inicio/fin de conversin.
Bit 7 ADEN: ADC Enable: Es la habilitacin del ADC para su uso (1), caso
contrario el ADC estar apagado (0)
Bit 6 ADSC: ADC Start Conversion: Colocando un 1 en este bit se inicia la
conversin analgica, ya sea en modo normal o en modo contnuo, salvo que en
el contnuo no har falta volverlo a colocar a 1 cuando se necesite otra
conversin, lo que si se debe hacer en modo normal, ya que el conversor en este
modo coloca a cero por hardware a este bit cuando la conversin AD se ha
terminado.
Bit 5 ADFR: ADC Free Running Select: Con 1 se habilita el modo contnuo
(free running), y el ADC muestrear y actualizar los registros de datos de la
conversin contnuamente, colocando un 0 el modo contnuo se detiene.
Bit 4 ADIF: ADC Interrupt Flag: Este bit se coloca a 1 cuando la conversin
AD es completada y los registros de datos de la conversin son actualizados. Se
ejecutar la rutina de interrupcin si esta implementada y se tiene configurada las
mscaras correspondientes para esta interrupcin y el bit de Interrupciones
globales, y se pondr a 0 por hardware al terminar la rutina de interrupcin.
Bit 3 ADIE: ADC Interrupt Enable: Es la mscara de habilitacin para la
interrupcin por Conversin AD completada, se la habilita colocando un 1.
Bits 2:0 ADPS2:0: ADC Prescaler Select Bits: Estos bits determinan el divisor
entre la frecuencia del Osilador principal y la entrada de reloj del ADC, es segn
la tabla:
ADLAR=1
;PROGRAMA PRINCIPAL
main:
ldi r16,$04
;Configuracion de...
out sph,r16
ldi r16,$5F
out spl,r16
;...la pila: Stack: $045F=RAMEND
clr r16
;r16 <- $00
out ddrc,r16
;portC entrada
ser r16 ;r16 <- $ff
out ddrd,r16
;portD salidas
out ddrb,r16 ;portB salidas
ldi r16,$40
;r16 <- $40
out admux,r16 ;configuro ADC a canal0, ajuste a derecha y referencia en Vref
con capacitor
ldi r16,$85 ;r16 <- $85
out adcsra,r16 ;habilito ADC, interrupcion y free running desactivados, divisor
32
rcall delay200u ;retardo para inicializar el conversor A/D
;se necesita 25 cilos del clock ADC, el clock ADC esta puesto a
4MHz/32=125kHz
;25 ciclos de 125Khz, es 200us que se debe esperar para la configuracin de todo
el circuito
;interno del conversor A/D del micro
loop:
sbi adcsra,adsc ;se inicia conversion A/D, seteando el bit adsc
convertir:
sbis adcsra,adsc ;pregunto por el bit de conversin terminada
rjmp leer ;si termino la conversin, voy a leer la conversin
rjmp convertir ;si no se sigue esperando hasta que termine
leer: ;rutina de lectura de los datos convertidos
in r16,adcl ;carga el valor de ADCL en r16
out portd,r16 ;muestra por el puertoD
in r16,adch ;carga el valor de ADCH en r16
out portb,r16 ;muestra por el puertoB
rcall delay25m ;retardo para visualizar, puede no ser necesario
brne WGLOOP3
; ----------------------------; delaying 2 cycles:
nop
nop
ret
; =============================
El circuito montado:
En este registro se colocar el dato ledo tras una lectura de una direccin de la
EEPROM o se colocar el dato a escribir en la EEPROM. Es entonces un registro
de lectura y escritura.
EECR The EEPROM Control Register
Este registro posee 4 bits importantes para el manejo de la eeprom, estos son:
Bit 3 EERIE: EEPROM Ready Interrupt Enable: Habilita interrupcin cuando
EEWE cambia de 1 a 0
Bit 2 EEMWE: EEPROM Master Write Enable: Es la habilitacin de escrituras
en la EEPROM
Bit 1 EEWE: EEPROM Write Enable: Colocando un 1, comienza la escritura
del dato escrito previamente en EEDR en la direccin que tambin se escribi
previamente en EEARH y EEARL, el bit EEWE se volver a 0 por hardware
cuando se termine la escritura.
Bit 0 EERE: EEPROM Read Enable: Colocando un 1, comienza la lectura del
dato de la direccin cargada previamente en EEARH y EEARL, el dato ser
guardado en EEDR, el bit EERE se volver a 0 por hardware cuando se termine
la lectura.
En caso que la energa de alimentacin al microcontrolador no sea la adecuada,
se peude tener escrituras de datos corruptos.