Paso 23: Apéndice E: temporizadores y EEPROM de AVRs
EEPROMhttp://en.wikipedia.org/wiki/EEPROM
Memoria sólo para leer programable borrable eléctricamente. Es un tipo de memoria no volátil, lo que significa que almacena información incluso si se pierde la energía. La mayoría de microcontroladores tiene algunos internamente para su uso.
Para Microcontroladores AVR, sólo tiene que utilizar avr / funciones de eeprom.h escribir a o leer de la EEPROM. Las funciones son muy muy simples.
http://www.nongnu.org/avr-libc/User-manual/group__avr__eeprom.html
Cosas como
valor = eeprom_read_byte (poner la dirección aquí);
y
eeprom_write_byte (valor, dirección);
Esto es muy simple de un sujeto, y así este apéndice también contiene...
Temporizadores en AVRs
Temporizadores de seguimiento de tiempo automáticamente en segundo plano. Esto es útil para leer cuánto es un pulso (por ejemplo, cómo hemos utilizado captura de entrada de contador de tiempo para el receptor de infrarrojos), o salida de pulsos repetidamente (como PWM, no relacionados con nuestro proyecto pero comúnmente se utiliza para varias cosas), o repetir algo, o simplemente de tiempo. Hay muchos usos más...
En el AVR, basta con establecer el prescaler del temporizador que indica el contador de tiempo rapidez para ejecutar y entonces iniciar el módulo de temporizador. Opcionalmente puede activar varias interrupciones, o el módulo PWM o el módulo de captura de entrada. Cómo se hace esto es todo en hoja de datos de la AVR, incluso tienen algún código de ejemplo en la Asamblea y C.
Por ejemplo, si el prescaler se establece en el reloj del sistema dividido por 2, y el reloj del sistema es 8 MHz (en nuestro caso, lo es), entonces el temporizador está funcionando a 4 MHz, lo que significa cada 1/4000000 segundos, el contador del temporizador aumentará en 1. Escribí una utilidad aseada que utilizo para calcular valores relacionados con el contador de tiempo: http://www.frank-zhao.com/index.php?page=avrtimercalc
Pop quiz, ¿cuál es la unidad que se utiliza para capturar los valores de ancho de pulso de almacén el IR que estamos utilizando?
Teensy ++ tiene un cristal de 16 MHz, pero nos estamos quedando en 3, 3V en lugar de 5V, por lo que estamos utilizando "clock_prescale_set(clock_div_2);" por lo que realmente se ejecuta a 8 MHz. El código fuente muestra el temporizador 1 se configura para usar un prescaler "dividir por 8", para que el temporizador está funcionando a 1 MHz. Así, 1/1000000 segundos es 1 nanosegundo, y que de lo que los valores son capturados y almacenados en.
Hay varios temporizadores de 8 bits y 16 bits temporizadores en el AT90USB1286. temporizadores de 8 bits pueden almacenar valores de contador de 0 a 255, temporizadores de 16 bits son 0 a 65535. Esto es porque el número de posibles números discretos que puede representar un cierto número de bits es dado por 2 ^ n donde n es el número de bits, 2 ^ 8 = 256, 2 ^ 16 = 65536.
Si habilita una rutina de interrupción desbordamiento de un contador de tiempo, podemos guardar un contador de desbordamiento, que básicamente se extiende el número de bits por lo que podemos hacer un seguimiento de tiempo que no puede almacenarse dentro de 8 bits.