DEDICATORIA A mi Amada Esposa Lutecia. A Mamá y Papá.
CONTENIDO
ITRODUCCIÓ ... 7
OMBRE DEL PERIFÉRICO: TIMER/COUTER 1. ... 9
DESCRIPCIÓN GENERAL. ... 9
DISPONIBLE EN ... 9
APLICACIONES ... 9
REGISTROS INVOLUCRADOS ... 9
MODO TEMPORIZADOR Y MODO CONTADOR. ... 13
SECUENCIA DE CONFIGURACIÓN MODO TEMPORIZADOR Y CONTADOR... 14
I.S.R. ... 14
MODO CAPTURA ... 15
SECUENCIA DE CONFIGURACIÓN MODO CAPTURA. ... 16
I.S.R. ... 16
MODO COMPARADOR DE IGUALDAD. ... 17
SECUENCIA DE CONFIGURACIÓN MODO COMPARADOR DE IGUALDAD. ... 18
I.S.R. ... 18
MODO GENERADOR DE SEÑALES PWM (MODULACIÓN POR ANCHO DE PULSO) ... 19
SECUENCIA DE CONFIGURACIÓN MODO PWM. ... 21
I.S.R. ... 21
IMPLANTACIÓN. ... 22
TIMER/COUNTER 1 MODO TEMPORIZADOR. ... 22
TIMER/COUNTER 1 MODO CAPTURA. ... 23
TIMER/COUNTER 1 MODO GENERADOR DE SEÑALES PWM. ... 25
TIMER/COUNTER 1 MODO COMPARADOR DE IGUALDAD. ... 26
OMBRE DEL PERIFÉRICO: TIMER/COUTER0. ... 29
FUNCIONAMIENTO GENERAL ... 29 DISPONIBLE EN ... 29 APLICACIONES ... 29 REGISTROS INVOLUCRADOS. ... 29 SECUENCIA DE CONFIGURACIÓN ... 32 I.S.R. ... 32 IMPLANTACIÓN. ... 33
TIMER/COUNTER 0 MODO TEMPORIZADOR. ... 33
NOTAS DE CONFIGURACIÓN. ... 35
OMBRE DEL PERIFÉRICO: ADC- COVERTIDOR AALÓGICO DIGITAL. 37 DESCRIPCIÓN GENERAL. ... 37
DISPONIBLE EN ... 37
APLICACIONES ... 37
REGISTROS INVOLUCRADOS ... 37
SECUENCIA DE CONFIGURACIÓN ADC. ... 39
I.S.R. ... 40
IMPLANTACION ... 41
OMBRE DEL PERIFÉRICO: COMPARADOR AALÓGICO. ... 45
APLICACIONES ... 45
REGISTROS INVOLUCRADOS ... 45
DISPOSITIVO: AT90S8515, AT90S2313, AT90XX4434, AT90XX8535. ... 45
DISPOSITIVO AT90S1200. ... 45
DISPOSITIVO AT90XX2333, AT90XX4433. ... 45
SECUENCIA DE CONFIGURACIÓN COMPARADOR ANALÓGICO. ... 47
I.S.R. ... 48
IMPLANTACION ... 49
OMBRE DEL PERIFÉRICO: PERRO GUARDIÁ (WATCHDOG TIMER). ... 52
DESCRIPCIÓN GENERAL. ... 52 DISPONIBLE EN ... 52 APLICACIONES. ... 52 REGISTROS INVOLUCRADOS. ... 52 FUNCIÓN ... 52 SECUENCIA DE CONFIGURACIÓN WDT. ... 53 IMPLANTACIÓN. ... 54
OMBRE DEL PERIFÉRICO: SPI - ITERFAZ SERIAL PERIFERICA. ... 56
DESCRIPCIÓN GENERAL ... 56
DISPONIBLE EN ... 56
APLICACIONES ... 56
REGISTROS INVOLUCRADOS ... 56
FUNCION DE LOS PINES MOSI, MISO, SCK Y SS EN MODO MAESTRO. ... 58
FUNCION DE LOS PINES MOSI, MISO, SCK Y SS EN MODO ESCLAVO. ... 59
FASE Y POLARIDAD DE LA SEÑAL DE RELOJ. ... 59
SECUENCIA DE CONFIGURACIÓN SPI. ... 60
I.S.R. ... 60
IMPLANTACION ... 61
OMBRE DEL PERIFÉRICO: UART - UIVERSAL ASYCHROOUS RECEIVER AD TRASMITTER. ... 64
DESCRIPCIÓN GENERAL. ... 64
DISPONIBLE EN ... 64
APLICACIONES ... 64
REGISTROS INVOLUCRADOS ... 64
RECEPCIÓN Y TRANSMISIÓN DE DATOS. ... 65
SELECCIÓN DEL BAUD RATE... 66
EJEMPLO NUMERICO. ... 67
SECUENCIA DE CONFIGURACIÓN UART ... 68
I.S.R. ... 69
IMPLANTACION ... 69
GLOSARIO ... 73
TABLAS
Tabla TC1-1. Registros Involucrados con el Timer/Counter1. ... 11
Tabla TC1-2. Bits y función de los registros especiales para el Timer/Counter1. ... 12
Tabla TC1-2. Función de los Bits de los registros especiales para el Timer/Counter1. ... 13
Tabla TC1-3. Función de los Registros Especiales de 16 Bits asociados con el Timer/Counter1. ... 13
Tabla TC1-4. Bits CS12-CS11-CS11 del registro TCCR1B y su Efecto sobre el registro TCNT1 ... 14
Tabla TC1-5 Vector de Interrupción para Timer/Counter1 Overflow. ... 15
Tabla TC1-6 Efecto del bit ICES1 del registro TCCR1B. ... 15
Tabla TC1-7 Efecto del bit ICNC1 del registro TCCR1B. ... 15
Tabla TC1-8 Vector de Interrupción para el evento de captura del Timer/Counter1... 16
Tabla TC1-9. Efecto de los bits COM1A1 y COM1A0 del registro TCCR1A sobre el pin OC1A. ... 17
Tabla TC1-10. Efecto de los bits COM1B1 y COM1B0 del registro TCCR1A sobre el pin OC1B. ... 17
Tabla TC1-11. Número de pin correspondiente a OC1A y OC1B. ... 18
Tabla TC1-12 Vector de Interrupción para el evento de comparación de igualdad del Timer/Counter1. ... 19
Tabla TC1-13. Efecto de los bits COM1x1-COM1x0 del registro TCCR1A. (x puede ser A o B). ... 20
Tabla TC1-14. Efecto de los bits PWM11y PWM10 del registro TCCR1A. ... 20
Tabla TC1-15. Frecuencia de la Señal PWM, Valores máximos de TCNT1, y Resolución. T1 es la frecuencia a la que se incrementa TCNT1. ... 21
Tabla TC0-1. Registros involucrados con el Timer/Counter 0. ... 29
Tabla TC0-2. Bits y función de los registros especiales para el Timer/Counter 0. ... 30
TABLA TC0-3. Origen de la señal de reloj y pre escalamiento. ... 31
Tabla TC0-4. Localización de pin T0 para la familia AT90X. ... 31
Tabla TC0-5. Vector de interrupción para Timer/Counter 0 ... 33
Tabla ADC-1A. Registros Involucrados con ADC ... 37
Tabla ADC-1B. Registros Involucrados con ADC. ... 37
Tabla ADC-1C. Registros Involucrados con ADC. ... 37
Tabla ADC-2. Bits de los registros especiales utilizados para el ADC. ... 38
Tabla ADC-3. Selección canal de entrada con los bits MUX2, MUX1 y MUX0 del registro ADMUX. ... 38
Tabla ADC-4. Localización de las entradas para el ADC en la familia AVR. (EMPAQUETADO DIP). ... 39
Tabla ADC-5. Efecto de los bits ADPS2-ADPS0 del registro ADCSR en la selección de la señal AD Clock. ... 39
Tabla ADC-6. Vectores de interrupción para el ADC. ... 40
Tabla CA-1A. Registros Involucrados con el Comparador Analógico. ... 45
Tabla CA-1B. Registros Involucrados con el Comparador Analógico. ... 45
Tabla CA-1C. Registros Involucrados con el Comparador Analógico. ... 45
Tabla CA-3. Efecto de los bits ACIS1 y ACIS0 del registro ACSR en la generación de
interrupción del Comparador Analógico. ... 47
Tabla CA-4. Localización de los pines AIN0 y AIN1 en la familia AVR. EMPAQUETADO DIP). ... 47
Tabla CA-5. Vectores de interrupción para el comprador analógico. ... 48
Tabla WDT-1A. Registros involucrados. ... 52
Tabla WDT-1B. Registros involucrados. ... 52
Tabla WDT-2. Origen de la señal de reloj y pre escalamiento para el perro guardián. ... 53
Tabla SPI-1A. Registros Involucrados con SPI ... 56
Tabla SPI-1B. Registros Involucrados con SPI. ... 56
Tabla SPI-1C. Registros Involucrados con SPI. ... 56
Tabla SPI-2. Bits de los registros especiales utilizados para el SPI ... 57
Tabla SPI-3. Efecto de los bits SPR1 y SPR0 del registro SPCR sobre la frecuencia de la señal de Clock. ... 57
Tabla SPI-4. Localización de los pines MISO, MOSI, SCK y SS en la familia AVR. (EMPAQUETADO DIP). ... 58
Figura SPI-1. Efecto del bit CPHA sobre la señal SCK. ... 59
Tabla SPI-5. Vectores de interrupción para el SPI. ... 61
Tabla UART-1. Registros Involucrados con UART ... 64
Tabla UART-2. Bits de los registros especiales utilizados UART. ... 65
Tabla UART-3. Localización de los pines TXD y RXD en la familia AVR. (EMPAQUETADO DIP). ... 66
Tabla UART-4. Valores más comunes de Baud Rate. ... 67
Tabla UART-5. Valores de UBRR para algunas frecuencias de cristal. ... 68
ITRODUCCIÓ
Un periférico es un circuito electrónico especial incluido en un microcontrolador, que realiza una función o tarea específica. Los periféricos de un microcontrolador permiten ahorro de espacio y dinero en muchas aplicaciones electrónicas.
Este libro muestra de una manera clara y concisa, la forma de configurar todos los periféricos incluidos en los microcontroladores de la familia AVR de ATMEL(1). No se pretende que este trabajo sea un sustituto de las hojas de especificaciones proporcionadas por ATMEL, sino más bien, se espera que sirva como una herramienta de consulta para aquellas personas que ya utilizan la familia AVR, y como una guía para aquellos que comienzan a estudiar o a realizar proyectos con microcontroladores.
Cada capítulo del libro es dedicado completamente a un periférico en especifico. Se incluye en cada uno de los capítulos las secciones siguientes:
♦ DESCRIPCIÓ GEERAL. En esta sección se describe el funcionamiento general del periférico.
♦ DISPOIBLE E. Se muestran los microcontroladores en los que esta incluido cada periférico.
♦ APLICACIOES. Son mencionadas algunas aplicaciones donde puede ser utilizado.
♦ REGISTROS IVOLUCRADOS. Se describe el efecto de cada bit de los registros especiales involucrados con cada periférico.
♦ SECUECIA DE COFIGURACIÓ. En esta sección de cada capitulo se explica paso a paso cómo configurar un periférico. Si el lector ya ha tenido contacto con microcontroladores, puede ir directamente a esta sección y a la sección IMPLANTACIÓN sin problema alguno.
♦ I.S.R. Se incluyen los vectores y las direcciones de interrupción, así como una descripción de las condiciones que hacen que se genere cada interrupción.
♦ IMPLATACIÓ. Cada capítulo del libro incluye el código fuente completo para configurar un periférico y dejarlo funcionando correctamente. Se implantan todos los pasos descritos en la sección SECUE$CIA DE CO$FIGURACIÓ$. El código esta escrito en lenguaje ensamblador y totalmente comentado. Si el lector programa en otro lenguaje diferente a ensamblador, puede tomar como referencia el código fuente proporcionado en esta obra.
(1)
Los microcontroladores AVR de ATMEL que se tratan en este libro son los siguientes: AT90S1200, AT90S2313, AT90xS2323, AT90xS2343, AT90xS2333,AT90xS4433, AT90S8515, AT90S4414, AT90xS4434, AT90xS8535, AT90xS8534.
OMBRE DEL PERIFÉRICO: TIMER/COUTER 1. DESCRIPCIÓ GEERAL.
El Timer/Counter1 es un periférico bastante flexible, con él se puede medir intervalos de tiempo, contar pulsos externos y generar señales PWM entre otras cosas. Los modos de funcionamiento para este periférico son los siguientes:
MODO TEMPORIZADOR. Genera interrupciones cada vez que un contador interno de 16 bits se desborda. La señal de reloj para el registro contador interno se deriva del oscilador principal del microcontrolador.
MODO CO$TADOR. Parecido al modo temporizador, pero la señal de reloj para el registro
contador integrado es externa, proveniente del pin T1.
MODO CAPTURA. Cada vez que se produce un flanco previamente configurado, en la
termina ICP del dispositivo, el contenido del contador es almacenado a un registro especial de solo lectura, esto puede generar a demás una interrupción.
MODO COMPARACIÓ$ DE IGUALDAD. El contenido del contador es comparado continuamente con un valor almacenado en ciertos registros especiales. Cuando el contador es igual en magnitud al valor de los registros especiales, se puede producir una interrupción de comparación de igualdad.
MODO GE$ERACIÓ$ DE SEÑALES PWM. Permite generar señales PWM (Modulación
por Ancho de Pulso) con resolución de 8, 9 o 10 bits. DISPOIBLE E
AT90S8515, AT90S2313, AT90XX2333, AT90XX4433, AT90XX4434, AT90XX8535, AT90C8534. APLICACIOES Generación de señales PWM. Bases de Tiempo. Medición de frecuencia. REGISTROS IVOLUCRADOS
Este periférico esta presente en muchos miembros de la familia AT90X, sin embargo en no en todos los dispositivos se tienen las mismas prestaciones de este periférico. Por ejemplo, en algunos no se puede utilizar al Timer/Counter1 como generador de PWM.
La Tabla TC1-1 muestra los registros involucrados y los bits para cada miembro que contiene a este periférico.
DISPOSITIVO: AT90S8515 OMBRE
REGISTRO B7 B6 B5 B4 B3 B2 B1 B0
TIMSK TOIE1 OCIE1A OCIE1B TICIE1
TIFR TOV1 OCF1A OCF1B ICF1
TCCR1A COM1A1 COM1A0 COM1B1 COM1B0 PWM11 PWM10
TCCR1B ICNC1 ICES1 CTC1 CS12 CS11 CS10
TCT1 Todos Los Bits
OCR1A Todos Los Bits
OCR1B Todos Los Bits
ICR1 Todos Los Bits
DISPOSITIVO: AT90S2313 OMBRE
REGISTRO B7 B6 B5 B4 B3 B2 B1 B0
TIMSK TOIE1 OCIE1A TICIE1
TIFR TOV1 OCF1A ICF1
TCCR1A COM1A1 COM1A0 PWM11 PWM10
TCCR1B ICNC1 ICES1 CTC1 CS12 CS11 CS10
TCT1 Todos Los Bits
OCR1A Todos Los Bits
ICR1 Todos Los Bits
DISPOSITIVO: AT90XX2333, AT90XX4433 OMBRE
REGISTRO B7 B6 B5 B4 B3 B2 B1 B0
TIMSK TOIE1 OCIE1 TICIE1
TIFR TOV1 OCF1 ICF1
TCCR1A COM11 COM10 PWM11 PWM10
TCCR1B ICNC1 ICES1 CTC1 CS12 CS11 CS10
TCT1 Todos Los Bits
OCR1 Todos Los Bits
DISPOSITIVO: AT90XX4434, AT90XX8535 OMBRE
REGISTRO B7 B6 B5 B4 B3 B2 B1 B0
TIMSK TICIE1 OCIE1A OCIE1B TOIE1
TIFR ICF1 OCF1A OCF1B TOV1
TCCR1A COM1A1 COM1A0 COM1B1 COM1B0 PWM11 PWM10
TCCR1B ICNC1 ICES1 CTC1 CS12 CS11 CS10
TCT1 Todos Los Bits
OCR1A Todos Los Bits
OCR1B Todos Los Bits
ICR1 Todos Los Bits
DISPOSITIVO: AT90C8534 OMBRE REGISTRO B7 B6 B5 B4 B3 B2 B1 B0 TIMSK TOIE1 TIFR TOV1 TCCR1 CS12 CS11 CS10
TCT1 Todos Los Bits
Tabla TC1-1. Registros Involucrados con el Timer/Counter1. Una explicación detallada de cada bit se encuentra en la Tabla TC1-2.
Observe que NO TODOS los dispositivos contienen en sus registros especiales los bits que se muestran en la siguiente tabla.
BIT SIGIFICADO FUCIÓ TOIE1 Timer/Counter1
Overflow Interrupt Enable
“1” Habilita interrupción de sobreflujo del Timer/Counter1. El Sobreflujo o Desborde se produce cuando el registro TCNT1 pasa de $ffff a $0000.
OCE1A Timer/Counter1 Output CompareA Match Interrupt Enable.
“1” Habilita la interrupción por comparación de igualdad ( Contenido de OCR1A igual al de TCNT1).
OCIE1B Timer/Counter1 Output CompareB Match Interrupt Enable.
“1” Habilita la interrupción por comparación de igualdad (Contenido de OCR1B igual al de TCNT1).
TICIE1 Timer/Counter1 Capture Interrupt Enable
“1” Habilita la interrupción de captura.
TOV1 Timer/Counter1 Overflow flag
“1” indica que el registro TCNT1 se ha desbordado, genera interrupción si éstas están habilitadas
OCF1A Output Compare Flag 1A.
“1” indica que los contenidos de los registros TCNT1 y OCR1A son iguales. Esto puede producir una interrupción de comparación de igualdad.
OCF1A Output Compare Flag 1B.
“1” indica que los contenidos de los registros TCNT1 y OCR1B son iguales. Esto puede producir una interrupción de comparación de igualdad.
ICF1 Input Capture Flag. “1” indica que el contenido de TCNT1 ha sido transferido al registro ICR1. Puede producir una interrupción.
ICC1 Input Capture1 Noise Canceler.
“1” Habilita el cancelador de ruido para la captura. Para que un flanco en el pin ICP genere la captura, se toman cuatro muestras, que deben ser todas válidas de acuerdo al bit ICES1. La frecuencia de muestreo es la del cristal. “0” La captura se genera en el primer flanco indicado por el bit ICES1.
ICES1 Input Capture Edge Select.
“1” Captura en flanco descendente presentado en el pin ICP.
“0” Captura en flanco ascendente presentado en el pin ICP.
En la captura, el contenido de TCNT1 se transfiere a ICR1.
Tabla TC1-2. Bits y función de los registros especiales para el Timer/Counter1. Continua...
Continuación...
BIT SIGIFICADO FUCIÓ
CTC1 Clear Timer/Counter1 on Compare Match.
“1” reinicia TCNT1 a $0000 cuando OCR1A se iguala con TCNT1.
“0” TCNT1 continua su cuenta normal. Tabla TC1-2. Función de los Bits de los registros especiales para el
Timer/Counter1. REGISTROS DE 16 BITS.
Algunos registros especiales utilizados, tienen una longitud de total 16 bits, y se forman con dos registros de 8 bits cada uno.
Para leer cualquiera de los registros mostrados en la Tabla TC1-3, debe primero leerse el byte bajo(L) y luego el alto(H).
Para escribir a cualquiera de estos registros, debe primero escribirse el byte alto (H) y luego el bajo (L).
TCT1 Registro contador de 16 bits, formado por TCNT1H y TCNT1L.
OCR1A Registro de 16 bits, formado por OCR1AH y OCR1AL. Se compara continuamente con TCNT1.
OCR1B Registro de 16 bits, formado por OCR1BH y OCR1BL. Se compara continuamente con TCNT1.
ICR1 Registro de solo lectura de 16 bits, formado por ICR1H y OCR1L. El contenido de TCNT1 se transfiere a este archivo en un evento de captura.
Tabla TC1-3. Función de los Registros Especiales de 16 Bits asociados con el
Timer/Counter1.
MODO TEMPORIZADOR Y MODO COTADOR.
El registro TCNT1 del Timer/Counter1 puede contar pulsos derivados del oscilador principal, o provenientes del exterior.
En el primer caso, cuando el registro TCNT1 se incrementa por pulsos generados por el oscilador principal, funciona en modo temporizador. Cuando el periférico cuenta pulsos externos, presentados en el pin T1 del microcontrolador, trabaja en modo contador. En la Tabla TC1-5 se puede observar el número de pin T1 para cada dispositivo.
Para configurar el periférico en cualquiera de estos modos de funcionamiento, es necesario manipular los bits CS12,CS11 y CS10, que se muestran en la Tabla TC1-4.
CS12 CS11 CS10 EFECTO
0 0 0 El registro TCNT1 no cambia. Timer/Counter1 en STOP 0 0 1 TCNT1 se incrementa a la velocidad de CK. 0 1 0 TCNT1 se incrementa a la velocidad de CK/8. 0 1 1 TCNT1 se incrementa a la velocidad de CK/64. 1 0 0 TCNT1 se incrementa a la velocidad de CK/256. 1 0 1 TCNT1 se incrementa a la velocidad de CK/1024. 1 1 0 TCNT1 se incrementa en cada flanco negativo
presentado en el pin T1.
1 1 1 TCNT1 se incrementa en cada flanco positivo presentado en el pin T1.
Tabla TC1-4. Bits CS12-CS11-CS11 del registro TCCR1B y su Efecto sobre el registro TCNT1
SECUECIA DE COFIGURACIÓ MODO TEMPORIZADOR Y COTADOR. 1. Deshabilitar las interrupciones globales (Recomendado).
SREG<I>=”0”
2. Establecer el valor del registro TCNT1.
Lo más común es hacer TCNT1 = $0000, pero puede ser cualquier otro valor válido. Para esto primero escriba el byte alto y luego el byte bajo del registro TCNT1: Primero TCNT1H y luego TCNT1L.
3. Si se desea utilizar la interrupción de sobre flujo (cuando el registro TCNT1 se desborda), habilite la interrupción utilizando el bit TOIE1 del registro TIMSK. TIMSK<TOIE1>=”1”. En caso de no utilizar la interrupción, ponga este bit en “0”. 4. Limpie el bit TOV1 del registro TIFR.
5. Establezca la fuente de la señal de reloj. Ver Tabla TC1-4. 6. Habilite interrupciones globales.
SREG<I>=”1” I.S.R.
Si la interrupción está habilitada, el CPU salta a la dirección vector de interrupción de este periférico cada vez que el registro TCNT1 tiene el valor $FFFF -65535 en decimal- e intenta incrementar su valor (se desborda).
Si programa en ensamblador, deberá colocar una instrucción de salto (rjmp) en la dirección del vector de interrupción para re direccionar a la posición de memoria donde se encuentra realmente la ISR.
En la ISR puede (y quizá hasta deba) reiniciar el registro TCNT1 con un valor apropiado. Observe entre mayor sea el valor de TCNT1 la interrupción siguiente se producirá en un tiempo menor.
DISPOSITIVO VECTOR DIRECCIO PI T1 AT90S4414 7 $006 2 (PDIP) AT90S8515 7 $006 2 AT90S2313 6 $005 9 AT90S2333 6 $005 11 AT90LS2333 6 $005 11 AT90S4433 6 $005 11 AT90LS4433 6 $005 11 AT90S4434 9 $008 2 (PDIP) AT90LS4434 9 $008 2 (PDIP) AT90S8535 9 $008 2 (PDIP) AT90LS8535 9 $008 2 (PDIP) AT90C8534 4 $003 -
Tabla TC1-5 Vector de Interrupción para Timer/Counter1 Overflow. MODO CAPTURA
En este modo de operación, el contenido del registro TCNT1 es almacenado en ICR1 cuando un flanco ascendente o descendente se presenta en el pin ICP del dispositivo. Llamaremos disparo a cualquiera de estos flancos que provocan la captura.
Para evitar disparos falsos, el dispositivo cuenta con un cancelador de ruido. Si el cancelador se habilita, entonces al producirse un disparo se toman cuatro muestras en el pin ICP del dispositivo antes de proceder a la captura. Las muestras son tomadas a la frecuencia del oscilador principal y si todas ellas coinciden se efectúa la captura. Cuando las cuatro muestras no coinciden se considera un disparo falso y la captura no se realiza. En el caso de que el cancelador de ruido se encuentre deshabilitado la captura se realiza inmediatamente al presentarse un disparo.
Para seleccionar el flanco de captura se utiliza el bit ICES1 del registro TCCR1B. Esto se muestra en la Tabla TC1-6.
BIT ICES1
Evento de Captura Disparado por
“0” Flanco Descendente en el pin ICP “1” Flanco Ascendente en el pin ICP.
Tabla TC1-6 Efecto del bit ICES1 del registro TCCR1B.
El bit ICNC1 del registro TCCR1B permite habilitar o desactivar el cancelador de ruido. Vea la Tabla TC1-7. BIT ICC1 CACELADOR DE RUIDO “0” Deshabilitado “1” Habilitado
SECUECIA DE COFIGURACIÓ MODO CAPTURA.
1 Deshabilite Interrupciones Globales. (Recomendado pero no necesario) SREG<I> =”0”
2 Habilite o Deshabilite el cancelador de ruido.
TCCR1B < ICNC1> =”0” Deshabilitado. TCCR1B < ICNC1> =”1” Habilitado. 3 Programe el flanco de captura.
TCCR1B < ICES1> =”0” Descendente. TCCR1B < ICES1> =”1” Ascendente.
4 Si requiere atender la interrupción de captura (habilitarla), active el bit TICIE1 del registro TIMSK.
TIMSK<TICIE1>=”1”.
En caso de no necesitar atender la interrupción ponga este bit en cero.
Si la interrupción es habilitada, cada vez que se produzca una captura el CPU saltará hacia el vector de interrupción correspondiente.
5 Establezca el valor del registro TCNT1.
6 Establezca la fuente de la señal de reloj. Ver Tabla TC1-4 7 Habilite interrupciones globales.
SREG<I>=”1” I.S.R.
Si las interrupciones globales y la interrupción del modo de captura están habilitadas, el CPU saltará a la dirección vector de interrupción correspondiente cada vez que se presente el flanco predeterminado en el pin ICP del dispositivo. El valor actual del registro TCNT1 es capturado en el registro especial de solo lectura ICR1.
Si programa en ensamblador, deberá colocar una instrucción de salto (rjmp) en la dirección del vector de interrupción para re direccionar a la dirección de memoria donde se encuentra realmente la ISR.
DISPOSITIVO VECTOR DIRECCIO PI ICP
(PDIP) AT90S4414 4 $003 31 AT90S8515 4 $003 31 AT90S2313 4 $003 11 AT90S2333 4 $003 14 AT90LS2333 4 $003 14 AT90S4433 4 $003 14 AT90LS4433 4 $003 14 AT90S4434 6 $005 20 AT90LS4434 6 $005 20 AT90S8535 6 $005 20 AT90LS8535 6 $005 20 AT90C8534 - - -
Tabla TC1-8 Vector de Interrupción para el evento de captura del Timer/Counter1. Por último, recuerde que para leer el registro ICR1 debe primero acceder al byte bajo (ICR1L) y luego al alto (ICR1H).
MODO COMPARADOR DE IGUALDAD.
En modo comparador de igualdad el Timer/Counter1 utiliza los registros TCCR1A, OCR1A y TCNT1. Estos últimos dos registros son comparados continuamente. Cuando el contenido del archivo TCNT1 es idéntico al del registro OCR1A, el pin OC1A del
microcontrolador puede realizar alguna de las acciones indicadas en la Tabla TC1-9, según el valor de los bits COM1A1 y COM1A0.
COM1A1 COM1A0 EFECTO
0 0 Desconecta el periférico del pin OC1A. (Sin efecto sobre el pin).
0 1 Invierte el estado del pin OC1A
1 0 Pone en “0” el pin OC1A 1 1 Pone en”1” el pin OC1A
Tabla TC1-9. Efecto de los bits COM1A1 y COM1A0 del registro TCCR1A sobre el pin OC1A.
Algunos dispositivos de la familia AVR, contienen los bits COM1B1 y COM1B0 en el registro TCCR1A. Cuando el contenido del archivo TCNT1 es idéntico al del registro OCR1B, el pin OC1B del microcontrolador puede realizar alguna de las acciones indicadas en la Tabla TC1-10, según el valor de los bits COM1B1 y COM1B0.
COM1B1 COM1B0 EFECTO
0 0 Desconecta el periférico del pin OC1B. (Sin efecto sobre el pin).
0 1 Invierte el estado del pin OC1B
1 0 Pone en “0” el pin OC1B 1 1 Pone en”1” el pin OC1B
Tabla TC1-10. Efecto de los bits COM1B1 y COM1B0 del registro TCCR1A sobre el pin OC1B.
DISPOSITIVO OC1A OC1B AT90S2313 15 - AT90S8515 15 29 AT90S2333 15 - AT90S4414 15 29 AT90S4434 19 18 AT90LS4434 19 18 AT90S8535 19 18 AT90LS8535 19 18 AT90C8534 - -
Tabla TC1-11. Número de pin correspondiente a OC1A y OC1B. SECUECIA DE COFIGURACIÓ MODO COMPARADOR DE IGUALDAD. 1 Deshabilite Interrupciones Globales. (Recomendado pero no necesario)
SREG<I> =”0”
2 Establezca el valor del registro OCR1A. (Escriba primero a OCR1AH y luego a OCR1AL).
3 Establezca el valor del registro OCR1B. (Escriba primero a OCR1BH y luego a OCR1BL).
4 Si requiere atender la interrupción de comparación de igualdad (habilitarla) para el registro OCR1A, active el bit OCIE1A del registro TIMSK.
TIMSK< OCIE1A >=”1”. En caso de no necesitar atender la interrupción ponga este bit en cero.
5 Si requiere atender la interrupción de comparación de igualdad (habilitarla) para el registro OCR1B, active el bit OCIE1B del registro TIMSK.
TIMSK< OCIE1B >=”1”. En caso de no necesitar atender la interrupción ponga este bit en cero.
6 Seleccione la fuente de la señal de reloj para el registro TCNT1. Ver Tabla TC1-4. 7 Habilite interrupciones globales.
SREG<I>=”1” I.S.R.
Si las interrupciones globales y la interrupción del modo de comparación están habilitadas, el CPU saltara a la dirección vector de interrupción correspondiente cada vez que el valor actual del registro TCNT1 sea idéntico al valor del registro OCR1A o al de OCR1B.
Si programa en ensamblador, deberá colocar una instrucción de salto (rjmp) en la dirección del vector de interrupción para re direccionar a la dirección de memoria donde se encuentra realmente la ISR. DISPOSITIVO VECTOR COMPARACIÓ DIRECCIÓ COMPARACIÓ VECTOR COMPARACIÓ DIRECCIÓ COMPARACIÓ
DE IGUALDAD CO OCCR1A DE IGUALDAD CO OCCR1A DE IGUALDAD CO OCCR1B DE IGUALDAD CO OCCR1B AT90S4414 5 $004 6 $005 AT90S8515 5 $004 6 $005 AT90S2313 5 $004 - - AT90S2333 5 $004 - - AT90LS2333 5 $004 - - AT90S4433 5 $004 - - AT90LS4433 5 $004 - - AT90S4434 7 $006 8 $007 AT90LS4434 7 $006 8 $007 AT90S8535 7 $006 8 $007 AT90LS8535 7 $006 8 $007 AT90C8534 - - - -
Tabla TC1-12 Vector de Interrupción para el evento de comparación de igualdad del Timer/Counter1.
MODO GEERADOR DE SEÑALES PWM (MODULACIÓ POR ACHO DE PULSO)
Los microcontroladores de la familia AVR contienen los circuitos necesarios para generar señales PWM.
El archivo TCNT1, en este modo de operación se comporta como un contador cíclico ascendente y descendente. Primero TCNT1 comienza su cuenta ascendente desde $0000 hasta llegar a un VALOR MÁXIMO, y después desciende hacia cero. Una vez en cero comienza nuevamente el ciclo. Los 10 bits menos significativos del registro TCNT1 son comparados continuamente con los de los 10 bits menos significativos de los registros OCR1A y OCR1B. Cuando se igualan los 10 bits de estos registros, los pines OC1A o OC1B realizan una de las acciones que se muestra en la Tabla TC1-13.
El valor que contenga el registro OCR1A o OCR1B determinará el ciclo útil de la señal PWM.
COM1x1 COM1x0 EFECTO SOBRE EL PI OC1x 0 0 Sin efecto
0 1 Sin efecto
1 0 Pasa a “0” Cuando los 10 bits menos significativos de TCNT1 (en su cuenta ascendente) y los de OCR1A de igualan TCNT1.
Pasa a “1” Cuando los 10 bits menos significativos de TCNT1 (en su cuenta descendente) y los de OCR1A de igualan.
1 1 PWM invertido.
Pasa a “1” Cuando los 10 bits menos significativos de TCNT1 (en su cuenta ascendente) y los de OCR1A de igualan TCNT1.
Pasa a “0” Cuando los 10 bits menos significativos de TCNT1 (en su cuenta descendente) y los de OCR1A de igualan.
Tabla TC1-13. Efecto de los bits COM1x1-COM1x0 del registro TCCR1A. (x puede ser A o B).
La Tabla TC1-11 muestra el número de pin correspondiente para cada dispositivo de la familia AVR.
La resolución de la señal PWM puede ser de 8, 9 o 10 bits, según se configure en los bits PWM11 y PWM10 del registro TCCR1A. La Tabla TC1-14 muestra las posibles
combinaciones. PWM11 PWM10 EFECTO 0 0 PWM deshabilitado. 0 1 PWM de 8 bits. 1 0 PWM de 9 bits. 1 1 PWM de 10 bits.
Tabla TC1-14. Efecto de los bits PWM11y PWM10 del registro TCCR1A. El VALOR MÁXIMO al que llega el registro TCNT1 está en función de la resolución de la señal PWM. La Tabla TC1-15 muestra los valores máximos de TCNT1, la frecuencia y la resolución de la señal PWM
FRECUECIA DE LA SEÑAL PWM MÁXIMO VALOR DE TCT1 RESOLUCIÓ (BITS) 510 1 Τ f 255 8 1022 1 Τ f 511 9 2046 1 Τ f 1023 10
Tabla TC1-15. Frecuencia de la Señal PWM, Valores máximos de TCNT1, y Resolución. T1 es la frecuencia a la que se incrementa TCNT1.
SECUECIA DE COFIGURACIÓ MODO PWM.
1 Deshabilite Interrupciones Globales. (Recomendado pero no necesario). SREG<I> =”0”
2 Establezca el valor del registro OCR1A. (Escriba primero a OCR1AH y luego a OCR1AL). Este valor determina el ciclo útil de la señal PWM en el pin OC1A.
3 Establezca el valor del registro OCR1B. (Escriba primero a OCR1BH y luego a OCR1BL). Este valor determina el ciclo útil de la señal PWM en el pin OC1B
4 Seleccione el modo normal o invertido de señal PWM. Ver Tabla TC1-13. 5 Seleccione la resolución de la señal PWM. Ver Tabla TC1-14.
6 Seleccione la fuente de la señal de reloj para el registro TCNT1. Ver Tabla TC1-4. 7 Habilite interrupciones globales.
SREG<I>=”1” I.S.R.
En modo PWM el periférico Timer/Counter1 genera la interrupción de sobre flujo normal como en el modo Temporizador.
IMPLATACIÓ.
La secuencia de configuración, de los registros especiales, se muestra programada en lenguaje ensamblador. Si usted utiliza otro lenguaje de programación, solo tome los ejemplos de implantación como referencia.
TIMER/COUTER 1 MODO TEMPORIZADOR.
En aras de la claridad el código no está optimizado ni en tamaño ni en velocidad.
El siguiente programa en ensamblador configura al TIMER/COUNTER1 del
microcontrolador para que incremente el registro TCNT1 en cada pulso de reloj. El PORTB se incrementa en cada interrupción.
;**********************************************
.include "8515def.inc" ;archivo que contiene los nombres y direcciones ;de registros especiales
;Sustitúyalo por el archivo correspondiente al ;microcontrolador que utiliza.
;********************************************** .org $0 ;vector de inicio.
rjmp RESET ;redireccionado a la dirección ;donde se encuentra RESET
.org $006 ;vector de TIMER/COUNTER1 Sobreflujo rjmp TIMER1_ISR ;redireccionado a TIMER1_ISR
;********************************************** ;Esta ISR se ejecuta cada vez que TCNT1 se desborda.
TIMER1_ISR: ;ISR del TIMER/COUNTER1 Sobreflujo
inc r18 ;incrementa registro r18
out PORTB,r18 ;y saca el valor por el PORTB
ldi r17,0 ;
out TCNT1H,R17 ;pone valor de TCNT1 en 0. out TCNT1L,R17 ;pone valor de TCNT1 en 0.
reti ;regresa de interrupción.
;**********************************************
RESET: ;inicio de programa.
ldi r17,$ff ;configura PORTB
out DDRB,r17 ; como salida
;********************************************** ldi r16,high(RAMEND) ;Establece la direccion de
out SPH,r16 ;la Pila.
ldi r16,low(RAMEND) out SPL,r16 ;********************************************** ;PASO1 ;PASO1 ;PASO1 ;PASO1
;PASO2 ;PASO2 ;PASO2 ;PASO2
ldi r17,0 ;Inicia TCNT1 con valor 0 out TCNT1H,R17 ;Primero escribir en TCNT1H out TCNT1L,R17 ;despues escribir en TCNT1L ;PASO3
;PASO3 ;PASO3 ;PASO3
in r17,TIMSK ;Habilita interrupción ori r17,(1<<TOIE1) ;del TIMER/COUNTER1 out TIMSK,r17 ;TIMSK<TOIE1>=1
;PASO 4 ;PASO 4 ;PASO 4 ;PASO 4
in r17,TIFR ;Limpia posible
ori r17,(1<<TOV1) ;interrupción anterior out TIFR,r17 ;TIFR<TOV1>=0
;PASO 5 ;PASO 5 ;PASO 5
;PASO 5 ;Selecciona el origen de la
ldi r17,1 ;señal de reloj
out TCCR1B,r17 ;Se incrementará TCNT1 en cada pulso de RELOJ. ;PASO 6
;PASO 6 ;PASO 6 ;PASO 6
sei ;SREG<7>=1. int. habilitadas
loop: ;Espera hasta que
nop ;se generen interrupciones.
nop nop
rjmp loop ;loop infinito
TIMER/COUTER 1 MODO CAPTURA.
En aras de la claridad el código no está optimizado ni en tamaño ni en velocidad.
El siguiente programa en ensamblador configura al TIMER/COUNTER1 en modo de Captura. Cuando se presenta un flanco descendente en el pin ICP del microcontrolador, se exhibe en el PORTB, el valor de TCNT1H. TCNT1 se incrementa en cada ciclo del oscilador principal.
;**********************************************
.include "8515def.inc" ;archivo que contiene los nombres y direcciones ;de registros especiales
;Sustitúyalo por el archivo correspondiente al ;microcontrolador que utiliza.
;********************************************** .org $0 ;vector de inicio.
rjmp RESET ;redireccionado a la dirección ;donde se encuentra RESET
.org $003 ;vector de TIMER/COUNTER1 Captura rjmp ISR_CAPT ;redireccionado a TIMER1_ISR_CAPT ;**********************************************
;Esta ISR se jecuta cada vez que se produce un disparo (Flanco Negativo)
ISR_CAPT: ;ISR del TIMER/COUNTER1 CAPTURA
in r18,ICR1L ;Lee el valor capturado de TCNT1
in r18,ICR1H ;Primero byte Bajo y luego el Byte Alto. out PORTB,r18 ;Saca el valor de TCNT1H por el PORTB
reti ;regresa de interrupción.
;**********************************************
RESET: ;inicio de programa.
ldi r17,$ff ;configura PORTB
out DDRB,r17 ; como salida
;********************************************** ldi r16,high(RAMEND) ;Establece la direccion de
out SPH,r16 ;la Pila.
ldi r16,low(RAMEND) out SPL,r16 ;********************************************** ;PASO 1 ;PASO 1 ;PASO 1 ;PASO 1
cli ;SREG<I>=0.int. deshabilitadas.
;PASO 2 ;PASO 2 ;PASO 2 ;PASO 2
in r17,TCCR1B ;Habilita
ori r17,(1<<ICNC1) ;Cancelador out TCCR1B,r17 ;de Ruido
;PASO 3 ;PASO 3 ;PASO 3 ;PASO 3
in r17,TCCR1B ;Establece Disparo ldi r18,(1<<ICES1) ;con flanco
com r18 ;Descendente
and r17,r18
out TCCR1B,r17 ;En el pin ICP. ;PASO 4
;PASO 4 ;PASO 4 ;PASO 4
in r17,TIMSK ;Habilita interrupción
ori r17,(1<<TICIE1) ;del Captura del TIMER/COUNTER1 out TIMSK,r17 ;PASO 5 ;PASO 5 ;PASO 5 ;PASO 5 clr r17
out TCNT1H,r17 ;Establece el valor de TCNT1 out TCNT1L,r17
;PAS ;PAS ;PAS ;PASO 6O 6O 6O 6
ldi r17,1 ;Se incrementa TCNT1 en cada ;ciclo del oscilador principal out TCCR1B,r17 ;
;PASO 7 ;PASO 7 ;PASO 7 ;PASO 7
sei ;SREG<7>=1. int. habilitadas
loop: ;Espera hasta que
nop nop
rjmp loop ;loop infinito
TIMER/COUTER 1 MODO GEERADOR DE SEÑALES PWM.
En aras de la claridad el código no está optimizado ni en tamaño ni en velocidad.
El siguiente programa en ensamblador configura al TIMER/COUNTER1 en modo Generador de señales PWM.
;**********************************************
.include "8515def.inc" ;archivo que contiene los nombres y direcciones ;de registros especiales
;Sustitúyalo por el archivo correspondiente al ;microcontrolador que utiliza.
;********************************************** .org $0 ;vector de inicio.
rjmp RESET ;redireccionado a la dirección ;donde se encuentra RESET
;**********************************************
RESET: ;inicio de programa.
;********************************************** ldi r16,high(RAMEND) ;Establece la direccion de
out SPH,r16 ;la Pila.
ldi r16,low(RAMEND) out SPL,r16 ;********************************************** ;PASO 1 ;PASO 1 ;PASO 1 ;PASO 1
cli ;SREG<I>=0.int. deshabilitadas. ;PASO 2
;PASO 2 ;PASO 2 ;PASO 2
ldi r17,0x1 ;Establece valor de OCR1A.
out OCR1AH,R17 ;Entre mayor sea ldi R17,0xff ;el valor, mayor es
out OCR1AL,R17 ;el ciclo util. Máximo Valor 0x3FF ;PASO 3
;PASO 3 ;PASO 3 ;PASO 3
ldi r17,0x02 ;Establece valor de OCR1B. out OCR1BH,R17 ;Entre mayor sea
ldi R17,0xcc ;el valor, mayor es out OCR1BL,R17 ;el ciclo util. ;PASO 4
;PASO 4 ;PASO 4 ;PASO 4
in r17,TCCR1A ;Modo PWM normal ori r17,(0xA0) ;(no invertido) out TCCR1A,r17
;PASO 5 ;PASO 5 ;PASO 5 ;PASO 5
in r17,TCCR1A ;Selecciona la resolución. ori r17,(0x03) ;10 Bits. out TCCR1A,r17 ;PASO 6 ;PASO 6 ;PASO 6 ;PASO 6
ldi r17,1 ;señal de reloj
out TCCR1B,r17 ;Se incrementará TCNT1 en cada pulso de RELOJ. ;PASO 7
;PASO 7 ;PASO 7 ;PASO 7
sei ;SREG<7>=1. int. habilitadas
loop: ;Por los pines OC1A y OC1B
nop ;se generan señales PWM
nop nop
rjmp loop ;loop infinito
TIMER/COUTER 1 MODO COMPARADOR DE IGUALDAD.
En aras de la claridad el código no está optimizado ni en tamaño ni en velocidad.
El siguiente programa en ensamblador configura al TIMER/COUNTER1 en modo Comparador de Igualdad.
;**********************************************
.include "8515def.inc" ;archivo que contiene los nombres y direcciones ;de registros especiales
;Sustitúyalo por el archivo correspondiente al ;microcontrolador que utiliza.
;********************************************** .org $000 ;vector de inicio.
rjmp RESET ;redireccionado a la dirección ;donde se encuentra RESET
.org OC1Aaddr ;($004)Redirecciona a rjmp CompA ;CompA.
.org OC1Baddr ;($005) Redirecciona a rjmp CompB ;CompB
;********************************************** CompA:
;Escriba aquí su codigo. reti
;********************************************** CompB:
;Escriba aquí su codigo. reti
;**********************************************
RESET: ;inicio de programa.
;********************************************** ldi r16,high(RAMEND) ;Establece la direccion de
out SPH,r16 ;la Pila.
ldi r16,low(RAMEND) out SPL,r16 ;********************************************** ;PASO 1 ;PASO 1 ;PASO 1 ;PASO 1
cli ;SREG<I>=0.int. deshabilitadas. ;PASO 2
;PASO 2 ;PASO 2 ;PASO 2
ldi r17,0x00 ;Establece valor de OCR1A. out OCR1AH,R17 ;
ldi R17,0xff ;
out OCR1AL,R17 ; ;
;;
;PASO 3PASO 3PASO 3PASO 3
ldi r17,0x02 ;Establece valor de OCR1B. out OCR1BH,R17 ; ldi R17,0x00 ; out OCR1BL,R17 ; ;PASO 4 ;PASO 4 ;PASO 4 ;PASO 4
in r17,TIMSK ;Habilita Interrupción
ori r17,(1<<OCIE1A) ;de Comparacion de Igualdad out TIMSK,r17
;PASO 5 ;PASO 5 ;PASO 5 ;PASO 5
in r17,TIMSK ;Habilita Interrupción
ori r17,(1<<OCIE1B) ;de Comparacion de Igualdad out TIMSK,r17
;PASO 6 ;PASO 6 ;PASO 6
;PASO 6
ldi r17,1 ;señal de reloj
out TCCR1B,r17 ;Se incrementará TCNT1 en cada pulso de RELOJ. ;PASO 7
;PASO 7 ;PASO 7 ;PASO 7
sei ;SREG<7>=1. int. habilitadas
loop: ;Por los pines OC1A y OC1B
nop ;se generan señales PWM
nop nop
OMBRE DEL PERIFÉRICO: TIMER/COUTER0. FUCIOAMIETO GEERAL
Un temporizador (Timer) es un periférico que se encarga generar un evento (interrupción) cada vez que ha pasado cierto intervalo de tiempo. La interrupción de un temporizador se genera cuando el circuito contador del mismo, sufre un sobre flujo, es decir, cuando se desborda.
La velocidad a la que un temporizador genera interrupciones depende del origen de la señal de reloj que alimente al mismo. En la familia de microcontroladores AVR, dicha señal de reloj puede provenir del exterior o ser generada internamente. Cuando la señal es interna, la velocidad del temporizador depende de la frecuencia del cristal colocado al microcontrolador. Cuando es externa, dependerá de la velocidad de los pulsos que se introduzcan por alguna terminal específica del dispositivo. Un temporizador cuya señal de reloj es externa, se dice que está configurado en modo contador (Counter).
DISPOIBLE E
AT90S1200, T90S2313, AT90S2323, AT90LS2323, AT90S2343, AT90LS2343, AT90S2333, T90LS2333, AT90S4433, AT90LS4433, AT90S4414, AT90S8515, AT90S4434, AT90LS4434, AT90S8535, AT90LS8535, AT90C8534.
APLICACIOES
Medición de intervalos de tiempo. Generación de bases de Tiempo. Tacómetro digital.
REGISTROS IVOLUCRADOS.
DISPOSITIVO: AT90S1200, AT90S2313, AT90S2323, AT90LS2323, AT90S2343, AT90LS2343, AT90S2333, AT90LS2333, AT90S4433, AT90LS4433, AT90S4414, AT90S8515.
OMBRE DEL REGISTRO.
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
TCCR0 CS02 CS01 CS00
TCNT0 MSB LSB
TIMSK TOIE0
TIFR TOV0
DISPOSITIVO: AT90XX4434, AT90XX8535, AT90C8534.
OMBRE DEL REGISTRO.
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
TCCR0 CS02 CS01 CS00
TCNT0 MSB LSB
TIMSK TOIE0
TIFR TOV0
El significado de cada bit y su función se puede observar en la Tabla TC0-2.
BIT significado FUCIÓ
CS02 a CS00 Clock Select0 bits 2,1 y 0
Selecciona
el origen y el pre escalamiento de la señal de RELOJ para el
Timer/Counter0. Ver Tabla TC0-3.
MSB a LSB Bit más significativo a bit menos
significativo del contador del Timer/Counter0.
TOIE0 Timer/Counter0
Overflow Interrupt Enable
TOIE0=“1” Habilita interrupción del Timer/Counter0.
TOIE0=“0” Deshabilita Interrupción del Timer/Counter0.
TOV0 TOV0 se pone en “1” cuando el
Timer/Counter0 produce la interrupción de sobreflujo.
Tabla TC0-2. Bits y función de los registros especiales para el Timer/Counter 0. El Timer/Counter 0 tiene un registro especial de 8 bits llamado TCNT0, que tiene la función de contar de manera ascendente. Por ser un registro de 8 bits, cuando llega a su máximo valor 255 ($ff) e intenta incrementarse se desborda, y esto puede producir una interrupción, si esta última se encuentra habilitada.
Los bits CS02, CS01 y CS00 determinan la velocidad a la que el registro TCNT0 incrementa su valor. Estos bits se encuentran localizados en el registro TCCR0. Los posibles valores de estos bits, y el efecto que producen en la velocidad de conteo de TCNT0, se muestran en la Tabla TC0-3.
CS02 CS01 CS00 ORIGE Y PREESCALAMIETO DE LA SEÑAL DE RELOJ. 0 0 0 DETENID, NO CUENTA. 0 0 1 1/fosc (más rápido) 0 1 0 8/osc 0 1 1 64/osc 1 0 0 256/fosc 1 0 1 1024/fosc (más lento) 1 1 0 Terminal T0,
flanco descendente. (modo contador).
1 1 1
Terminal T0, flanco ascendente. (modo contador).
TABLA TC0-3. Origen de la señal de reloj y pre escalamiento.
Cuando este periférico se configura en modo contador, se le introducen pulsos por el pin T0, localizado en cada dispositivo como se muestra en la Tabla TC0-4.
DISPOSITIVO PIN T0 AT90S1200 8 AT90S2313 8 AT90S2323 7 AT90LS2323 7 AT90S2343 7 AT90LS2343 7 AT90S2333 2 AT90LS2333 2 AT90S4433 2 AT90LS4433 3 AT90S4414 1 AT90S8515 1 AT90S4434 1 AT90LS4434 1 AT90S8535 1 AT90LS8535 1 AT90C8534 -
SECUECIA DE COFIGURACIÓ
1.- Ponga SREG<I>=0. (Bit 7 del registro SREG). Deshabilita interrupciones. 2.- Haga TCNT0=0. Inicie contador en $00 o en un valor que necesite.
3.- Haga TIMSK<TOIE0>=”1” Habilita interrupción del TIMER/COUNTER 0, Si requiere interrupciones. En caso contrario ponga ese bit en”0”.
4.- Haga TIFR<TOV0>=”1". Limpia posible interrupción falsa.
5.- Ponga SREG<I>=1. (Bit 7 del registro SREG). Habilita interrupciones.
6.- Seleccione el origen de la señal de RELOJ para el TIMER/COUNTER0. Ver Tabla TC0-3. Ejemplo:
TCCR0 =0 hace que este periférico se pare, es decir, TCNT0 no cuenta y por lo tanto el TIMER/COUNTER0 no genera interrupciones.
TCCR0=1 hace que el TCNT0 se incremente con cada pulso de reloj, es la forma más rápida en la que este periférico genera interrupciones.
TCCR0=5 hace que el TCNT0 se incremente cada 1024 pulsos de reloj, es la forma más lenta en la que este periférico genera interrupciones (con RELOJ interno).
TCCR0=6 hace que el TCNT0 se incremente con cada flanco negativo (cuando la señal pasa de “1” a “0”) aplicado en la terminal T0 del microcontrolador.
I.S.R.
El CPU salta a la dirección vector de interrupción de este periférico cada vez que el registro TCNT0 tiene el valor $FF (255 en decimal) e intenta incrementar su valor (se desborda). Si programa en ensamblador, deberá colocar una instrucción de salto (rjmp) en la dirección del vector de interrupción para re direccionar a la posición de memoria donde se encuentra realmente la ISR del TIMER/COUNTER0.
En la ISR puede (y quizá hasta deba) reiniciar el registro TCNT0 con un valor apropiado, generalmente se pone en 0, aunque puede ser otro valor. Observe entre mayor sea el valor de TCNT0 la interrupción siguiente se producirá en un tiempo menor. No es necesario que ponga el bit 7 del archivo TIFR en “0” cada vez que se produzca una interrupción, al atenderse la ISR el hardware lo realiza.
DISPOSITIVO DIRECCIÓ VECTOR AT90S1200 $002 4 AT90S2313 $006 7 AT90S2323 $002 3 AT90LS2323 $002 3 AT90S2343 $002 3 AT90LS2343 $002 3 AT90S2333 $006 7 AT90LS2333 $006 7 AT90S4433 $006 7 AT90LS4433 $006 7 AT90S4414 $007 8 AT90S8515 $007 8
Tabla TC0-5. Vector de interrupción para Timer/Counter 0 IMPLATACIÓ.
La secuencia de configuración, de los registros especiales, se muestra programada en lenguaje ensamblador. Si usted utiliza otro lenguaje de programación, solo tome los ejemplos de implantación como referencia.
TIMER/COUTER 0 MODO TEMPORIZADOR.
En aras de la claridad el código no está optimizado ni en tamaño ni en velocidad.
El siguiente programa en ensamblador configura al TIMER/COUNTER 0 del microcontrolador para que incremente el registro TCNT0 en cada pulso de reloj. Si el dispositivo tiene colocado un cristal de 4 MHz, las interrupciones se generarán cada 65 micro segundos aproximadamente.
;Timer/Counter0 Modo Temporizador
;*****************************************************************
.include "1200def.inc" ;archivo que contiene los nombres de registros ;especiales
;Sustitúyalo por el archivo correspondiente al ;microcontrolador que utiliza.
;***************************************************************** .org $0 ;vector de inicio.
rjmp RESET ;redireccionado a la dirección donde se ;encuentra RESET
.org $002 ;vector de TIMER/COUNTER0
rjmp TIMER0_ISR ;redireccionado a TIMER_ISR
;***************************************************************** ;Esta ISR se produce cada vez que TCNT0 se desborda.
TIMER0_ISR: ;ISR del TIMER/COUNTER0
inc r18 ;incrementa registro r18
out PORTB,r18 ;y saca el valor por el PORTB
ldi r17,0 ;
out TCNT0,R17 ;pone valor de TCNT0 en 0.
reti ;regresa de interrupción.
;************************************************************************
RESET: ;inicio de programa.
ldi r17,$ff ;configura PORTB
out DDRB,r17 ; como salida
;***************************************************************** ;ldi r16,high(RAMEND) ;Descomente para dispositivos
;con RAM mayor 256 Bytes
; out SPH,r16 ; ldi r16,low(RAMEND) ; out SPL,r16 ;***************************************************************** ;PASO1 ;PASO1 ;PASO1 ;PASO1
cli ;SREG<I>=0.int. deshabilitadas. ;PASO2
;PASO2 ;PASO2 ;PASO2
ldi r17,0 ;Inicia TCNT0 con valor 0
out TCNT0,R17 ;
;PASO3 ;PASO3 ;PASO3 ;PASO3
in r17,TIMSK ;Habilita interrupción ori r17,(1<<TOIE0) ;del TIMER/COUNTER0 out TIMSK,r17 ;TIMSK<TOIE0>=1
;PASO 4 ;PASO 4 ;PASO 4 ;PASO 4
in r17,TIFR ;Limpia posible
ori r17,(1<<TOV0) ;interrupción anterior out TIFR,r17 ;TIFR<TOV0>=0
;PASO 5 ;PASO 5 ;PASO 5 ;PASO 5
sei ;SREG<7>=1. int. habilitadas
;PASO 6 ;PASO 6 ;PASO 6
;PASO 6 ;Selecciona el origen de la
ldi r17,1 ;señal de reloj
out TCCR0,r17 ;Se incrementará TCNT0 en cada pulso de RELOJ.
;TCCR0=1. (Si se quiere visualizar por el PORTB ;hacer ;TCCR0=5, ;LO MAS LENTO POSIBLE)
loop: ;Espera hasta que
nop ;se generen interrupciones.
nop nop
OTAS DE COFIGURACIÓ.
Para este periférico los cambios más importantes en el programa son en el paso 6, es aquí donde se le indica al periférico el origen de la señal de RELOJ. Consulte TABLA TC0-3 y sustituya el valor que requiera en la línea de código ldi r17,1 del paso 6.
OMBRE DEL PERIFÉRICO: ADC- COVERTIDOR AALÓGICO DIGITAL. DESCRIPCIÓ GEERAL.
Un circuito Convertidor Analógico Digital – ADC- es integrado en algunos microcontroladores para procesamiento de señales analógicas. El Convertidor Analógico Digital integrado en los microcontroladores de la familia AVR es tipo aproximación sucesiva y tienen una resolución de 10 bits. La frecuencia máxima de muestreo es 15 KSPS (15000 Muestras Por Segundo aproximadamente). Otras características son las siguientes: ±2 LSB, 0.5 LSB INL, Tiempo de conversión 65-260 uS, Cancelador de ruido integrado, rango de entrada Rail to Rail.
El ADC puede ser configurado en dos modos de operación:
♦ Modo de una Sola Conversión. Se tiene que iniciar manualmente cada conversión.
♦ Modo en Conversión Continua. Las conversiones se realizan de manera repetida automáticamente.
DISPOIBLE E
AT90xS4434, AT90xS8535, AT90xS2333, AT90xS4433. APLICACIOES
Sistemas de adquisición de señales analógicas, Sistemas de Control Digital, etc. REGISTROS IVOLUCRADOS
OMBRE
REGISTRO B7 B6 B5 B4 B3 B2 B1 B0
ADMUX - - - - - MUX2 MUX1 MUX0
Tabla ADC-1A. Registros Involucrados con ADC
OMBRE
REGISTRO B7 B6 B5 B4 B3 B2 B1 B0
ADCSR ADE ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0 Tabla ADC-1B. Registros Involucrados con ADC.
OMBRE
REGISTRO B7 B6 B5 B4 B3 B2 B1 B0
ADCH - - - - - - ADC9 ADC8
ADCL ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 Tabla ADC-1C. Registros Involucrados con ADC.
El significado de cada bit y su función se puede observar en la Tabla ADC-2.
BIT SIGIFICADO FUCIÓ
MUX2 Analog Channel Select Ver Tabla ADC-3. MUX1 Analog Channel Select Ver Tabla ADC-3. MUX0 Analog Channel Select Ver Tabla ADC-3. ADPS0 ADC Prescaler Select Bits. Ver Tabla ADC-4 ADPS1 ADC Prescaler Select Bits. Ver Tabla ADC-4 ADPS2 ADC Prescaler Select Bits. Ver Tabla ADC-4
ADIE ADC Interrupt Enable “1” Habilita la interrupción de Conversión Completa.
ADIF ADC Interrupt Flag Se establece a “1” cuando una Conversión ha terminado.
ADFR ADC Free Run Select “1” Selecciona Modo en Conversión Continua.
“0” Selecciona Modo de una Sola Conversión.
ADSC ADC Start Conversion Se debe escribir un “1” en este bit para iniciar la conversión.
ADE ADC Enable “1” Habilita al ADC.
Tabla ADC-2. Bits de los registros especiales utilizados para el ADC.
La entrada del ADC tiene un circuito Muestreador Retenedor, que mantiene la señal invariante una vez que ha comenzado la conversión. El número de entradas analógicas conectadas al ADC, a través de un multiplexor analógico varía de un microcontrolador a otro, siendo ocho el número máximo. La conversión analógica a digital se realiza sobre un solo canal o entrada analógica seleccionado, para esto se utilizan los bits MUX2, MUX1 y MUX0. La Tabla ADC-3 muestra las posibles combinaciones de estos bits y el canal seleccionado. Recuerde que algunos microcontroladores no tienen disponible los ocho canales de entrada.
MUX2 MUX1 MUX0 SELECCIOADO CAAL
0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 4 1 0 1 5 1 1 0 6 1 1 1 7
Tabla ADC-3. Selección canal de entrada con los bits MUX2, MUX1 y MUX0 del registro ADMUX.
La Tabla ADC-4 muestra la posición de las entradas o canales analógicos para cada miembro de la familia AVR.
canal de entrada analogico
DISPOSITIVO 0 1 2 3 4 5 6 7 AT90xS4434 40 (PA0) 39 (PA1) 38 (PA2) 37 (PA3) 36 (PA4) 35 (PA5) 34 (PA6) 33 (PA7) AT90xS8535 40 (PA0) 39 (PA1) 38 (PA2) 37 (PA3) 36 (PA4) 35 (PA5) 34 (PA6) 33 (PA7) AT90xS2333 23 (PC0) 24 (PC1) 25 (PC2) 26 (PC3) 27 (PC4) 28 (PC5) - - AT90xS4433 23 (PC0) 24 (PC1) 25 (PC2) 26 (PC3) 27 (PC4) 28 (PC5) - - Tabla ADC-4. Localización de las entradas para el ADC en la familia AVR.
(EMPAQUETADO DIP).
Para realizar las conversiones analógico a digital, el circuito ADC requiere de una señal se reloj (AD Clock) que se deriva del oscilador principal, la frecuencia de la señal AD Clock debe ser mayor a 50Hz y menor a 200KHz. Si se selecciona la frecuencia más alta, aumentará también la velocidad de conversión, pero la precisión disminuirá, esto es, a mayor frecuencia, menor precisión. Para establecer la frecuencia de la señal AD Clock se utilizan los bits ADPS2, ADPS1 y ADPS0 del registro ADCSR. La Tabla ADC-5 muestra las frecuencias posibles.
ADPS2 ADPS1 ADPS0 Frecuencia
0 0 0 2 OSC F 0 0 1 2 OSC F 0 1 0 4 OSC F 0 1 1 8 OSC F 1 0 0 16 OSC F 1 0 1 32 OSC F 1 1 0 64 OSC F 1 1 1 128 OSC F
Tabla ADC-5. Efecto de los bits ADPS2-ADPS0 del registro ADCSR en la selección de la señal AD Clock.
1.- Deshabilite interrupciones. Recomendado pero no necesario.
2.- Configure como entrada los pines del microcontrolador que utilizará como entradas analógicas.
3.- Seleccione la frecuencia de la señal AD Clock. Ver Tabla ADC-5. 4.- Seleccione el modo de operación:
Modo de una Sola Conversión ADCSR<ADFR>=”0” Modo de Conversión Continua ADCSR<ADFR>=”1”
5.- Si lo requiere, habilite la interrupción del ADC. Por lo general sí se habilita la interrupción.
ADCSR<ADIE>=”1”
6.- Limpie posible interrupción falsa del ADC, para esto escriba un “1” en el bit ADIF del registro ADCSR.
7.- Seleccione el canal de entrada analógico deseado. Ver Tabla ADC-3 y Tabla ADC-4. 8.- Habilite el ADC.
9.- Habilite interrupciones globales. 10.- Inicie conversión.
ADCSR<ADSC>=1”
Para Modo de una Sola Conversión es necesario iniciar cada una después de que el ADC ha terminado.
En Modo de Conversión Continua se ejecuta la correspondiente ISR cada vez que el ADC termina una conversión y automáticamente comienza la siguiente.
Para reducir el ruido que induce el CPU del microcontrolador, se puede poner en estado de espera pasivo a este último (cancelador de ruido) para esto hay que realizar los siguientes pasos:
1. Configurar al ADC en Modo de una Sola Conversión y habilitar la interrupción. 2. Entrar a modo de espera (IDLE)
3. Al terminar una conversión el ADC, se ejecutará la ISR. I.S.R.
La Tabla ADC-6 muestra los vectores y direcciones de interrupción del ADC. La interrupción sucede cada vez que se termina una conversión analógico a digital. Si programa en ensamblador necesitará redireccionar hacia donde realmente se encuentre la ISR.
DISPOSITIVO VECTOR DIRECCIO
AT90xS4434 15 $00E
AT90xS8535 15 $00E
AT90xS2333 12 $00B
AT90xS4433 12 $00B
IMPLATACIO
En aras de la claridad, el código presentado no está optimizado ni en tamaño ni en velocidad.
El siguiente programa muestra como configurar al ADC en Modo de Conversión Continua.
;CONVERTIDOR ANALOGICO DIGITAL ;Modo Conversión Continua ;Modo Conversión Continua ;Modo Conversión Continua ;Modo Conversión Continua
;************************************************************
.include "4434def.inc" ;archivo que contiene los nombres de registros ;especiales
;Sustitúyalo por el archivo correspondiente al ;microcontrolador que utiliza.
;************************************************************ .org $0 ;vector de inicio.
rjmp RESET ;redireccionado a la dirección donde se encuentra RESET ;************************************************************
.org ADCCaddr ;Vector de ADC conversión terminada rjmp ADC_Fin ;redireccionado.
;************************************************************ ADC_Fin:
;Escriba aqui su codigo in r17,ADCL
in r18,ADCH out PORTB,r17 reti
RESET: ;inicio de programa.
;************************************************************ ldi r16,high(RAMEND) out SPH,r16 ldi r16,low(RAMEND) out SPL,r16 ;************************************************************ ldi r17,0xff
out DDRB,r17 ;Puerto B como salida
;PASO1 ;PASO1 ;PASO1 ;PASO1
cli ;SREG<I>=0.int. deshabilitadas. ;PASO
;PASO ;PASO ;PASO2222
ldi r17,0x00 ;Configura como entrada Puerto A out DDRA,r17 ;Son las entradas Analógicas ;PASO3
;PASO3 ;PASO3 ;PASO3
cbi ADCSR,ADPS2 ;Frecuencia de la señal ADC Clock sbi ADCSR,ADPS1 ;es fosc/4
cbi ADCSR,ADPS0 ;ADPS0=0 ADPS1=1 ADPS2=0 ;PASO4
;PASO4 ;PASO4 ;PASO4
sbi ADCSR,ADFR ;Modo Conversión Continua ;PASO5
;PASO5 ;PASO5 ;PASO5
sbi ADCSR,ADIE ;Habilita Int ADC ;PASO6
;PASO6 ;PASO6 ;PASO6
sbi ADCSR,ADIF ;Limpia Posible Interrupción Falsa ;PASO7
;PASO7 ;PASO7 ;PASO7
cbi ADMUX,MUX2 ;Selecciona Canal 0 cbi ADMUX,MUX1 ;Pin 40, PA0
cbi ADMUX,MUX0 ;PASO8
;PASO8 ;PASO8 ;PASO8
sbi ADCSR,ADEN ;Habilita ADC ;PASO9
;PASO9 ;PASO9 ;PASO9
sei ;Habilita Interrupciones Globales
;PASO10 ;PASO10 ;PASO10
;PASO10
sbi ADCSR,ADSC ;Inicia la primera conversión. loop:
nop nop
rjmp loop ;loop infinito
El siguiente programa muestra como configurar al ADC en Modo de una Sola Conversión.
;CONVERTIDOR ANALOGICO DIGITAL
;Modo una Sola Conversión
;************************************************************
.include "4434def.inc" ;archivo que contiene los nombres de registros ;especiales
;Sustitúyalo por el archivo correspondiente al ;microcontrolador que utiliza.
;************************************************************
.org $0 ;vector de inicio.
rjmp RESET ;redireccionado a la dirección donde se encuentra RESET ;************************************************************.org ADCCaddr
;Vector de ADC conversión terminada rjmp ADC_Fin ;redireccionado.
;************************************************************ ADC_Fin:
;Escriba aqui su codigo ldi r17,0xff
reti
RESET: ;inicio de programa.
;************************************************************ ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
;************************************************************ ldi r17,0xff
out DDRB,r17 ;Puerto B como salida
;PASO1 ;PASO1 ;PASO1 ;PASO1
cli ;SREG<I>=0.int. deshabilitadas. ;PASO2
;PASO2 ;PASO2 ;PASO2
ldi r17,0x00 ;Configura como entrada Puerto A out DDRA,r17 ;Son las entradas Analógicas ;PASO3
;PASO3 ;PASO3 ;PASO3
cbi ADCSR,ADPS2 ;Frecuencia de la señal ADC Clock sbi ADCSR,ADPS1 ;es fosc/4
cbi ADCSR,ADPS0 ;ADPS0=0 ADPS1=1 ADPS2=0 ;PASO4
;PASO4 ;PASO4 ;PASO4
cbi ADCSR,ADFR ;Modo Conversión Continua ;PASO5
;PASO5 ;PASO5 ;PASO5
sbi ADCSR,ADIE ;Habilita Int ADC ;PASO6
;PASO6 ;PASO6 ;PASO6
sbi ADCSR,ADIF ;Limpia Posible Interrupción Falsa ;PASO7
;PASO7 ;PASO7 ;PASO7
cbi ADMUX,MUX2 ;Selecciona Canal 0 cbi ADMUX,MUX1 ;Pin 40, PA0
cbi ADMUX,MUX0 ;PASO8
;PASO8 ;PASO8 ;PASO8
sbi ADCSR,ADEN ;Habilita ADC ;PASO9
;PASO9 ;PASO9 ;PASO9
sei ;Habilita Interrupciones Globales
;PASO10 ;PASO10 ;PASO10
;PASO10
sbi ADCSR,ADSC ;Inicia la primera conversión. loop:
nop nop
sbrs r17,0 ;espera hasta terminar conversion rjmp loop in r17,ADCL in r18,ADCH out PORTB,r17 ldi r17,0x00 nop
OMBRE DEL PERIFÉRICO: COMPARADOR AALÓGICO. DESCRIPCIÓ GEERAL.
El comparador de voltaje conecta su entrada negativa y positiva a los pines AIN1 y AIN0 del microcontrolador respectivamente. La salida del comparador analógico está conectada directamente al bit ACO del registro ACSR.
DISPOIBLE E
AT90S8515, AT90S1200, AT90S2313, 90S2333,AT90LS2333, AT90S4433, AT90LS4433.
APLICACIOES
Detección picos de señales analógicas.
Control de potencia por ángulo de disparo con Tiristores. Conversión analógico a digital.
REGISTROS IVOLUCRADOS
DISPOSITIVO: AT90S8515, AT90S2313, AT90XX4434, AT90XX8535. OMBRE
REGISTRO B7 B6 B5 B4 B3 B2 B1 B0
ACSR ACD ACO ACI ACIE ACIC ACIS1 ACIS0 Tabla CA-1A. Registros Involucrados con el Comparador Analógico. DISPOSITIVO AT90S1200.
OMBRE REGISTRO
B7 B6 B5 B4 B3 B2 B1 B0
ACSR ACD ACO ACI ACIE ACIS1 ACIS0
Tabla CA-1B. Registros Involucrados con el Comparador Analógico.
DISPOSITIVO AT90XX2333, AT90XX4433. OMBRE
REGISTRO
B7 B6 B5 B4 B3 B2 B1 B0
ACSR ACD AINBG ACO ACI ACIE ACIC ACIS1 ACIS0 Tabla CA-1C. Registros Involucrados con el Comparador Analógico.
El significado de cada bit y su función se puede observar en la Tabla CA-2.
BIT SIGIFICADO FUCIÓ
ACD Analog Comparator Disable.
“1” Apaga al comparador analógico. “0” Enciende comparador analógico. ACO Analog comparator
Output.
Conectado de manera directa a la salida del comparador analógico. ACI Analog Comparator
Interrupt Flag.
“1” indica que se ha producido una interrupción debida del comparador analógico . Ver bits ACIS1 y ACIS0. ACIE Analog Comparator
Interrupt Enable.
“1” Habilita interrupción del comparador analógico. ACIC Analog Comparator
Input Capture Enable.
“1” Hace que la captura del
Timer/Counter1 sea activada por el comparador analógico.
ACIS1 Analog Comparator Interrupt Mode Select.
Ver Tabla CA-3.
ACIS0 Analog Comparator Interrupt Mode Select.
Ver Tabla CA-3.
AIBG Analog Comparator BandGap Select
“1” Habilita la referencia interna. En este caso un voltaje de 1.22 ±0.05V se aplica en la entrada positiva (AIN0) del comparador, sustituyendo a la señal proveniente del exterior. “0” La señal proveniente del exterior se aplica a la entrada AIN0 del comparador analógico.
Tabla CA-2. Bits de los registros especiales utilizados para el comparador
analógico.
La salida del comprador analógico – conectada al bit ACO del registro ACR- tendrá valor “1” siempre que la señal en el pin AIN0 sea mayor a la de AIN1. En caso contrario la salida será “0”.
La interrupción del comparador analógico se puede producir cuando el bit ACO pasa de “0” a “1” (flanco positivo) o cuando pasa de “1” a “0” (flanco negativo).
Los bits ACIS1 y ACIS0 configuran la interrupción del comparador analógico, como se muestra en la Tabla CA-3.