Pfad:
Home =>
AVR-DE =>
Anwendungen =>
Sinusgeneratoren => Sinusgenerator tn24
This page in English:
 |
Tutorial zum Erlernen der AVR Assembler-Sprache von
AVR-Einchip-Prozessoren
von ATMEL anhand praktischer Beispiele.
Sinusgeneratoren
Einfacher Sinusgenerator mit R/2R-Netzwerk und ATtiny24 |
Sinusgenerator Festfrequenz ATtiny24
Wenn Du einen Sinusgenerator mit einer festen Frequenz brauchst, bist Du hier
richtig. Er hat die folgenden Eigenschaften:
- 8-bit R/2R-Netzwerk,
- wählbarer und konfigurierbarer Quarz,
- entweder 256, 128, 64, 32, 16 oder 8 Auflösungsschritte,
- großer 16-Bit-Verzögerungszähler, verwendbar für
niedrige und seher niedrige Frequenzen,
- sehr schneller Algorithmus (Minimum-Zykluslänge 16 Takte pro
Schritt),
- sehr kleine 14-Pin-Packung.
Hardware
Das ist schon alles, was nötig ist.
Der Generator hat
- das übliche R/2R-Netzwerk am Port D mit 8 Bit Genauigkeit,
- einen Quarz für die exakte Taktung,
- einen Trennverstärker, der das Netzwerk entkoppelt und genug
Ausgangsspannung und -leistung bringt,
- einen LC-Tiefpass-Filter zur Unterdrückung der verbleibenden
Rechteckanteile im Signal,
- eine Standard-Sechs-Pin-ISP-Schnittstelle zum Programmieren innerhalb
des fertigen Systems.
Platine
Das ist das schnuckelige Platinen-Layout für den Sinusgenerator mit
ATtiny24. Die Bilder sind verkleinerte Kopien der Originale (in
Originalgröße herunterladen mit rechter Maustaste und
Speichern unter .... Im Bestückungsplan sind Bohrungen
mit 0,8 mm rot und mit 1,0 mm violett.
Wer Linux hat, kann mit tgif auch die Original-Zeichnungen bearbeiten:
die Platine mit der Kupferseite mit allen Komponenten (Farblayer) =
hier, Bestückungsplan =
hier.
Konfiguration
Alles was zu entscheiden ist:
- die Frequenz, die erzeugt werden soll,
- die Frequenz des Quarzes,
- die Auflösung der Sinuswelle, wenn die zu erzeugende Frequenz
größer ist als 3.9 kHz,
- welchen Operationsverstärker Du verbauen willst (einen 741 oder
einen CA3140),
- ob das zweifach-LC- oder -RC-Filter ausreicht.
Für die Konfiguration kann das LibreOffice-Calc-Dokument
hier verwendet werden. Es enthält
die folgenden Tabellenblätter:
- Frequenzbereiche: Das zeigt, welche Frequenzen mit welcher
Auflösung einstellbar sind.
- Sinustabelle: Das enthält die Sinustabelle, mit der
Möglichkeit zum Export in den Quellcode. Hier wird auch der
verwendete Operationsverstärker berücksichtigt.
- Taktung: Hier können verschiedene Quarztakte ausprobiert
werden, einfach aus der Dropdown-Liste auswählen. Die zu erzeugende
Frequenz wird dann in Taktraten umgerechnet und man kann sehen, ob und
wie genau die zu erzeugende Frequenz erzielt werden kann.
- Quarze: Dieses Blatt enthält die marktüblichen Quarze
und dient als Liste.
- LC-Filter: Erlaubt die Berechnung des LC-Filters und des
Ausgangskondensators.
Das folgende Kapitel zeigt, wie das Ausgewählte in Assembler-Quellcode
umgesetzt wird.
Software
Der Assembler-Quellcode kann
hier heruntergeladen werden. Darin
gibt es folgende Passagen:
; **********************************
; E I N S T E L L B A R
; **********************************
;
; Die Taktfrequenz des Quarzes
.equ clock = 16000000 ; Takt in Hz
;
; Die folgenden Kombinationen sind moeglich:
; Nur die Frequenz (Assembler entscheidet)
; Frequenz und Resolution (Assembler berechnet Delay)
; Frequenz und Delay (Assembler berechnet Resolution)
; Resolution und Delay (Assembler berechnet Frequenz)
; Alle nicht zu definierenden Parameter mit Semikolon ausblenden
;
; Wenn die Frequenz fest sein soll, dann
; hier definieren
;.equ cFreq=1000000 ; Frequenzangabe in mHz
;
; Wenn die R resolution fest sein soll, dann
; hier definieren
.equ cResol=32 ; Resolution 256/128/64/32/16/8
;
; Wenn das Delay fest sein soll, dann
; hier definieren
.equ cDelay=122 ; muss zwischen 1 und 65536 (=0) liegen
Im dargestellten Fall ist die Frequenz nicht angegeben,
nur die Resolution und die Delay-Konstante. In diesem
Fall nimmt der Assembler diese angegebenen Größen.
Wenn die Frequenz - durch Löschen des führenden
Semikolons - aktiviert wird und dafür entweder
die Resolution oder das Delay auskommentiert wird,
berechnet der Assembler den fehlenden Parameter. Wenn
weder die Resolution noch das Delay angegeben ist, legt
der Assembler diese selbst fest: auf die
höchstmögliche Resolution und das niedrigste
Delay.
Wenn der Quellcode entweder mit gavrasm oder mit avr_sim
assembliert wird, kriegt man die vom Assembler berechneten
Größen leicht aus der Symboltabelle am Ende des
Listings heraus.
List of symbols:
Type nDef nUsed Decimalval Hexval Name
T 1 1 25 19 ATTINY24A
L 1 0 0 00 MAIN
L 1 2 2 02 SINELOOP
L 1 2 4 04 SINELOOP1
L 1 2 8 08 SINELOOP2
L 1 2 16 10 SINETABLE
L 1 1 144 90 SINETABLEEND
R 1 4 16 10 RMP
R 1 2 24 18 RCNTL
R 1 1 25 19 RCNTH
C 1 1 27 1B PR2RO
C 1 1 26 1A PR2RD
C 1 1 16000000 F42400 CLOCK
C 1 3 32 20 CRESOL
C 1 3 122 7A CDELAY
C 1 2 8 08 CRESADD
C 1 0 1000000 0F4240 FREQUENCY
V 1 4 32 20 CRES
V 1 6 122 7A CDEL
Das Listing zeigt alle Parameter. Das Symbol Frequency ist die
berechnete Frequenz. Die Angabe ist in mHz, damit man sehr
niedrige und auch ungenaue Frequenzen erkennt.
Im Quellcode ist noch der Operationsverstärker-Typ anzugeben.
Dazu ist entweder cOpAmpCA3140 oder cOpAmp741 zu
definieren. Der Wert, auf den die Konstante gesetzt wird, ist
völlig egal.
Nach dem Ändern im Quellcode neu assemblieren und den
Hexcode in das Flash-Memory brennen, z. B. über
das ISP-Interface.
Nicht vergessen die Takt-Fuse auf den externen Quarz
umzustellen, andernfalls produziert der Generator eine zu
niedrige Frequenz.
Das links ist ein Sinus mit einer Auflösung von 5 Bits (32) und
einem Delay-Wert von 122 bei 16 MHz Takt mit der Sinustabelle
für den CA3140, rechts die für den 741.
Zum Anfang dieser Seite
©2020 by http://www.avr-asm-tutorial.net