Pfad: Home => AVR-DE => Anwendungen => Infrarot => Sender mit variabler Frequenz   This page in english: Flag EN Logo
Variabler IR-Sender AVR-Anwendungen

Frequenzvariabler IR-Sender

Frequenzvariable IR-Sender

Für den, der es braucht: ein frequenzvariabler IR-Sender, dessen Frequenz mit einem Potentiometer zwischen 30 und 60 kHz variiert werden kann. Wozu man das braucht? Hier werden zwei Varianten vorgestellt: eine mit einem 8-Bit-Zähler in einem ATtiny25 und eine mit einem 16-Bit-Zähler in einem ATtiny24.

Hinweise dazu, wie die Software funktioniert, sind in einem dritten Kapitel hier beschrieben.

Die Schaltbilder des Projektes gibt es in der LibreOffice-Draw-Datei hier, die Rechentabellen gibt es in der Calc-Datei hier.

Top 8-Bit-TC 16-Bit-TC Software

1 Die Schaltung mit einem ATtiny25

1.1 Schaltbild der Schaltung mit einem ATtiny25

Schaltbild des IR-Senders mit ATtiny25 Der IR-Sender mit dem ATtiny25 Das ist die Schaltung des IR-Senders mit einem ATtiny25.

Die Schaltung misst am ADC1-Eingang die Stellung des Potenziometers. Je nach dem Ergebnis stellt die Schaltung am OC1A-Ausgang ein Rechtecksignal mit 30 bis 60 kHz ein.

Am OC1A-Ausgang ist eine transistorierte Konstantstromquelle angeschlossen, die die IR-LED im eingeschalteten Zustand mit ca. 100 mA Strom versorgt. Die rote LED ist angeschaltet, wenn der Sender sendet und die IR-Diode korrekt funktioniert. An den OC1A-Ausgang kann auch ein Frequenzmessgerät angeschlossen werden.

Am PCINT0-Eingang kann der Sender ein- und ausgeschaltet werden.

Der ATtiny25 wird mit einem Quarz von 15 MHz getaktet, so dass die erzeugte Frequenz quarzgenau eingehalten wird. Es gehen auch andere Quarze unter 15 MHz, aber die bieten dann eine geringere Frequenzauflösung.

Mit auf der Platine ist eine ISP6-Schnittstelle, mit der der ATtiny25 in der fertigen Schaltung programmiert werden kann. Die beiden Widerstände von 1k entkoppeln die Schaltung während des Programmierens.

Top 8-Bit-TC 16-Bit-TC Software

1.2 Die Software der ATtiny25-Schaltung

Die Software ist als Assembler-Quellcode hier zum Download. Nach dem Assemblieren und dem Brennen des Hexcodes noch die Fuses des ATtiny25 auf den externen Quarz einstellen, sonst geht der IR-Sender 15 mal zu langsam.

Original-Fuses des ATtiny25 Fuses fuer den 15MHz-Quarz am ATtiny25 Links die Original-Fuses, rechts die für den Quarzoszillator mit 15 MHz.


Top 8-Bit-TC 16-Bit-TC Software

2 Die Schaltung mit einem ATtiny24

2.1 Schaltbild der Schaltung mit einem ATtiny24

Schaltbild des IR-Senders mit ATtiny24 IR-Sender mit ATtiny24 Das ist die Schaltung des IR-Senders mit einem ATtiny24. Der tn24 hat einen 16-Bit-Timer. Es kann auch ein ATtiny2313 verwendet werden, der ebenfalls einen 16-Bit-Timer und einen INT0 hat. Allerdings muss die Software dann an die anderen Portpins des tn2313 angepasst werden.

Die Schaltung misst am ADC0-Eingang die Stellung des Potenziometers. Je nach dem Ergebnis stellt die Schaltung am OC1A-Ausgang ein Rechtecksignal mit 30 bis 60 kHz ein.

Am OC1A-Ausgang ist eine transistorierte Konstantstromquelle angeschlossen, die die IR-LED im eingeschalteten Zustand mit ca. 100 mA Strom versorgt. An den OC1A-Ausgang kann ein Frequenzmessgerät angeschlossen werden.

Am INT0-Eingang kann der Sender ein- und ausgeschaltet werden.

Der ATtiny24 wird mit einem Quarz von 20 MHz getaktet, so dass die erzeugte Frequenz quarzgenau eingehalten wird.

Mit auf der Platine ist eine ISP6-Schnittstelle, mit der der ATtiny24 in der fertigen Schaltung programmiert werden kann.

2.2 Die Software der ATtiny24-Schaltung

Die Software ist als Assembler-Quellcode hier zum Download. Nach dem Assemblieren und dem Brennen des Hexcodes noch die Fuses des ATtiny24 auf den externen Quarz einstellen, sonst geht der IR-Sender 20 mal zu langsam. Hier die Fuse-Einstellungen des ATtiny24A:

Original-Fuses des ATtiny24A Fuses fuer den 20MHz-Quarz am ATtiny24A Links die Original-Fuses, rechts die für den Quarzoszillator mit 20 MHz.


Top 8-Bit-TC 16-Bit-TC Software

3 Hinweise zur Software

3.1 Die Timer

Die beiden Timer zum Erzeugen der IR-Frequenzen In der ATtiny25-Variante werkelt der 8-Bit-Timer TC1, in dem ATtiny24 der 16-Bit-Timer TC1, um die Rechtecksignale zu erzeugen. Beide Timer arbeiten im CTC-Modus, mit dem Compare-Wert A als Vergleichswert für das Rücksetzen.

Bei allen Berechnungen zu beachten ist, dass für einen ganzen Wellenzug mit 30 oder 60 kHz immer zwei CTC-Durchläufe nötig sind.

Der Grund, warum der ATtiny25 mit 15 MHz arbeitet, wird erkennbar, wenn man in der abgebildeten Tabellenkalkulation in Zelle B3 einen höheren Wert einträgt: dann wird der Prescaler des ATtiny25 auf zwei springen (was der ATtiny25-Timer TC1 kann), um zu vermeiden, dass der 8-Bit-Timer überläuft.

Das Potenziometer stellt die Frequenz des ATtiny25 ein Bei 15 MHz beträgt der CTC-Teiler bei 30 kHz IR-Frequenz 250 bei 60 kHz 125. Bei 20 MHz Takt sind es mit dem 16-Bit-TC1 333 und 167. Die Compare-A-Werte sind dabei jeweils um eins niedriger.

Die Spanne, über die das Potenziometer die Frequenz einstellt, sind bei 15 MHz (125) etwas niedriger als bei 20 MHz (166), das heißt, die Frequenzauflösung ist bei 20 MHz etwas höher.

Das Potenziometer stellt die Frequenz des ATtiny24 ein Wie die beiden Poti-vs-Frequenz-Diagramme zeigen, soll die Frequenz linear mit der Poti-Stellung ansteigen. Das wird durch eine Tabelle erreicht, die für jede Poti-Stellung einen eigenen Compare-Wert liefert.

Die Tabellenkalkulation bietet in den Zellbereichen G15 bis G145 (8-Bit) bzw. in J15 bis J145 (16-Bit) eine kopierbare Tabelle, die für alle 256 möglichen ADC-Werte je ein Byte (8-Bit) bzw. ein Wort (16-Bit) mit den Compare-Werten liefert. Im unteren Bereich dieser beiden Tabellen kommen mehrere gleiche Compare-Werte vor (8-Bit: vier, 16-Bit: drei).

Die Timer arbeiten frei-laufend, d.h. sie benötigen keine Interrupts. Variiert werden nur die Compare-Werte (mittels der ADC-Messungen) und ob der OC1A-Ausgang auf torkeln oder auf clear steht (was mit dem PCINT0- bzw. INT0-Interrupt eingestellt wird).

Top 8-Bit-TC 16-Bit-TC Software

3.2 Die ADC-Messungen

Da die Poti-Einstellung recht grob ist (0 .. 270°), wird der ADC im Links-justierten Ergebnis-Modus betrieben: nur die obersten acht Bits des Wandler-Ergebnisses werden verwendet.

Jeweils 256 Messungen der Potistellung werden aufsummiert. Das MSB der Summe wird entweder direkt (8-Bit-Tabelle) oder deren zweifacher Wert (16-Bit-Tabelle) werden zur Tabellenanfangsadresse addiert und der Compare-Wert daraus mit LPM gelesen und in den Timer geschrieben. Beim 8-Bit-Zähler im ATtiny25 ist das Vergleichsregister OCR1C. Da beim 16-Bit-Timer zuerst das MSB des Compare-Wertes in den Timer geschrieben werden muss (OCR1AH:OCR1AL), muss das zuerst gelesene LSB zwischengelagert werden.

Das ADC-Timing ist in der Tabelle "adc-timing" für beide Taktfrequenzen gezeigt. Da der ADC im Freilauf betrieben wird, beginnt die nächste Wandlung sofort nach dem Lesen des MSB aus dem ADC. Da dies per ADCC-Interrupt erfolgt, braucht man pro Wandlung zu den 13 Takten der Wandlung noch sieben Takte für den Interrupt und den Vektorsprung und einen Takt für das Lesen des MSB, zusammen also 21 Takte pro Messung. Bei einem Taktvorteiler von 128 und bei 256 Messungen fällt jeweils nach 46 bzw. 34 Millisekunden eine komplette Messung an.

Da der TC1-Takt bei 30 kHz IR-Frequenz 20 µs pro Durchlauf braucht, wird der neue Wert für Compare-A nach 2753 CTC-Durchläufen in den Timer geschrieben. Da dies recht selten erfolgt, sind Fälle, bei denen der neue Compare-Wert niedriger liegt als der vorherige und der Zähler schon den neuen (niedrigeren) Compare-Wert überschritten hat, ebenfalls recht selten. Da dann der Compare-Match verpasst würde und der Zähler dann bis zu seinem TOP-Wert läuft (8-Bit: 255, 16-Bit: 65.535), kann wegen der Seltenheit des Ereignisses auf eine entsprechende Synchronisation verzichtet werden.

Zur Seltenheit solcher Ereignisse trägt auch bei, dass der nächste ADC-Messwert schon nach 46 ms eintritt und die Differenzen der Compare-Werte nur sehr klein sein können. Das reduziert nochmals die Wahrscheinlichkeit, dass in den wenigen Fällen des Schreibens der alte Compare-Wert überschritten wird. Da das grundsätzlich nur eintreten kann, wenn das Poti in Richtung abwärts gedreht wird, ist die Wahrscheinlichkeit auf diesen Fall eingeschränkt.

Wen so was stört, kann per Interrupt dafür sorgen, dass der neue Vergleichswert erst dann geschrieben wird, wenn der bisherige gerade erreicht ist (beim tn25 ein Compare-Match-A mit Compare-A von Null oder beim bisherigen Wert, beim tn24 einfach der Compare-Match-A-Interrupt).

3.3 Der externe Interrupt

Wenn der Schalter geöffnet oder geschlossen wird, dann tritt beim ATtiny25 der PCINT0-Interrupt, beim ATtiny24 der INT0-Interrupt auf.

Bei beiden wird der Schaltereingang abgefragt und entweder das COM1A1-Bit auf Clear (Schaltereingang = High) oder COM1A0 auf Torkeln (Schaltereingang = Low) eingestellt.

Top 8-Bit-TC 16-Bit-TC Software


Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte an mich.

©2023 by http://www.avr-asm-tutorial.net