Homepage von Ingo Klöckl
 Home
 Elektronik
 - Mikrocontroller
 - GAL/CPLD
 - Links
Ingo Klöckl
i.kloeckl@2k-software.de

Atmel AVR

Vor einigen Tagen habe ich spontan meine Liebe zur Digital-Elektronik wiederentdeckt durch zufälliges Lesen eines Artikels über Atmels AVR-uController. Ich habe mir einen bestellt (ATmeta8), und nachdem er sich innerhalb von einer halben Stunde seriell mit mir unterhalten und LEDs blinken lassen konnte, habe ich wieder Lust bekommen, Basteleien mit uC's durchzuführen: Lichtmuster-Generator, ein Küchenwecker, eine mikrosekundengenaue Stoppuhr etc.

Atmel-Projekte

Hier eine Liste von Projekten, die ich mit verschiedenen Atmel-Controllern durchgeführt habe (eine genauere Beschreibung sowie Schaltpläne oder Programme möchte ich nach und nach ins Netz stellen, auf Wunsch können sie schon mal via E-Mail angefragt werden):

Ein Evaluation-Board mit diverser Hardware


Features:
  • Zwei ATmega8, einer fest mit einem 16x2-LCD-Display verbunden, der andere mit einem 4-stelligen LED-Display (gemultiplext)
  • 4x4-Matrix-Keyboard
  • 8 LEDs, 2 Taster, 2 Schalter
  • 1 Berührungsschalter
  • 1 TSOP1736 für IR-Fernsteuerungen
  • 1 Summer
  • 1 2-Bit-DAC zur Dimmung der LED-Anzeige
  • 2 Power-MOSFETs zur Steuerung hoher Lasten (Lampen)

Basis-Schaltungen

Möglichst einheitliche Grundschaltungen mit verschiedenen üblichen Ein- und Ausgabevarianten und einigen LED-/Beeper-Ausgängen als Grundlage für viele ähnliche Geräte (siehe hier z.B. LCD-Metronom oder Vortrags-Timer mit IR-Fernsteuerung.
LCD/RC5 LED/RC5 LCD/Keyboard LED/Keyboard

Features:
  • Wahlweise LCD- oder LED-Anzeige (Siebensegmentanzeige)
  • Wahlweise tastenbasierte Eingabe oder RC5-IR-Fernbedienung
  • Möglichst einheitliche Beschaltung

Ein Eingabegerät für SPI-Protokoll


Features:
  • Anschluß einer PC-Tastatur (PS/2) zur Dateneingabe
  • Erzeugung von max. 4 entprellten Signalen (Pulsen)
  • Kommunikation mit einem SPI-Gerät mit max. 8 Bytes. Eingabe als Hex-String, Rückgabewerte des SPI-Gerätes ebenfalls hexadezimal.
  • Anzeige von bis zu 2 Gruppen a 4 Leitungen in hexadezimaler Notation.

Ein TTL-Sequencer/Logikanalysator

Das Testscript Das Ergebnis Vergleich Logikanalysator

Dieses Gerät erlaubt es, Logikschaltungen (z.B. GALs) mit einer vorgegebenen Sequenz von TTL-Eingangswerten zu füttern und deren Reaktion aufzuzeichnen. Es können so sowohl kombinatorische Schaltungen als auch zeitabhängige Logikschaltungen überprüft werden. Die Daten werden von einem Steuerprogramm (Java), das auf einem PC läuft, erzeugt.

Das Gerät stellt also um eine Kombination von Sequencer, der eine Reihe von Datenwerten vorgibt, und Analysator, der die Reaktion des Schaltkreises festhält, dar. Der Mikrocontroller arbeitet als seriell-parallel Konverter, der den RS232-Datenstrom vom PC parallel auf Port B ausgibt und die freien Bits von Port D als parallele Eingabe nutzt, um einen Rückgabewert zum PC zu generieren.

Auf dem PC läuft ein Java-Programm, das verschiedene Datenquellen, z.B direkte Angabe der Sequenz über Kommandozeile erlaubt. Die wesentliche Datenquelle ist hierbei ein Testscript, das in einer Datei sowohl die zu erzeugenden Ausgangsdaten enthält, als auch die erwarteten Rückgabewerte. Es kann so ein quasi-automatischer Test einer Schaltung durchgeführt werden.

Das Java-Programm nutzt einen Timer, um (einstellbar) alle 100 ms einen weiteren Schritt der Sequenz abzuarbeiten.

Als Beispiel sei ein Testscript für ein GAL gegeben. Die entsprechende Ausgabe ist hier gezeigt. Zur Verdeutlichen wurden alle Ein- und Ausgaben auch noch mit einem handelsüblichen Logikanalysator aufgezeichnet hier (grün/rot: sequenzierte Vorgabedaten, blau: gemessene Resultate).

Lichtmustergenerator mit AT90S2313

Beispiel: eine Ampelsteuerung für eine Straßenkreuzung mit Auto- und Fußgängerampel, Normalbetrieb sowie Blinkbetrieb. Mehr folgt bald.

Stopuhr

Mikrosekundengenaue Stopuhr mit ATMega8 für physikalische Experimente sowie ein Zusatzgerät zur Erfassung von einzelnen Impulsen von Taktsignalen
Schaltplan

Features:
  • Auflösung 1 Mikrosekunde
  • Maximaler Messbereich 16 Sekunden, minimaler Meßbereich 1 Mikrosekunde
  • Mehrere Meßarten: Impuls, einfache oder doppelte Flanke
  • Kumulative Messung von mehreren aufeinanderfolgenden Impulsen oder - mit dem Zusatzgerät - nur des ersten Impulses passender Polarität

TTL-Taktgenerator/Zähler mit ATmega16

Schaltplan

Features:
  • Auflösung von 0,1 Hz bis 1 MHz in dekadischer und 1/2/5-facher Abstufung
  • Der ebenfalls enthaltene Zähler kann bis zu 9.999 Impulse zählen und anzeigen.

Ein TTL-Frequenzzähler

für Frequenzen von 0.1 Hz bis ca. 4 MHz, Auflösung 1 Hz (0.1 Hz) mit ATMega8 ([Schaltplan]). Meßzeit 1 sec, kontinuierliche Messung. Der letzte gültige Meßwert wird natürlich konstant angezeigt, also keine durchrauschenden unleserlichen Ziffern.

Ein Küchentimer

4x4 Tastenfeld 4 Tasten [Schaltplan]

Features:
  • eine Weckzeit
  • drei unabhängige Timer 0-99:59 min
  • akustische Ablaufanzeige, die nicht in einem fort nervt, sondern nach jeweils 15 sec Klingeln eine Pause von 45 sec macht. Das ganze dreimal hintereinander, ab dann wird der abgelaufene Weckerzustand nur noch durch eine blinkende LED sichtbar gemacht (damit der Wecker, wenn man verreist ist, nicht zwei Wochen permanent klingelt ...)
  • dimmbare Anzeige über einen 3bit-DAC, die auf die Umgebungshelligkeit reagiert; auf dem Bild erkennt man ganz links den Phototransistor, der die Umgebungshelligkeit registriert
  • Quick Edit Mode: die üblichen Timerzeiten in Fünfminutenschritten von 5 min bis 45 min auf einen Tastendruck eingestellt und dem nächsten freien Timer zugeteilt
Der Küchentimer kann in zwei Varianten gebaut werden: einmal die bequeme Variante mit einem 4x4-Tastenfeld zur bequemen Handhabung (empfohlen), und eine sparsamere Variante mit nur vier Tasten, z.B. als Schlafzimmer-Wecker, wenn das Gerät nicht so oft umgestellt wird. Als Ausgabegerät kann ein Piezosummer mit eingebauter Elektronik verwendet werden, oder ein normaler 8Ohm-Lautsprecher; in diesem Falle wird die Tonfrequenz über einen der AVR-Timer erzeugt.

Weitere Timer, diesmal mit LCD-Anzeigen:

[Schaltplan]
2x8 Zeichen 2x16 Zeichen

Features:
  • LCD-Anzeige entweder 2x8 oder 2x16 Zeichen
  • ansonsten baugleich mit dem Küchentimer

Küchenwecker mit IR-Fernsteuerung

Noch mehr Timer, diesmal mit IR-Fernsteuerung und LED- oder LCD-Anzeigen:
[Schaltplan]
[Schaltplan]

Features:
  • LED-Anzeige oder LCD-Anzeige/2x8 oder 2x16 Zeichen
  • Steuerung aller Funktionen über eine normale IR-Fernbedienung (RC5-codiert)
  • ansonsten baugleich mit dem Küchentimer

Ein Schlafzimmerwecker

Features:
  • eine Weckzeit, ein Timer 0-99:59 min
  • akustische Ablaufanzeige (eh klar :-) ), auch hier wieder die bewährte Lösung, die nach dreimaligem Klingeln (15 sec) und Pause (45 sec) nur noch eine LED blinken läßt, um die Nerven der Mitbewohner zu schonen, wenn man schon aus dem Haus ist und das Ding nicht abgestellt hat
  • dimmbare Anzeige, die auf die Umgebungshelligkeit reagiert

Ein Metronom

[Schaltplan]

Features:
  • Bereich 5-250 bpm mit digitaler Geschwindigkeitsanzeige
  • Rhythmus-LEDs für 1 bis 4 Schläge/Takt
  • akustische Ausgabe (eh klar)

Ein Metronom mit LCD-Anzeige

[Schaltplan] [HEX-Datei]

Features:
  • LCD-Anzeige 1x8 sowie LED-Anzeige der Schläge
  • Bereich 5-250 bpm
  • Rhythmus-LEDs für 1 bis 6 Schläge/Takt, Unterscheidung von Haupt- und Nebenbetonungen in Form unterschiedlich gefärbter LEDs
  • akustische Ausgabe (eh klar), Unterscheidung der Haupt- und Nebenbetonungen durch unterschiedliche Frequenzen des Knack-Geräusches

Eine digitale Eieruhr/Timer

[Schaltplan] [HEX-Datei]

Features:
  • Bereich 1-60 min bis zum Alarmton
  • zügige Minuteneingabe über Drehpotentiometer als poor-man-Drehimpulsgeber (klappt prima!)
  • Digitale Anzeige der eingestellten/verbleibenden Zeit
  • akustische Ausgabe über Piezosummer oder Lautsprecher

Ein Fahrrad-Tachometer

[Schaltplan]

Die Schaltung nimmt mittels eines Reed-Kontaktes die Drehung des Rades auf und berechnet daraus die Drehungsfrequenz und die Wegstrecken, Geschwindigkeiten und Beschleunigung. Features:
  • Drei Anzeigemodi: aktuelle Werte, maximale/durchschnittliche Werte, interne Werte
  • Anzeige in m/s oder km/h
  • Anzeige von gefahrener Strecke, Geschwindigkeit und Beschleunigung (!)
  • Speichern der Tagesleistung auf Wunsch additiv zur bisherigen Gesamtleistung im EEPROM

Ein Vortrags-Timer

Dieses Gerät soll helfen, einen wissenschaftlichen Vortrag z.B. auf einer Tagung im Zeitrahmen zu halten. Typischerweise ist ein solcher Vortrag in drei Phasen einteilbar: eigentlicher Vortrag (z.B. eine halbe Stunde), Diskussion (z.B. eine Viertelstunde) und Rest- oder Sicherheitszeit (z.B. max. 15 min bis zum Beginn des nächsten Vortrags). Das Gerät erlaubt es nun, im Vorneherein die Dauer der drei Phasen (angezeigt als grün, gelb und rot) einzugeben. Sobald der eigene Vortrag beginnt, beginnt eine Phase nach der anderen sekundenweise herunterzuzählen, sodaß man immer einen guten Überblick hat, ob man gut in der geplanten Zeit liegt oder nicht. Sobald das Gerät bei Erreichen von 0 Sekunden Restzeit von Phase grün zu Phase gelb wechselt, sollte man zum Ende kommen, da sonst die Diskussionszeit entsprechend verkürzt werden müßte. Spätestens den Wechsel in Phase rot sollte man erstnehmen! Ist man andererseits vorzeitig mit dem Vortrag fertig, kann man in die Gelbphase weiterschalten, wobei die eingesparte Restzeit der Gelbphase (und entsprechend dann auch der Rotphase) zugeschlagen wird.
[Schaltplan]

Features:
  • Drei Zeitabschnitte (grün, gelb, rot) mit bis zu 99 Minuten Dauer
  • Ist man in einem Zeitabschnitt früher fertig, wird die Restzeit auf den nachfolgenden Zeitabschnitt übertragen
  • Pause-Funktion, falls der Vortrag unterbrochen werden soll

Ein Vortrags-Timer mit LCD und IR-Fernsteuerung

Dieses Gerät weist die gleiche Funktionalität wie der obige Vortragstimer auf, kann aber durch eine IR-Fernbedienung (RC5-Code) ferngesteuert werden und zeigt die Daten über LCD an. Auf diese Weise können mehr Daten ausgegeben werden, die Bedienung ist einfacher, aber natürlich sind die Zeit-Daten nicht so gut zu erkennen wie mit der selbstleuchtenden Siebensegment-Anzeige.
[Schaltplan]

Features:
  • Drei Zeitabschnitte (grün, gelb, rot) mit bis zu 99 Minuten Dauer
  • Ist man in einem Zeitabschnitt früher fertig, wird die Restzeit auf den nachfolgenden Zeitabschnitt übertragen
  • Pause-Funktion, falls der Vortrag unterbrochen werden soll
  • Akustische Alarmausgabe, falls Phase rot überschritten wird (mit Selbststop nach 3 Alarm-Abschnitten, damit das Gerät auch mal aufhört zu nerven, falls man den Raum längst verlassen hat (erinnern Sie sich an die vergessenen Wecker in Hotels, die, wenn es sein muß, drei Tage lang quietschen, läuten und dudeln))

Ein Digital-Thermometer mit ATtiny26 und Fühler LM35

[Schaltplan]

Features:
  • Bereich -25 bis +77 oC
  • Auflösung 0,1 oC, wobei der Temperaturfühler eine Genauigkeit von 0,5 oC garantiert, seine Ausgangsspannung aber eine höhere Auflösung aufweist.
  • Digitale Anzeige über 4-stelliges LED-Display
  • Die Umrechnung des ADC-Meßwertes in eine Temperatur erfolgt ohne Mathe-Bibliothek
Die negative Hilfsspannung für den LM35 wird durch einen ICL7660 bereitgestellt, die analoge Signalverarbeitung (Spreizung des Signals von -0.25/0.77V auf 0/5 V) erfolgt durch einen LM324.

Ein 4-Kanal-Digital-Thermometer

mit ATmega8, 4 Fühler LM35, LCD-Anzeige

Features:
  • Bereich -50 bis +150 oC
  • Auflösung 0,2 oC, wobei der Temperaturfühler eine Genauigkeit von 0,5 oC garantiert, seine Ausgangsspannung aber eine höhere Auflösung aufweist.
  • Digitale Anzeige über 2x8-stelliges LCD-Display
  • Triggerung aller 4 Kanäle manuell, 2x pro Sekunde, durch externen Impuls oder durch ein RS232-Kommando
  • Aufzeichnung der Meßwerte über RS232
Die negative Hilfsspannung für den LM35 wird durch einen ICL7660 bereitgestellt, die analoge Signalverarbeitung (Spreizung des Signals von -0.5/1.5V auf 0/5 V) erfolgt durch einen LM324. Die Eingänge werden durch einen 4051-Analogmultiplexer auf einen ADC-Kanal geleitet, ebenso wird der 0V-Punkt und eine negative Offsetspannung von etwa -0.5 V zur Signalanhebung über den Multiplexer gemessen, sodaß jede Kalibrierung automatisch nach der Initialisierung des Geräts erfolgen kann.

Ein Testgerät für RC5-codierte IR-Fernbedienungen


Features:
  • Zeigt Geräteadresse und Kommando eines erkannten Fernbedienungspakets an

Ein mit IR-Fernbedienungen gesteuerter CountDown

[Schaltplan]

Features:
  • Bereich 1 min bis 99 Stunden bis zum Alarm (optisch)
  • zügige Zeiteingabe über Ziffernblock der Fernbedienung
  • Digitale Anzeige der verbleibenden Zeit
  • optische Ausgabe über blinkende LED
  • Anhalten des Countdown mit einer Pause-Funktion

Zeitschaltautomat

für Beleuchtung, mit Fernbedienung gesteuert, mit einstellbarer Länge der Leuchtdauer und eigenständiger oder manueller Abschaltung

Leucht-Deko-Objekt

[Schaltplan]

Es läßt vier weiße Leuchtdioden in vier Helligkeitsstufen anhand mehrerer einprogrammierter Sequenzen leuchten. Die Sequenzen und die Ablaufgeschwindigkeit läßt sich durch eine IR-Fernbedienung steuern. Die Sequenzen können entweder relativ konstantes Licht erzeugen, das Licht langsam dimmen, oder durch rasches Abdunkeln einen recht natürlichen Flackereffekt, einer Kerze ähnlich, erzeugen. Dieser ist besonders gut bei Verwendung von warmweißen LEDs zu sehen.

Eine weitere Variante verwendet Software-PWM, um 8 LEDs nach einem Drehbuch zu dimmen. In Arbeit ist ein Java-GUI, das es erlaubt, per Maus graphisch eine gute Lichtregie zu entwickeln und in das Steuerprogramm zu übersetzen.

Bewässerungsautomat

Schaltplan

Dieser Automat soll beim Bewässern von Pflanzen bei Abwesenheit helfen. Er kann bis zu vier Pumpen steuern und greift dazu auf eine 24-Stunden-Uhr sowie 4 Sensoren zurück, die die aktuelle Feuchtigkeit melden. Ein weiterer Sensor prüft, ob die Pumpen trockenlaufen oder nicht.
Als Tastatur wird ein Billig-Matrixtastenfeld von Pollin benutzt, das mit Hilfe einer Widerstandsnetzwerks ein Analogsignal liefert, sodass eine einzelne Leitung des AVR benutzt wird anstelle vieler digitaler Signale. Jeder Sensor stellt im Prinzip einen Berührungssensor dar, der mit Hilfe einer Darlingtonschaltung auf sehr kleine Ströme mit einem digitalen Signal reagiert. Die Aktoren (Pumpenmotoren) werden über MOS-FETs gesteuert, die größere Ströme schalten können. Eine Reihe von Leuchtdioden zeigt den Füllstand des Reservoirs, der Sensoren und der Pumpenaktivität an. Über eine Reihe von Menüs kann die Uhr gestellt und einige Parameter des Bewsserungsprogramms konfiguriert werden.
Die Feuchtigkeitssensoren sind derzeit einfache digitale Melder, die im Versuchsaufbau einfach in eine Tonschale eintauchen, die mit Wasser gefüllt ist. Über ein Loch im eigentlichen Topf erhält die Pflanze das Wasser aus der Schale.
Da die Hardware nun aufgebaut ist, kann ich verschiedene Algorithmen überprüfen, z.B. Wassergabe nach einem Zeitschema, wobei die Sensordaten verwendet werden, um ein Zuviel an Wasser zu vermeiden.

Allgemeine AVR-Hardware-Hinweise

  • Keramischer 100 nF-Abblock-Kondensator zwischen jedes GND-Vcc-Pinpaar.
  • Reset: 10K Pullup-Widerstand nach Vcc, wenn Reset auch mit einem ISP-Kabel verbunden ist, sonst einfach an Vcc anschließen.
  • MAX232 benötigt 4 Elkos > 10 uF sowie den 100 nF-Abblockkondensator, MAX3232 benötigt 4 Kondensatoren > 100 nF.
  • Beim Einsatz eines Quarzes diesen mit 2x 22-27 pF gegen GND schalten.
  • SCL- und SDA-Leitungen mit 4K7 Pullup-Widerstand versehen
  • Sollen Ausgänge auch im Einschaltmoment (bevor der uC die Ports initialisiert) auf einem definierten Pegel liegen, müssen 10K-Pullup- oder Pulldown-Widerstände verwendet werden.
  • LEDs am besten anodenseitig an +5V, kathodenseitig an einen AVR-Pin legen, da der AVR 5 mA source-Strom, aber 20 mA sink-Strom verkraftet.

Allgemeine AVR-Software-Hinweise

  • Sichern und wiederherstellen der Interruptmaske in einem Interrupt-Handler:
    IRQ_Handler:
    	in temp, SREG
    	cli
    	...
    	out SREG, temp
    	reti
    
  • Das Statusregister SREG und die Bedeutung seiner Bits:

    SREG.7 I Interrupt enable flag
        .6 T Transfer bit
        .5 H Half-carry flag
        .4 S Sign flag
        .3 V Overflow flag (für vorzeichenbehaftete Zahlen)
        .2 N Negative flag (für vorzeichenbehaftete Zahlen)
        .1 Z Zero flag (für alle Zahlen)
        .0 C Carry flag (für alle Zahlen)
    

    Die Flags werden nach folgenden Kriterien verändert (Details, welche Befehle welche Flags betreffen, sind in der Liste der Assemblerbefehle angegeben):

    • Das Z-Flag wird nach jeder Rechenoperation gesetzt, die eine Null als Ergebnis hat
      	add, sub, ...
      	tst R0		; set flags according to R0
      	cp R0, R1	; set flags according to comparison result
      	cpc R0, R1	; set flags according to comparison result with carry
      
      	; more commands:
      	clz		; clear Z flag
      	sez		; set Z flag
      	breq target	; branch on Z flag set
      	brne target	; branch on Z flag cleared
      
    • Das C-Flag wird gesetzt, wenn das Resultat bei einer Rechenoperation zwischen der höchsten und niedrigsten vorzeichenlosen Zahl (255 und 0) wechselt.
      	add, sub, ...
      	cp R0, R1	; set flags according to comparison result
      	cpc R0, R1	; set flags according to comparison result with carry
      
      	; more commands:
      	clc		; clear C flag
      	sec		; set C flag
      	brcs target	; branch on C flag set
      	brcc target	; branch on C flag cleared
      
    • Das N-Flag wird gesetzt, wenn das Register eine Zahl enthält, die - interpretiert als vorzeichenbehaftet - negativ wäre, d.h. wenn das Bit 7 gesetzt ist.
      	add, sub, ...
      	neg R0		; R0 = -R0
      
      	; more commands:
      	cln		; clear N flag
      	sen		; set N flag
      	brmi target	; branch on N flag set
      	brpl target	; branch on N flag cleared
      
    • Das V-Flag wird gesetzt, wenn das Resultat bei einer Rechenoperation zwischen der höchsten und niedrigsten vorzeichenbehafteten Zahl (127 und -128) wechselt.
      	add, sub, ...
      
      	; more commands:
      	clv		; clear N flag
      	sev		; set N flag
      	br?? target	; branch on V flag set
      	br?? target	; branch on V flag cleared
      
    • Das T-Flag wird benutzt, um Bits aus einem Register in ein anderes zu übertragen:
      	bst R0, 4	; transfer bit 4 of R0 in T flag
      	bld R1, 1	; set bit 1 of R1 according to T flag
      
      	; more commands:
      	clt		; clear T flag
      	set		; set T flag
      	brts target	; branch on T flag set
      	brtc target	; branch on T flag cleared
      

    Das Zusammenspiel der N-, V-, Z- und C-Flags kann man sehen, wenn man ein Register wiederholt inkrementiert:

    Registerinhalt	vorzeichenlos	mit Vorzeichen	C Z N V
    01111110	126		+126		? ? ? ?	
    01111111	127		+127		0 0 0 0
    10000000	128		-128		0 0 1 1
    10000001	129		-127		0 0 1 0
    ...
    11111110	254		-2		0 0 1 0
    11111111	255		-1		0 0 1 0
    00000000	0		0		1 1 0 0
    00000001	1		+1		0 0 0 0
    
    Viele Bits des Statusregister werden benutzt, um Zahlen miteinander zu vergleichen. Je nach gewünschter Bedingung werden andere Flags herangezogen. Da ein Vergleich von R0 mit R1 durch eine Subtraktion R0-R1 durchgeführt wird, sind die N-, V-, Z- und C-Flags von Nutzen dabei:
    Vergleich	Resultat	C Z N V	passender Befehl
    R0=R1		0		? 1 ? ?	breq
    R0!=R1		<>0		? 0 ? ?	brne
    TODO
    
    

  • 
    

Die Timer

Da der Timer 1 ein 16bit-Timer ist, muß hier beim Lesen und Schreiben von Zählerständen und anderen 16bit-Timerdaten die Reihenfolge berücksichtigt werden, in der das High- und Lowbyte übertragen werden. Das Laden des Startwertes erfolgt so:
	ldi temp, HIGH(value)
	out TCNT1H, temp
	ldi temp, LOW(value)
	out TCNT1L, temp
Lesen des aktuellen Zählerstandes (auch nutzbar für das Input Capture-Register ICR1):
	in tempLow, TCNT1L
	in tempHigh, TCNT1H
Bei 8bit-Timern muß natürlich nur ein Register gelesen oder geschrieben werden.

Modus: Interrupt bei Timer Overflow (für one-shot und Timererweiterung durch Software)
	ldi temp, HIGH(value)	; load start value
	out TCNT1H, temp
	ldi temp, LOW(value)
	out TCNT1L, temp

	ldi temp, 0		; no PWM, no output compare
	out TCCR1A, temp
	ldi temp, 0b00000sss	; s = prescaler, no input capture
	out TCCR1B, temp
	ldi temp, 1<<TOIE1	; T1 overflow interrupt
	out TIMSK, temp

	sei
Für periodische Operationen muß der Startwert im Interrupt-Handler neu in den Zähler geschrieben werden, da der Zähler sonst nicht die gewünschte Anzahl an Zyklen zählt, sondern fortan bei Null beginnt und immer 65536 Zyklen bis zum nächsten Interrupt zählt. Dieser Modus ist also eher als "one-shot"-Modus zu verwenden, hierfür müßte der Timer aber im Interrupthandler gestoppt werden.

Modus: Interrupt bei Timer Output Compare mit Zurücksetzen auf Null bei Gleichheit (für periodische Interrupts)
	ldi temp, 0		; clear counter
	out TCNT1H, temp	
	out TCNT1L, temp

	ldi temp, HIGH(compareValue); load compare value in OCR1A
	out OCR1AH, temp
	ldi temp, LOW(compareValue)
	out OCR1AL, temp

	ldi temp, 0		; no PWM, no pin action for Output compare match
	out TCCR1A, temp
	ldi temp, 0b00001sss	; s = prescaler, no input capture, reset-counter
                                ; on output compare match
	out TCCR1B, temp
	ldi temp, 1<<OCIE1A	; T1 output compare match interrupt
	out TIMSK, temp

	sei
Da der Zähler durch die Einstellung von TCCR1B bei jedem Interrupt auf Null gesetzt wird, muß in diesem Modus für periodische Interrupts kein Wert im Interrupt neu geschrieben werden.