Microcontroladores AVR Configuracion Total de Perifericos

75
ASDRÚBAL LÓPEZ CHAU.
  • date post

    27-Nov-2015
  • Category

    Documents

  • view

    219
  • download

    17

Transcript of Microcontroladores AVR Configuracion Total de Perifericos

ASDRÚBAL LÓPEZ CHAU.

2

DEDICATORIA A mi Amada Esposa Lutecia.

A Mamá y Papá.

3

CONTENIDO I�TRODUCCIÓ� ................................................................................................................ 7 �OMBRE DEL PERIFÉRICO: TIMER/COU�TER 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/COU�TER0. ................................................. 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- CO�VERTIDOR A�ALÓ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 A�ALÓGICO. .............................. 45 DESCRIPCIÓN GENERAL. ........................................................................................... 45 DISPONIBLE EN ............................................................................................................ 45

4

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 - I�TERFAZ 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 - U�IVERSAL ASY�CHRO�OUS RECEIVER A�D TRA�SMITTER. ................................................................................ 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 BIBLIOGRAFÍA. ............................................................................................................... 75

5

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-2. Bits de los registros especiales utilizados para el comparador analógico. ..... 46

6

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 Tabla UART-6. Vectores de interrupción para UART........................................................ 69

7

I�TRODUCCIÓ�

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Ó� GE�ERAL. En esta sección se describe el funcionamiento general del periférico.

♦ DISPO�IBLE E�. Se muestran los microcontroladores en los que esta incluido

cada periférico.

♦ APLICACIO�ES. Son mencionadas algunas aplicaciones donde puede ser utilizado.

♦ REGISTROS I�VOLUCRADOS. Se describe el efecto de cada bit de los

registros especiales involucrados con cada periférico.

♦ SECUE�CIA DE CO�FIGURACIÓ�. 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.

♦ IMPLA�TACIÓ�. 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.

8

9

�OMBRE DEL PERIFÉRICO: TIMER/COU�TER 1. DESCRIPCIÓ� GE�ERAL. 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. DISPO�IBLE E� AT90S8515, AT90S2313, AT90XX2333, AT90XX4433, AT90XX4434, AT90XX8535, AT90C8534. APLICACIO�ES Generación de señales PWM. Bases de Tiempo. Medición de frecuencia. REGISTROS I�VOLUCRADOS 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.

10

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 TC�T1 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 TC�T1 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 TC�T1 Todos Los Bits OCR1 Todos Los Bits ICR1 Todos Los Bits

11

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 TC�T1 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 TC�T1 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.

12

BIT SIG�IFICADO FU�CIÓ�

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.

IC�C1 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...

13

Continuación... BIT SIG�IFICADO FU�CIÓ�

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).

TC�T1 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 CO�TADOR. 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.

14

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

SECUE�CIA DE CO�FIGURACIÓ� MODO TEMPORIZADOR Y CO�TADOR. 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.

15

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 IC�C1

CA�CELADOR DE RUIDO

“0” Deshabilitado “1” Habilitado

Tabla TC1-7 Efecto del bit ICNC1 del registro TCCR1B.

16

SECUE�CIA DE CO�FIGURACIÓ� 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).

17

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.

En la Tabla TC1-11 se muestra el número de pin OC1A y OC1B para cada dispositivo.

18

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. SECUE�CIA DE CO�FIGURACIÓ� 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Ó�

19

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 GE�ERADOR DE SEÑALES PWM (MODULACIÓ� POR A�CHO 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.

20

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

21

FRECUE�CIA DE LA SEÑAL

PWM

MÁXIMO VALOR

DE TC�T1

RESOLUCIÓ� (BITS)

5101Τf 255 8

10221Τf 511 9

20461Τ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.

SECUE�CIA DE CO�FIGURACIÓ� 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.

22

IMPLA�TACIÓ�. 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/COU�TER 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

cli ;SREG<I>=0.int. deshabilitadas.

23

;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/COU�TER 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

;**********************************************

24

;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 ;se generen interrupciones.

25

nop

nop

rjmp loop ;loop infinito

TIMER/COU�TER 1 MODO GE�ERADOR 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

;COM1x1=1 COM1x0=0.

26

;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/COU�TER 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

27

;**********************************************

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

rjmp loop ;loop infinito

28

29

�OMBRE DEL PERIFÉRICO: TIMER/COU�TER0. FU�CIO�AMIE�TO GE�ERAL 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). DISPO�IBLE E� AT90S1200, T90S2313, AT90S2323, AT90LS2323, AT90S2343, AT90LS2343, AT90S2333, T90LS2333, AT90S4433, AT90LS4433, AT90S4414, AT90S8515, AT90S4434, AT90LS4434, AT90S8535, AT90LS8535, AT90C8534. APLICACIO�ES Medición de intervalos de tiempo. Generación de bases de Tiempo. Tacómetro digital. REGISTROS I�VOLUCRADOS. 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

Tabla TC0-1. Registros involucrados con el Timer/Counter 0.

30

El significado de cada bit y su función se puede observar en la Tabla TC0-2.

BIT significado FU�CIÓ� 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.

31

CS02 CS01 CS00 ORIGE�

Y PREESCALAMIE�TO 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 -

Tabla TC0-4. Localización de pin T0 para la familia AT90X.

32

SECUE�CIA DE CO�FIGURACIÓ� 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.

33

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

IMPLA�TACIÓ�. 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/COU�TER 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.

34

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

rjmp loop ;loop infinito

35

�OTAS DE CO�FIGURACIÓ�. 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.

36

37

�OMBRE DEL PERIFÉRICO: ADC- CO�VERTIDOR A�ALÓGICO DIGITAL. DESCRIPCIÓ� GE�ERAL. 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.

DISPO�IBLE E� AT90xS4434, AT90xS8535, AT90xS2333, AT90xS4433. APLICACIO�ES Sistemas de adquisición de señales analógicas, Sistemas de Control Digital, etc. REGISTROS I�VOLUCRADOS

�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.

38

El significado de cada bit y su función se puede observar en la Tabla ADC-2.

BIT SIG�IFICADO FU�CIÓ� 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 CA�AL SELECCIO�ADO

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.

39

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

OSCF

0 0 1 2

OSCF

0 1 0 4

OSCF

0 1 1 8

OSCF

1 0 0 16

OSCF

1 0 1 32

OSCF

1 1 0 64

OSCF

1 1 1 128

OSCF

Tabla ADC-5. Efecto de los bits ADPS2-ADPS0 del registro ADCSR en la selección de la señal AD Clock.

SECUE�CIA DE CO�FIGURACIÓ� ADC.

40

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

Tabla ADC-6. Vectores de interrupción para el ADC.

41

IMPLA�TACIO� 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

42

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)

out SPL,r16

43

;************************************************************

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

rjmp loop ;loop infinito

44

45

�OMBRE DEL PERIFÉRICO: COMPARADOR A�ALÓGICO. DESCRIPCIÓ� GE�ERAL. 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.

DISPO�IBLE E� AT90S8515, AT90S1200, AT90S2313, 90S2333,AT90LS2333, AT90S4433, AT90LS4433. APLICACIO�ES Detección picos de señales analógicas. Control de potencia por ángulo de disparo con Tiristores. Conversión analógico a digital. REGISTROS I�VOLUCRADOS 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.

46

El significado de cada bit y su función se puede observar en la Tabla CA-2.

BIT SIG�IFICADO FU�CIÓ� 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.

AI�BG 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.

47

ACIS1 ACIS0 MOTIVO DE

GE�ERACIÓ� DE I�TERRUPCIÓ�

0 0 La salida del comparador analógico cambia de estado.

0 1 Reservado. 1 0 La salida del comparador

analógico produce un flanco negativo.

1 1 La salida del comparador analógico produce un flanco positivo.

Tabla CA-3. Efecto de los bits ACIS1 y ACIS0 del registro ACSR en la generación de interrupción del Comparador Analógico.

La localización de los pines AIN0 y AIN1 de cada elemento de la familia AVR se muestra en la Tabla CA-4.

DISPOSITIVO AI�0 (in +)

AI�1 (in -)

AT90S1200 PB0 (PIN 12)

PB1 (PIN 13)

AT90S2313 PB0 (PIN 12)

PB1 (PIN 13)

AT90XX2333 PD6 (PIN 12)

PD7 (PIN 13)

AT90XX4433 PD6 (PIN 12)

PD7 (PIN 13)

AT90S8515 PB 2 (PIN 3)

PB 3 (PIN 4)

AT90XX4414 PB 2 (PIN 3)

PB 3 (PIN 4)

AT90XX8535 PB 2 (PIN 3)

PB 3 (PIN 4)

Tabla CA-4. Localización de los pines AIN0 y AIN1 en la familia AVR. EMPAQUETADO DIP).

SECUE�CIA DE CO�FIGURACIÓ� COMPARADOR A�ALÓGICO. 1 Deshabilite interrupciones globales.

SREG<I>=”0” 2 Deshabilite la interrupción del comparador analógico (Siempre que cambie la

configuración de este periférico, lo recomendable es deshabilitar su interrupción). ACSR<ACIE>=”0”

48

3 Configure los pines AIN1 y AIN0 como entradas. 4 Si el dispositivo soporta referencia interna, coloque un “1” o un “0” en el bit AINBG de

acuerdo a lo indicado en la Tabla CA-2. 5 Seleccione el evento que generará la interrupción. Ver Tabla CA-3. 6 Si requiere producir un evento de captura (ver capitulo Timer/Counter1) ponga el bit

ACIC en “1”. En caso contrario póngalo en “0”. 7 Habilite el comparado analógico

ACSR<ACD>=”1”. 8 Si lo requiere, habilite la interrupción del comparador analógico y las interrupciones

globales ACSR<ACIE>=”1”. SREG<I>=”1”. I.S.R. Cuando se produce cualquiera de las situaciones presentadas en la Tabla CA-3, y además, las interrupciones globales han sido habilitadas, el CPU salta a la dirección mostrada en la Tabla CA-5.

DISPOSITIVO VECTOR DIRECCIO� AT90S1200 5 $003 AT90S2313 11 $00A AT90S4414 13 $00C AT90S8515 13 $00C AT90XX2333 14 $00D AT90XX4433 14 $00D AT90XX4434 17 $010

Tabla CA-5. Vectores de interrupción para el comprador analógico.

49

IMPLA�TACIO� En aras de la claridad, el código presentado no está optimizado ni en tamaño ni en velocidad. El programa siguiente configura al comparador analógico para que genere interrupciones en cada flanco negativo. ;AIN0 y AIN1 se encuentran en el PORTB

;del AT90S8515. Si usa otro dispositivo

;Vea Tabla CA-4.

;************************************************************************

.include "8515def.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 ACIaddr ;vector del Comparador Analogico

rjmp CompAn ;redireccionado.

;************************************************************************

CompAn:

;Escriba aqui su codigo

reti

RESET: ;inicio de programa.

;************************************************************************

ldi r16,high(RAMEND)

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,0x80 ;Deshabilita int del

out ACSR,r17 ;Comparador Analogico. (ACIE="0")

;PASO3;PASO3;PASO3;PASO3

ldi r17,0x00 ;Configura como entrada los pines

out DDRB,r17 ;correspondientes a AIN0 y AIN1

;Esta linea cambia en otro dispositivo.

;PASO4;PASO4;PASO4;PASO4

;// in r17,ACSR ;EL AT90S8515 no tiene circuito de

;// ori r17,(1<<AINBG) ;referencia interna

;// out ACSR,r17 ;

50

;PASO5;PASO5;PASO5;PASO5

in r17,ACSR ;Se generara la interrupción en cada

ori r17,0x02 ;flanco descendente de la salida del

out ACSR,r17 ;Comparador Analogico (bit ACO)

;PASO6;PASO6;PASO6;PASO6

; in r17,ACSR

; ori r17,(1<<ACIC) ;Si desa habilitar el evento de captura

; out ACSR,r17 ;descomente esto

;PASO7;PASO7;PASO7;PASO7

in r17,ACSR ;Habilita al comparador Analogico

andi r17,0x7f ;ACD="0"

out ACSR,r17

;PASO8;PASO8;PASO8;PASO8

in r17,ACSR ;Habilita int del Comparador

ori r17,(1<<ACIE) ;Analogico

out ACSR,r17

sei

loop:

nop

nop

nop

rjmp loop ;loop infinito

51

52

�OMBRE DEL PERIFÉRICO: PERRO GUARDIÁ� (WATCHDOG TIMER). DESCRIPCIÓ� GE�ERAL. Este periférico permite que el microcontrolador se reinicie automáticamente mediante un circuito contador, que se incrementa continuamente a una frecuencia de 1MHz aproximadamente. Para evitar que el microcontrolador se reinicie, hay que restablecer el valor del contador antes de que este se desborde. El restablecimiento del contador se efectúa mediante una instrucción especial (WDR). DISPO�IBLE E� AT90S1200, AT90S2313, AT90S2323, AT90LS2323, AT90S2343, AT90LS2343, AT90S2333, AT90LS2333, AT90S4433, AT90LS4433, AT90S4414, AT90S8515, AT90S4434, AT90LS4434, AT90S8535, AT90LS8535 APLICACIO�ES. El WATCHDOG TIMER se utiliza generalmente en aquellas situaciones en las que se corre el riesgo de que el microcontrolador entre en un estado de espera infinito. REGISTROS I�VOLUCRADOS. DISPOSITIVO: AT90S1200.

�OMBRE

DEL ARCHIVO.

BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 FU�CIÓ�

WDTCR - - - - WDE WDP2 WDP1 WDP0 WDE = “1” habilita WATCHDOG TIMER. WDE = “0” deshabilita WATCHDOG TIMER.

Tabla WDT-1A. Registros involucrados.

DISPOSITIVO: AT90S2313, AT90S2323, AT90LS2323, AT90S2343, AT90LS2343, AT90S2333, AT90LS2333, AT090S4433,AT90LS4433,AT90S8515, AT90S4414, AT90S4434, AT90LS4434, AT90S8535, AT90LS8535.

�OMBRE DEL

ARCHIVO.

BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0

WDTCR - - - WDTOE WDE WDP2 WDP1 WDP0

Tabla WDT-1B. Registros involucrados. El bit WDE de registro WDTCR es el responsable de habilitar o deshabilitar el periférico Perro Guardián. Los tres bits menos significativos de este registro permiten establecer el

53

máximo intervalo de tiempo que puede ocurrir entre dos instrucciones WDR para evitar una interrupción, es decir, con estos tres bits se controla el limite máximo de tiempo que con el que se cuenta para restablecer el contador interno del Perro Guardián, antes de que el microcontrolador se reinicie. La Tabla WDT-2 muestra las posibles combinaciones de los bits WDP2, WDP1 y WDP0. El bit WDTOE del registro WDTCR ayuda a prevenir una desactivación accidental del Perro Guardián. Para activar al Perro Guardián, simplemente escriba un “1” al bit WDE. Para desactivarlo siga los siguientes pasos (excepto para AT90S1200):

(a) Escriba al mismo tiempo un “1” en los bits WDTOE y WDE del registro WDTCR. (b) En seguida, antes de cuatro ciclos de reloj, escriba un “0” al bit WDE.

WDP2 WDP1 WDP0

I�TERVALO DE TIEMPO

A 5 v (mili segundos)

I�TERVALO DE TIEMPO

A 3 v (mili segundos)

�ÚMERO DE CICLOS DEL CO�TADOR I�TERO DEL

PERRO GUARDIA�. (K CICLOS)

0 0 0 15 47 16

0 0 1 30 94 32

0 1 0 60 190 64

0 1 1 120 380 128

1 0 0 240 750 256

1 0 1 490 1500 512

1 1 0 970 3000 1024

1 1 1 1900 6000 2048

Tabla WDT-2. Origen de la señal de reloj y pre escalamiento para el perro guardián.

SECUE�CIA DE CO�FIGURACIÓ� WDT. 1 Deshabilite Interrupciones Globales. (Recomendado pero no necesario)

SREG<I> =”0” 2 Seleccione el intervalo de tiempo. Ver Tabla WDT-2. 3 Habilite el Perro Guardián.

WDTCR<WDE>=”1” A partir del momento de habilitar al Perro Guardián, cuenta con el intervalo de tiempo especificado en la Tabla WDT-2 , para ejecutar una instrucción WDR. En caso de NO ejecutar la instrucción WDR, el microcontrolador se reiniciará. 4 Habilite interrupciones globales.

SREG<I>=”1”

54

IMPLA�TACIÓ�. En aras de la claridad el código no está optimizado ni en tamaño ni en velocidad. 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. ;************************************************************.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

;************************************************************ RESET:

;inicio de programa.

;************************************************************;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;PASO1

cli ;SREG<I>=0.int. deshabilitadas.

;PASO2;PASO2;PASO2;PASO2

ldi r17,0

out WDTCR,r17 ;Watch Dog Timer se

;reinicia cada 15 ms.

;PASO3;PASO3;PASO3;PASO3

in r17,WDTCR

ori r17,(1<<WDE) ;Habilita Watch Dog Timer

out WDTCR,r17

;PASO4;PASO4;PASO4;PASO4

sei ;Habilita interrupciones.

loop: ;Como No se ejecuta

nop ;nunca la instruccion WDR

nop ;el microcontrolador

nop ;se reiniciará .

rjmp loop ;loop infinito

WDR ;nunca se ejecuta

55

56

�OMBRE DEL PERIFÉRICO: SPI - I�TERFAZ SERIAL PERIFERICA. DESCRIPCIÓ� GE�ERAL Este periférico permite al microcontrolador comunicarse de manera serial con otros dispositivos externos así como con otros microcontroladores. El tipo de comunicación es bi-direccional del tipo asíncrona y con una alta velocidad de transferencia. Por favor, lea la sección REGISTROS INVOLUCRADOS de este capitulo para una explicación más detallada.

DISPO�IBLE E� AT90xS2333, AT90xS4433, AT90S8515,AT90S4414, AT90Xs4434 y AT90Xs8535.

APLICACIO�ES Comunicaciones seriales con dispositivos electrónicos (ADC, Memorias, etc.) o entre varios microcontroladores. REGISTROS I�VOLUCRADOS

�OMBRE REGISTRO

B7 B6 B5 B4 B3 B2 B1 B0

SPCR SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 Tabla SPI-1A. Registros Involucrados con SPI

�OMBRE REGISTRO

B7 B6 B5 B4 B3 B2 B1 B0

SPSR SPIF WCOL - - - - - - Tabla SPI-1B. Registros Involucrados con SPI.

�OMBRE REGISTRO

B7 B6 B5 B4 B3 B2 B1 B0

SPDR MSB LSB Tabla SPI-1C. Registros Involucrados con SPI.

El significado de cada bit y su función se puede observar en la Tabla SPI-2.

57

BIT SIG�IFICADO FU�CIÓ� SPIE SPI Interrupt Enable “1” Habilita interrupción del SPI

“0” La deshabilita. SPE SPI Enable “1” Habilita al Periférico SPI

“0” Lo deshabilita. DORD Data Order Especifica el orden en que se transmiten los

datos. “1” Se envía primero el LSB “0” Se envía primero el MSB

MSTR Master/Slave Select Especifica el modo de operación “1” Modo Maestro “0” Modo Esclavo

CPOL Clock Polarity Especifica la polaridad de la señal de Clock (SCK). “1” SCK Se mantiene en ALTO (“1”) cuando esta en estado de Espera (Idle). “0” SCK Se mantiene en BAJO (“0”) cuando esta en estado de Espera (Idle).

CPHA Clock Phase Especifica la fase de la señal SCK con respecto los datos. Ver Figura SPI-1.

SPR1 SPI Clock Rate Select Ver Tabla SPI-3 SPR0 SPI Clock Rate Select Ver Tabla SPI-3

SPIF SPI Interrupt Flag Se pone en “1” cuando se completa una

Transferencia. WCOL Write Collision Flag Este bit es puesto en “1” si se escribe en el

registro SPDR mientras se esta efectuando una transferencia.

Tabla SPI-2. Bits de los registros especiales utilizados para el SPI Los bits SPR1 y SPR0 determinan la velocidad de la señal SCK, misma que se encarga de sincronizar las transferencias de datos.

SPR1 SPR0 FRECUE�CIA DE SCK 0 0 Fosc principal/4 0 1 Fosc principal/16 1 0 Fosc principal/64 1 1 Fosc principal/128

Tabla SPI-3. Efecto de los bits SPR1 y SPR0 del registro SPCR sobre la frecuencia de la señal de Clock.

En una comunicación SPI existe siempre un MAESTRO y un ESCLAVO. Generalmente un microcontrolador AVR toma el papel de maestro y cualquier dispositivo conectado a él se comporta como esclavo (Aunque los papeles pueden intercambiarse). Para comunicar un

58

dispositivo mediante SPI con un microcontrolador AVR, se utilizan cuatro pines de este último: MISO, MOSI, SCK y SS . La localización de estos pines se muestra en la Tabla SPI-4.

DISPOSITIVO MISO MOSI SCK SS AT90xS2333 18

(PB4) 17 (PB3)

19 (PB5)

16 (PB2)

AT90xS4433 18 (PB4)

17 (PB3)

19 (PB5)

16 (PB2)

AT90S8515 7 (PB6)

6 (PB5)

8 (PB7)

5 (PB4)

AT90S4414 7 (PB6)

6 (PB5)

8 (PB7)

5 (PB4)

AT90Xs4434 7 (PB6)

6 (PB5)

8 (PB7)

5 (PB4)

AT90Xs8535 7 (PB6)

6 (PB5)

8 (PB7)

5 (PB4)

Tabla SPI-4. Localización de los pines MISO, MOSI, SCK y SS en la familia AVR. (EMPAQUETADO DIP).

FU�CIO� DE LOS PI�ES MOSI, MISO, SCK Y SS E� MODO MAESTRO. El pin MOSI del microcontrolador puede ser configurado como entrada o salida en modo MAESTRO, sin embargo, para transmisiones se utiliza como SALIDA de los datos. Por el pin SCK se saca la señal de reloj que sincroniza el envío de bits desde un dispositivo hacia otro. Este pin también puede ser configurado como entrada o salida en modo MAESTRO. El pin MISO se comporta como ENTRADA de los datos seriales cuando el dispositivo AVR se encuentra en modo MAESTRO. Por último, el pin SS puede ser configurado como entrada o como salida. Al ser configurado este pin como SALIDA no afecta el funcionamiento del periférico SPI. Si el pin SS se configura como ENTRADA entonces afecta el sistema SPI de la siguiente manera: El pin SS debe mantenerse siempre en nivel alto (“1”), en caso de que este pin pase a nivel bajo (“0”) el microcontrolador pasará automáticamente a modo ESCLAVO. Esto evita una posible contención del bus poniendo los pines SCK y MOSI como entradas. Al pasar de modo MAESTRO a modo ESCLAVO por un cambio de nivel en el pin SS , el bit SPIF del registro SPSR es puesto a cero (“0”), por lo que se puede generar una interrupción. Como recomendación, si configura al pin SS como entrada, asegúrese de que el microcontrolador permanece en modo MAESTRO antes de transmitir datos.

59

FU�CIO� DE LOS PI�ES MOSI, MISO, SCK Y SS E� MODO ESCLAVO. El Pin MOSI se comporta como entrada de los datos. El pin SCK se comporta como entrada de la señal de reloj que sincroniza la transferencia de datos. El pin MISO puede ser configurado como entrada o salida en modo ESCLAVO. Normalmente se utiliza como salida de datos. El pin SS en modo ESCLAVO se comporta como entrada. Para poder recibir datos este pin debe mantenerse en estado bajo (“0”). En el caso de que el pin SS se encuentre en nivel alto (“1”), los tres pines (MOSI, MISO, SCK) se configuran automáticamente como entradas, deshabilitando cualquier recepción de datos. FASE Y POLARIDAD DE LA SEÑAL DE RELOJ. Los bits DORD, CPOL y CPHA del registro SPCR permiten configurar adecuadamente el formato en las transmisiones seriales . El formato requerido dependerá de los circuitos externos conectados al microcontrolador. El bit DORD puesto en “1” hace que en cada palabra transmitida, el bit menos significativo sea enviado primero. Si DORD es puesto a “0”, entonces se envía primero el bit mas significativo. El bit CPOL especifica la polaridad de la señal de reloj (SCK): CPOL en “1” hace que SCK se mantenga en ALTO (“1”) cuando NO se esté transmitiendo, CPOL en “0” hace que SCK se mantenga en BAJO (“0”) cuando no hay transmisiones. El bit CPHA permite adelantar o atrasar la señal reloj SCK con respecto a los datos provenientes del ESCLAVO. La Figura SPI-1 muestra este hecho. Observe que con CPHA en “0” los datos desde el ESCLAVO están preparados antes de que cambie la señal SCK.

Figura SPI-1. Efecto del bit CPHA sobre la señal SCK.

MSB

MSB

6

SCK CYCLE#

(FOR REFERENCE)

SCK (CPOL=0)

SCK (CPOL=1)

MOSI

(FROM MASTER)

MISO

(FROM SLAVE)

SS (TO SLAVE)

5 4 3 2 1 LSB

6 5 4 3 2 1 LSB

1 2 3 4 5 6 7 8 3

5

5(FROM MASTER)

SCK (CPOL=1)

SCK (CPOL=0)

SS (TO SLAVE)

MISO

(FROM SLAVE)

MOSI

MSB

MSB 6

6

(FOR REFERENCE)

SCK CYCLE# 1 2

4

4

23

3 2

LSB

LSB

1

1

4 65 87

CPHA=0 CPHA=1

60

SECUE�CIA DE CO�FIGURACIÓ� SPI. 1.- Deshabilite interrupciones.

Ponga SREG<I>=”0”. 2.- Configure los pines MOSI, MISO, SCK Y SS de acuerdo a lo requerido en su

aplicación. Si el modo de operación del microcontrolador será como MAESTRO, generalmente MOSI es SALIDA, MISO ENTRADA , SCK SALIDA y SS es SALIDA. En modo MAESTRO SS se configura como entrada solo cuando hay más de un microcontrolador conectado al bus SPI (MOSI, MISO y SCK). En modo ESCLAVO todos los pines son configurados automáticamente como entradas, a excepción de MISO que puede configurarse como salida o entrada, aunque generalmente se establece como SALIDA. Recuerde que en modo ESCLAVO los circuitos externos deben poner el pin SS en nivel bajo (“0”) para habilitar al SPI.

3.- Establezca el modo de operación: MAESTRO o ESCLAVO. Ver Tabla SPI-2.

4.- Establezca los bits DORD, CPOL y CPHA según sea necesario. Ver Tabla SPI-2 y Figura SPI-1.

5.- Seleccione la frecuencia de la señal SCK. Ver Tabla SPI-3. 6.- Habilite la interrupción del periférico SPI si así lo requiere. Generalmente sí es

necesario habilitarla. Ver Tabla SPI-2. SPCR<SPIE>=”1”.

7.- Habilite el periférico SPI. SPCR<SPE>=”1”

8.- Habilite interrupciones globales. SREG<I>=”1”.

Para transmitir una palabra (8 bits) por medio de SPI, simplemente escriba al registro SPDR el dato correspondiente. Cuando se completa una transmisión o recepción, se genera la interrupción correspondiente (siempre que se encuentren habilitadas las interrupciones). Para evitar corrupción de datos, antes de escribir al registro SPDR verifique que se haya completado la transferencia anterior. Si por alguna razón se escribe al registro SPDR antes de terminar una transmisión, entonces el bit WCOL se establece a “1” indicando un error. Para leer la ultima palabra recibida, lea el valor del registro SPDR. I.S.R. Si las interrupciones globales se encuentran habilitadas y el bit SPIE esta establecido en “1”, el periférico SPI puede generar una interrupción en cualquiera de los dos siguientes casos:

1. Cada vez que una transferencia es completada. 2. Si el pin SS esta configurado como entrada y es establecido a “0” por cualquier

circuito externo mientras en microcontrolador se encuentra en modo MAESTRO.

61

La Tabla SPI-5 muestra el vector de interrupción y la dirección correspondiente para cada dispositivo de la familia AVR.

DISPOSITIVO VECTOR DIRECCIO� AT90S4414 9 $008 AT90S8515 9 $008 AT90xS2333 8 $007 AT90xS4433 8 $007 AT90xS4434 11 $00A AT90Xs8535 11 $00A

Tabla SPI-5. Vectores de interrupción para el SPI.

IMPLA�TACIO� En aras de la claridad, el código presentado no está optimizado en tamaño ni en velocidad. El siguiente programa configura al microcontrolador en modo MAESTRO. El registro r17 contiene un valor que se incrementa y envía a través de SPI. El registro r18 se utiliza para notificar que ya se ha enviado el dato. ;SPI MODO MAESTRO.

;*****************************************************************

.include "8515def.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 SPIaddr

rjmp SPI_INT ;redireccionado hacia SPI_INT.

;*****************************************************************

SPI_INT:

;Solamente pone el registro r18 en $ff, para

;notificar que ya se ha enviado el dato.

ldi r18,0xff

reti

RESET: ;inicio de programa.

;*****************************************************************

ldi r16,high(RAMEND) ;Comente para dispositivos

;con RAM menor a 256 Bytes

out SPH,r16

ldi r16,low(RAMEND)

out SPL,r16

62

;*****************************************************************

;PASO1;PASO1;PASO1;PASO1

cli ;SREG<I>=0.int. deshabilitadas.

;PASO2;PASO2;PASO2;PASO2

;Para el AT90S8515 modo MAESTRO

;__

;SS PB4 SALIDA

;MOSI PB5 SALIDA

;MISO PB6 ENTRADA

;SCK PB7 SALIDA

ldi r17,0b10110000

out DDRB,r17

;PASO3;PASO3;PASO3;PASO3

sbi SPCR,MSTR;Poner el AVR en Modo Maestro.

;PASO4;PASO4;PASO4;PASO4

cbi SPCR,CPOL;SCK en Bajo cuando no transmite.

cbi SPCR,DORD;MSB se envia primero.

cbi SPCR,CPHA;fase del SCK.

;PASO5;PASO5;PASO5;PASO5

cbi SPCR,SPR0;Frecuencia de señal

cbi SPCR,SPR0;SCK es igual a fosc principal.

;PASO6;PASO6;PASO6;PASO6

sbi SPCR,SPIE;Habilita Int SPI

;PASO7;PASO7;PASO7;PASO7

sbi SPCR,SPE;Habilita periferico SPI

;PASO8;PASO8;PASO8;PASO8

sei ;Habilita Int globales.

clr r17

loop:

inc r17 ;Dato a Enviar.

clr r18 ;r18 =0

out SPDR,r17;Envia dato por SPI

rcall Funcion_Espera

rjmp loop ;loop infinito

;Espera hasta que se haya transmitido el dato

;a traves de SPI.

Funcion_Espera:

stop:

nop

nop

SBRS r18,0

rjmp stop

ret

63

64

�OMBRE DEL PERIFÉRICO: UART - U�IVERSAL ASY�CHRO�OUS RECEIVER A�D TRA�SMITTER. DESCRIPCIÓ� GE�ERAL. La UART permite al microcontrolador establecer comunicaciones seriales RS-232 con otros dispositivos. El tipo de comunicación Full Duplex, Asíncrona y las velocidades de transferencia son de hasta 115200 b.p.s. DISPO�IBLE E� AT90S2313, AT90xS2333, AT90xS4433, AT90S4414, AT90S8515AT90xS4434, AT90xS8535. APLICACIO�ES La UART es a menudo utilizada para realizar interfaces con computadoras personales. También se utiliza para adquisición de datos mediante la conexión con otros instrumentos tales como multímetros. REGISTROS I�VOLUCRADOS

�OMBRE REGISTRO

B7 B6 B5 B4 B3 B2 B1 B0

USR RXC TXC UDRE FE OR - - - UCR RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8

UBRR MSB LSB UDR MSB LSB

Tabla UART-1. Registros Involucrados con UART

El significado de cada bit y su función se puede observar en la Tabla UART-2.

BIT significado FU�CIÓ� RXC UART Receive Complete Este bit se establece a “1” cuando se recibe un

dato de manera serial por la UART. TXC UART Transmit Complete Este bit se establece a “1” cuando ha terminado

de enviar un dato por la UART.. UDRE UART Data Register

Empty Mediante este bit la UART indica ya está lista para enviar otro dato.

FE Framing Error Se establece a “1” cuando el bit de STOP es cero. (Un Error en la recepción).

OR Overrun Se establece a “1” cuando llega un nuevo dato por la UART y no se leyó el anterior. (Se ha perdido un dato).

Continua...

65

Continuación... BIT SIG�IFICADO FU�CIÓ�

RXCIE RX Complete Interrupt Enable

“1” Habilita Interrupción de Recepción.

TXCIE TX Complete Interrupt Enable

“1” Habilita Interrupción de Transmisión.

UDRIE UART Data Register Interrupt Enable

“1” Habilita Interrupción de Registro de Datos Vacío.

RXE� Receiver Enable “1” Habilita la Recepción de datos. TXE� Transmitter Enable “1” Habilita la Transmisión de datos. CHR9 9 Bit Characters “1” Hace que la longitud de los datos sea de 9

bits. “0” Longitud de los datos 8 bits.

RXB8 Receive Data Bit 8 Si CHR9 es “1” este bit contiene el noveno bit recibido.

TXB8 Transmit Data Bit 8 Si CHR9 es “1” este bit será el noveno bit a transmitir.

Tabla UART-2. Bits de los registros especiales utilizados UART.

RECEPCIÓ� Y TRA�SMISIÓ� DE DATOS. Para recibir o transmitir por la UART se deben de habilitar primero los bits RXEN y TXEN del registro UCR. El registro UDR se utiliza para recibir y transmitir datos por la UART. La longitud de los datos generalmente es de 8 bits, sin embargo, se puede configurar al periférico para que la longitud sea de 9 bits mediante el bit CHR9 del registro UCR. Esto es útil para ciertas aplicaciones donde el noveno bit puede servir como bit de dirección. Para saber si ha llegado un dato por la UART puede utilizarse el bit RXC del registro USR: si este bit se encuentra en “1” puede leerse el registro UDR para recuperar el último dato recibido. Otra opción es habilitar la interrupción de recepción y dentro de la I.S.R. leer el registro UDR. Para transmitir datos por la UART simplemente escriba al registro UDR, esto hará que el periférico realice lo necesario para comenzar a transmitir. Es conveniente revisar el bit TXC, para asegurarse que ya se ha transmitido completamente un dato antes de enviar otro. La recepción y transmisión de datos se realiza por los pines RXD y TXD del microcontrolador, la Tabla UART-3 muestra la posición de estos pines en cada miembro de la familia AVR con empaque DIP.

66

DISPOSITIVO TXD RXD

AT90S2313 3

(PD1) 2

(PD0)

AT90xS2333 3

(PD1) 2

(PD0)

AT90xS4433 3

(PD1) 2

(PD0)

AT90S8515 11

(PD1) 10

(PD0)

AT90S4414 11

(PD1) 10

(PD0)

AT90xS4434 15

(PD1) 14

(PD0)

AT90xS8535 7

(PB6) 6

(PB5) Tabla UART-3. Localización de los pines TXD y RXD en la familia AVR.

(EMPAQUETADO DIP). En las comunicaciones seriales la velocidad de transmisión / recepción de datos es muy importante. Esta velocidad esta relacionada con el Baud Rate. SELECCIÓ� DEL BAUD RATE. Para seleccionar el Baud Rate se utiliza el registro especial UBRR. La ecuación (1) muestra la relación entre el valor de Baud Rate y el del registro UBRR.

)1(16 +=

UBRR

foscRateBaud --------------(1)

En la ecuación (1) Baud Rate puede tomar cualquier valor, sin embargo los valores más comunes son mostrados en la Tabla UART-4.

67

Baud rate 2400 4800 9600 14400 19200 28800 38400 57600 76800 115200

Tabla UART-4. Valores más comunes de Baud Rate. En lugar de proporcionar una tabla completa con valores de UBRR, Baud Rate y frecuencias de oscilador principal (fosc) se mostrará un método para encontrar el valor de UBRR en función de Baud Rate y fosc. Para configurar las transmisiones / recepciones a un Baud Rate específico (Tabla UART-3) proceda como se muestra a continuación. (a) Encuentre el valor de UBRR para un Baud Rate.

( )1

16−=

BaudRate

fUBRR osc --------------(2)

(b) El valor de UBRR encontrado en el paso (a) se redondea. Este valor debe estar entre 1 y 255. (c) Sustituya en la ecuación (1) el valor de UBRR encontrado en el paso (b). Con esto encontrará Baud RateREAL (d) Calcule el porcentaje de error.

−=

RateBaudError REALRate Baud

1100% --------------(3)

Se recomienda que el porcentaje de error sea menor a 1%. EJEMPLO �UMERICO. Suponga que se desea configurar la UART a un Baud Rate de 19200. La frecuencia del oscilador (cristal) del microcontrolador es 4MHz.

(a)( )

11920016

4000000−=UBRR =12.02

(b) Redondeando se tiene UBRR =12

(c) 19230.769)112(16

4000000=

+=REALRateBaud

68

(d) 2.016.019200

19230.7691100% ≅=

−=Error

En resumen se tiene Baud Rate ≅19200, fosc=4MHz, UBRR=12, Error ≅0.2 %. Como el error es menor a 1% se puede utilizar el valor encontrado de UBRR sin problemas. Algunas frecuencias de osciladores permiten seleccionar valores de Baud Rate con porcentajes de error muy bajos. La Tabla UART-5 muestra algunos ejemplos.

Tabla UART-5. Valores de UBRR para algunas frecuencias de cristal. SECUE�CIA DE CO�FIGURACIÓ� UART

1. Deshabilite interrupciones. Recomendado pero no necesario. 2. Configure los pines TXD y RXD como entradas. 3. Configure el Baud Rate. Ver SECCION “SELECCIÓN DEL Baud Rate” 4. Seleccione la longitud de los datos. Generalmente es 8 bits.

UCR<CHR9>=”0” 8 bits UCR<CHR9>=”1” 9 bits

5. Si su aplicación lo requiere, habilite las interrupciones siguientes: Interrupción de Recepción. UCR<RXCIE>=”1” Interrupción de Transmisión. UCR< TXCIE >=”1” Interrupción de UDR vacío. UCR<UDRIE>=”1”

6. Habilite la interrupción transmisión y recepción de datos. Ver Tabla UART-2. 7. Habilite interrupciones globales.

Para transmitir un dato por medio de la UART, simplemente escriba al registro UDR el dato correspondiente. Para leer la ultima palabra recibida, lea el valor del registro UDR.

fosc= 1.8432 Mhz fosc= 3.6864 Mhz fosc= 7.3728 Mhz

BAUD RATE

%ERROR UBRR %ERROR UBRR %ERROR UBRR

2400 0.0 47 0.0 95 0.0 191 4800 0.0 23 0.0 47 0.0 95 9600 0.0 11 0.0 23 0.0 47 14400 0.0 7 0.0 15 0.0 31 19200 0.0 5 0.0 11 0.0 23 28800 0.0 3 0.0 7 0.0 15 38400 0.0 2 0.0 5 0.0 11 57600 0.0 1 0.0 3 0.0 7 76800 33.3 1 0.0 2 0.0 5 115200 0.0 0 0.0 1 0.0 3

69

I.S.R. Para que se generen interrupciones se requiere que se encuentren habilitadas, incluidas las interrupciones globales. Cuando se completa una transmisión, se genera la Interrupción de Transmisión Para evitar corrupción de datos, antes de escribir al registro UDR verifique que se haya completado la transferencia anterior. Cuando se recibe un dato por la UART, se genera la Interrupción de Recepción, si el dato anterior no fue leído, se genera un error de sobreflujo. La Tabla UART-6 muestra el vector de interrupción y la dirección correspondiente para cada dispositivo de la familia AVR.

I�TERRUPCIÓ� DE RECEPCIO�

I�TERRUPCIÓ� DE TRA�SMISIO�

I�TERRUPCIÓ� DE UDR VACIO

DISPOSITIVO VECTOR DIRECCIO� VECTOR DIRECCIO� VECTOR DIRECCIO�

AT90S2313 8 $007 10 $009 9 $008 AT90xS2333 9 $008 11 $00A 10 $009 AT90xS4433 9 $008 11 $00A 10 $009 AT90S8515 10 $009 12 $00B 11 $00A AT90S4414 10 $009 12 $00B 11 $00A

AT90xS4434 12 $00B 14 $00D 13 $00C AT90xS8535 12 $00B 14 $00D 13 $00C

Tabla UART-6. Vectores de interrupción para UART.

IMPLA�TACIO� En aras de la claridad, el código presentado no está optimizado ni en tamaño ni en velocidad. El siguiente programa configura a la UART a 19200 Baudios. Longitud de 8 Bits, Interrupciones de Recepción y Transmisión habilitadas. fosc es 4MHZ Cada vez que llega un dato por la UART se hace eco. ;-Configuración

;-Manejo Por Interrupciones.

;************************************************************************

.include "8515def.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 URXCaddr ;Vector de UART Recepcion completa.

rjmp Rx_Completa ;redireccionado.

.org UDREaddr ;Vector de Registro UDR vacio.

70

rjmp UDR_Vacio ;redireccionado.

.org UTXCaddr ;Vector de UART Transmisión completa.

rjmp Tx_Completa ;redireccionado.

;************************************************************************

;ISR De Transmision Completa

Tx_Completa:

;Escriba aqui su codigo

reti

;************************************************************************

;ISR De Recepcion Completa

Rx_Completa:

;Escriba aqui su codigo

in r18,UDR;Lee el último dato recibido.

;Se guarda en r18.

out UDR,r18 ;Regresar el dato (ECO).

reti

;************************************************************************

;ISR De UDR Vacio.

UDR_Vacio:

;Escriba aqui su codigo

reti

RESET: ;inicio de programa.

;************************************************************************

ldi r16,high(RAMEND)

out SPH,r16

ldi r16,low(RAMEND)

out SPL,r16

;************************************************************************

;PASO 1;PASO 1;PASO 1;PASO 1

cli ;SREG<I>=0.int. deshabilitadas.

;PASO;PASO;PASO;PASO 2222

cbi DDRD,0;Pin RXD como entrada

cbi DDRD,1;Pin TXD como entrada

;PASO 3;PASO 3;PASO 3;PASO 3

ldi r17,0x0c;Baud Rate=19200

out UBRR,r17;

;PASO 4;PASO 4;PASO 4;PASO 4

cbi UCR,CHR9;Longitud de Datos 8 bits

;PASO 5;PASO 5;PASO 5;PASO 5

sbi UCR,RXCIE;Interrupción de Recepción.

sbi UCR,TXCIE;Interrupción de Transmisión.

cbi UCR,UDRIE;Interrupción de UDR vacío.No Habilitada.

;PASO 6;PASO 6;PASO 6;PASO 6

sbi UCR,TXEN;Habilita Transmisión

sbi UCR,RXEN;Habilita Recepción.

71

;PASO 7;PASO 7;PASO 7;PASO 7

sei ;Habilita Interrupciones Globales

loop:

nop

nop

rjmp loop ;loop infinito

En aras de la claridad, el código presentado no está optimizado ni en tamaño ni en velocidad. El siguiente programa configura a la UART a 19200 Baudios. Longitud de 8 Bits,. fosc es 4MHZ Cada vez que llega un dato por la UART se hace eco. ;-Configuración

;-Manejo Por Escaneo.

;************************************************************************

.include "8515def.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

;************************************************************************

RESET: ;inicio de programa.

;************************************************************************

ldi r16,high(RAMEND)

out SPH,r16

ldi r16,low(RAMEND)

out SPL,r16

;************************************************************************

;PA;PA;PA;PASO 1SO 1SO 1SO 1

cli ;SREG<I>=0.int. deshabilitadas.

;PASO 2;PASO 2;PASO 2;PASO 2

cbi DDRD,0;Pin RXD como entrada

cbi DDRD,1;Pin TXD como entrada

;PASO 3;PASO 3;PASO 3;PASO 3

ldi r17,0x0c;Baud Rate=19200

out UBRR,r17;

;PASO 4;PASO 4;PASO 4;PASO 4

cbi UCR,CHR9;Longitud de Datos 8 bits

;PASO 5;PASO 5;PASO 5;PASO 5

cbi UCR,RXCIE;Interrupción de Recepción.NO HABILITADA.

cbi UCR,TXCIE;Interrupción de Transmisión. NO HABILITADA.

cbi UCR,UDRIE;Interrupción de UDR vacío.No Habilitada. NO HABILITADA.

72

;PASO 6;PASO 6;PASO 6;PASO 6

sbi UCR,TXEN;Habilita Transmisión

sbi UCR,RXEN;Habilita Recepción.

;PASO 7;PASO 7;PASO 7;PASO 7

sei ;Habilita Interrupciones Globales

loop:

nop

nop

sbis USR,RXC;¿Llego nuevo Dato?

rjmp loop;No, seguir esperando

in r18,UDR ;Si, guardarlo en r18

out UDR,r18 ;Hacer eco.

nop

nop

rjmp loop ;loop infinito

73

GLOSARIO ADC. “Convertidor Analógico Digital. Es un dispositivo que convierte una señal Analógica en usa señal digital” Analógica, señal. “Es una señal definida en un intervalo continuo de tiempo cuya amplitud puede adoptar un intervalo continuo de valores” Asíncrona, comunicación. “Una forma de comunicación en la cual la información se transmite como un flujo en serie de bits. Cada carácter se codifica como una cadena de bits y se separa por un bit de <<inicio de carácter>> y bit de <<parada>>. A veces se usa un bit de paridad para la detección y corrección de errores.” Asíncrono, sistema. Son aquellos que pueden cambiar de estado en cualquier momento en que una o más señales que entran al sistema cambie. AVR. Nombre que le da la empresa ATMEL a su familia de microcontroladores RISC de 8 bits. Oficialmente AVR no tiene ningún significado. Baud Rate. Ver Baudio. Baudio. “Los cambios de señal por segundo que se producen en un dispositivo se miden en baudios. Un baudio representa e número de veces que el estado de la línea de comunicación cambia por segundo. Si un dispositivo transfiere un bit por cada cambio de señal entonces la velocidad en baudios y la velocidad de transmisión será la misma. Las técnicas de codificación empleadas representan cada bit con dos o más cambios de señal” CPU. Unidad Central de Proceso. Digital, señal. “Es una señal en tiempo discreto con amplitud cuantificada. Dicha señal se puede representar mediante una secuencia de números” DIP. Dual In Package. Es un tipo encapsulado en el cual existen dos hileras de terminales. Discreto, señal en tiempo. “Es una señal definida sólo en valores discretos de tiempo”. EIA Electronics Industries Association. Full Duplex. Es un tipo de comunicación serial en la cual el flujo de los datos puede ser en ambos sentidos de manera simultánea. I.S.R. Rutina de Servicio de Interrupción. Es una parte de código que se ejecuta cuando se atiende a una interrupción. I�L. Es la desviación de los valores de la función de transferencia real a los valores de una línea recta. Para un ADC las desviaciones son medidas en las transiciones de un paso al siguiente. Interrupción. Es una petición que se hace al CPU para que atienda un evento que acaba de ocurrir. LSB. “Una medida de la resolución de un ADC, puesto que define el número de divisiones o unidades del rango analógico total.” 1LSB= FSR/(2n-1) Donde FSR Es la Resolución a Plena Escala y n es el número de Bits de salida del ADC. LSB. Bit Menos Significativo. MSB. Bit Más Significativo. Muestreador retenedor. Es un circuito que toma imágenes instantáneas de una señal eléctrica. Generalmente un circuito Muestreador Retenedor se coloca a la entrada de los ADC. Registro. Conjunto de Bits que son considerados como una sola entidad. Reloj. Señal eléctrica pulsante, generalmente cuadrada con la que se alimenta a un sistema digital para propósitos de sincronía.

74

RISC. Reduced Instruction Set code. RS-232. Es un estándar de comunicaciones seriales introducido por la EIA en 1962. Serial, comunicación. “Consiste en la transmisión de señales a través de un único cable o enlace. Los bits se transmiten secuencialmente, uno tras otro.” Serie, comunicación. Ver Serial. Sincronía, comunicación. A diferencia de las comunicaciones asíncronas, se cuenta con un mecanismo de reloj para separar grupos de bits en una transmisión. Tacómetro. Dispositivo para medición de velocidades angulares. Vector, interrupción. Es un número que indica el número de interrupción dentro de una tabla de prioridades dentro del microcontrolador, este número tiene asociada una localidad de memoria a la que la CPU del microcontrolador salta cuando se genera una interrupción.

75

BIBLIOGRAFÍA.

♦ “AT90S/LS2323 & AT90S/LS2343 DATA SHEET”. ATMEL. www.atmel.com ♦ “AT90S/LS2333 & AT90S/LS4433 DATA SHEET”. ATMEL. www.atmel.com ♦ “AT90S/LS4434 & AT90S/LS8535 DATA SHEET”. ATMEL. www.atmel.com ♦ “AT90S1200 DATA SHEET”. ATMEL. www.atmel.com ♦ “AT90S2313 DATA SHEET”. ATMEL. www.atmel.com ♦ “AT90S4415/8515 DATA SHEET”. ATMEL. www.atmel.com ♦ “Lan Times Enciclopedia de Redes” Mc Graw Hill. Tom Sheldon ♦ “Sistema de Monitoreo de Señales Con Salidas Analógicas para Aplicaciones

Críticas en Tiempo Real” Asdrúbal L. Chau. Tesis de Maestría. Noviembre 2000. ♦ “Sistemas de Control en Tiempo Discreto” Segunda Edición. Katsuhiko Ogata..

Pearson Educación. ♦ “Sistemas Digitales, Principios y Aplicaciones” Quinta Edición, Ronald Tocci.

Prentice Hall. ♦ “Understanding Data Converters, Application Report”. Texas Instruments. 1995.