Pfad: Home =>
AVR-Übersicht =>
Anwendungen => PCM-Encoder ATtiny26
Funkfernsteuerungs-Signalerzeugung mit ATtiny26
Eigenschaften
Hier ist ein 4-Kanal-Signalerzeuger für Funkfernsteuerungen beschrieben,
der folgende Eigenschaften aufweist:
- gesamte Steuerung mit einem 20-poligen ATtiny26,
- für jeden Kanal wird ein Hauptregler und Trimmregler gemessen,
- der Hauptregler variiert das Kanalsignal zwischen 800 und 1.800 µs, der
Trimmregler addiert 0 bis 400 µs Dauer hinzu,
- Messung der acht Potentiometerstellungen mit 10-Bit-ADCs,
- Impulsdauer der Startsignale 400µs,
- Impulsdauer eines gesamten Durchlaufs exakt 20.000µs.
Die Dauer der Fernsteuersignale ergibt sich aus dem folgenden Diagramm:

Die Schaltung ist im Schaltbild dargestellt.
Die Schleifer der acht Potenziometer sind mit den acht AD-Wandlerkanälen
ADC0 bis ADC7 des ATtiny26 verbunden.
Die erzeugten Signale werden am Pin PB3 ausgegeben. Durch Änderungen in
der Software kann der Ausgabepin und die Polarität geändert werden.
Die Pins SCK, MISO, MOSI und RESET können an einen 6- oder 10-poligen
ISP-Verbinder gelegt werden, um den ATtiny26 in der fertigen Schaltung zu
programmieren.
Die Schaltung wurde auf einem Steckbrett aufgebaut. Die acht Trimmer dienen
als Eingabespannungsgeber für die vier Kanäle.
Zu sehen ist auch der ISP6-Programmieranschluss zum Programmieren in der Schaltung
selbst, zu Erkennen am sechsadrigen Parallelkabel.
Zur Stromversorgung über Batterie ist noch ein 5V-Spannungsregler mit einem
78L05 dazugebaut.
Die Software für den Prozessor ist natürlich in Assembler geschrieben.
Sie funktioniert folgendermaßen:
- Da der ATtiny26 nicht über einen 16-Bit-Timer verfügt, wird das
Timing ohne Timer und Interrupts, sondern über exakte Zählschleifen
vorgenommen.
- Das Programm ist für eine Taktfrequenz von 4 MHz geschrieben. Es
läuft nur bei dieser Frequenz korrekt (Umstellung des Taktes siehe unten).
- Die Programmausführung ist in zwei Phasen gegliedert: die Signalausgabe
und die Synchron- und Rechenphase.
- In der Phase der Signalausgabe wird für jeden Kanal zunächst ein
genau 400 µs langer Startimpuls erzeugt, danach folgt der variabel lange
Verzögerungszeitraum (400 bis 1.800 µs).
- Während des Startimpulses und während des Verzögerungszeitraums
werden jeweils die beiden zum Kanal gehörigen Analogeingänge in
10-Bit-Ergebnisse umgewandelt und im SRAM gespeichert. Nach der Ausgabe der
vier Kanäle stehen alle acht AD-Ergebnisse zur Verfügung.
- Die Synchronphase beginnt wieder mit einem 400 µs langen Startsignal.
- Danach werden in der langen Pause die AD-Messwerte in die vier
Verzögerungszeiträme umgerechnet. Dazu wird
- der erste AD-Messwert mit ADC * 1.000 * 65.536 / 1023 = ADC * 64.062
multipliziert,
- durch 65.536 geteilt (Abschneiden der beiden unteren Ergebnisbytes) und
gerundet,
- der zweite Messwert mit ADC * 400 * 65.536 / 1023 = ADC * 25.625
multipliziert, durch 65.536 geteilt, gerundet (0..400 µs) und zum
Ergebnis dazu addiert,
- zu dem Ergebnis (Verzögerungszeit 0..1.000 µs) werden 400
addiert (800 µs minus 400 µs Startdauer),
- das Ergebnis für diesen Kanal wird im SRAM abgelegt.
- Die Dauer des nächsten Synchronimpulses wird durch Subtraktion der
Dauer aller vier einzelnen Kanäle, der Dauer der fünf Startimpulse
und der Dauer der Berechnungsroutine von 20.000 µs berechnet und
ebenfalls im SRAM abgelegt.
- Der Zyklus beginnt dann von vorn.
Die Software ist hier im HTML-Format und
hier im ASM-Format verfügbar.
Beim Programmieren ist die Fuse des Prozessors so zu setzen, dass der interne
RC-Oszillator mit 4 MHz arbeitet. Kein EEPROM-Code wird erzeugt.
Nicht invertiertes Signal am PB3-Ausgang
High-Signale 500µs lang
Vier Low+High-Signale mit 800µs Dauer und
langes inaktives Synchronsignal.
©2011 by http://www.avr-asm-tutorial.net