Stap 23: Aanhangsel E: Timers en EEPROM, op AVR 's
EEPROMhttp://en.wikipedia.org/wiki/EEPROM
Elektrisch wisbaar programmeerbaar lezen alleen geheugen. Het is een soort niet-vluchtig geheugen, wat betekent dat het slaat info zelfs als macht verloren. Meeste microcontroller heeft een aantal intern voor u te gebruiken.
Voor AVR-microcontrollers, gewoon gebruik maken van avr / eeprom.h van functies om te schrijven naar of lezen van de EEPROM. De functies zijn heel erg eenvoudig.
http://www.nongnu.org/avr-libc/User-Manual/group__avr__eeprom.html
U kunt gewoon doen stuff zoals
waarde = eeprom_read_byte (gezet adres hier);
en
eeprom_write_byte (adres, waarde);
Dit is ook eenvoudig van een onderwerp, en dus ook deze bijlage bevat...
Timers op AVR 's
Timers bijhouden van de tijd automatisch op de achtergrond. Dit is handig voor het lezen van hoe lang een puls is (zoals hoe wij timer invoer vastleggen voor de IR ontvanger gebruikten) of outputten pulsen herhaaldelijk (zoals PWM, niet gerelateerd aan ons project, maar meestal gebruikt voor verschillende ottomane), of iets herhalen of gewoon bijhouden van de tijd. Er zijn veel veel meer toepassingen...
Gewoon stel de timer prescaler die de timer hoe snel vertelt te lopen op de AVR, en start de timer-module. U kunt desgewenst verschillende interrupts, of de PWM-module of de input capture module. Hoe dit is gebeurd is dat alle in de de AVR gegevensblad, ze hebben zelfs enkele voorbeeldcode in zowel vergadering en C.
Bijvoorbeeld, als de prescaler is ingesteld op de systeemklok gedeeld door 2, en de systeemklok is 8 MHz (in ons geval, het is), dan de timer is actief in 4 MHz, wat betekent dat elke 1/4000000 seconden, de timer-teller wordt verhoogd met 1. Ik schreef een nette nut die ik gebruik voor het berekenen van timer gerelateerde waarden: http://www.frank-zhao.com/index.php?page=avrtimercalc
Pop quiz, wat is de eenheid die wordt gebruikt om vast te leggen en de winkel de IR puls breedte waarden die wij gebruiken?
De Teensy ++ heeft een 16 MHz kristal, maar wij lopen het op 3,3 v in plaats van 5V, dus we zijn met behulp van "clock_prescale_set(clock_div_2);" zodat het eigenlijk op 8 MHz draait. De source code toont de timer 1 wordt geconfigureerd voor het gebruik van een prescaler "delen door 8", zodat de timer is actief op 1 MHz. 1/1000000 seconden is dus 1 nanoseconde, en dat is wat de waarden worden vastgelegd en opgeslagen in.
Er zijn verschillende 8 bits timers en 16-bits timers in de AT90USB1286. 8 bits timers kunt tijd teller waarden van 0 tot 255, 16-bits timers 0 en 65535 zijn. Dit komt omdat het aantal mogelijke discrete getallen die een bepaald aantal bits kan vertegenwoordigen, wordt gegeven door 2 ^ n waarbij n staat voor het aantal bits, 2 ^ 8 = 256, 2 ^ 16 = 65536.
Als we een overflow interrupt routine op een timer inschakelt, kunnen we een overloop-teller, die in feite het aantal bits, breidt zodat we kunnen bijhouden van de tijd die kan niet worden opgeslagen in 8 bits kunnen opslaan.