Pfad: Home => AVR-DE => Anwendungen => Sinusgeneratoren => Sinusgenerator tn24   This page in English: Flag EN Logo
DAC8 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:
  1. 8-bit R/2R-Netzwerk,
  2. wählbarer und konfigurierbarer Quarz,
  3. entweder 256, 128, 64, 32, 16 oder 8 Auflösungsschritte,
  4. großer 16-Bit-Verzögerungszähler, verwendbar für niedrige und seher niedrige Frequenzen,
  5. sehr schneller Algorithmus (Minimum-Zykluslänge 16 Takte pro Schritt),
  6. sehr kleine 14-Pin-Packung.

Hardware

Schaltbild des Sinusgenerators mit ATtiny24 Das ist schon alles, was nötig ist.

Der Generator hat

Platine

Platine Kupferseite Platine Bestueckungsseite 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:
  1. die Frequenz, die erzeugt werden soll,
  2. die Frequenz des Quarzes,
  3. die Auflösung der Sinuswelle, wenn die zu erzeugende Frequenz größer ist als 3.9 kHz,
  4. welchen Operationsverstärker Du verbauen willst (einen 741 oder einen CA3140),
  5. 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: 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.

1000 Hz mit Resolution 32 beim CA3140 1000 Hz mit Resolution 32 beim 741 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