mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Funktionsgenerator


Autor: Bernhard Friedel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich versuche einen Funktionsgenerator mit einem ATmega16 und einem
DAC0800 zu realisieren.
Das Problem ist, dass ich momentan maximal 9,8 kHz bei 36
Einzelschritten pro Kurvenform schaffe.

Da es mein erstes Projekt mit einem AVR ist weiß ich nicht ob es an mir
liegt, dass ich keine höheren Frequenzen schaffe, oder ob es mit dieser
Konfiguration einfach nicht möglich ist.

Wäre dankbar für hilfreiche Tipps.

Autor: eugen d (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja also ich habe das mal so pauschal überschlagen, wenn du es schaffst,
dass du nur 10 zyklen für die ausgabe die sprünge und holen der daten
brauchst müsstest du bei 36 samples und 16 Mhz 44 kHz an frequenz
schaffen. soweit ich mich entsinne, hat der typ der den yamp (yet an
other mp3 player) gebaut hat auch nen dds gebaut, und er hat in
assembler es in glaube 9 zycklen geschafft  die daten ranzuholen und
auszugeben.
du müsstest also ne assembler funktion schreiben die die schleife
ersezt.
MfG eugen d

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal http://www.mikrocontroller.net/projects/dds/ an, ich
verwende da einen Timerinterrupt der alle 25 Takte aufgerufen wird. Mit
einer normalen Schleife ginge es schneller, aber dann wäre keine Zeit
mehr für LCD & Taster.

Autor: Bernhard Friedel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nun das ganze in Assembler (ist mein erstes Assembler-Programm).
Das kleine Testprogramm schafft bei 51 Schritten ca. 44kHz - aber jetzt
hab ich immer ein nettes Eck in der Kurve (siehe angehängtes Bild).

Wie soll ich nun am besten die Frequenzeinstellung lösen? Mit einem
Timer?
Der Controller muss eigentlich nichts anderes machen als die Tabellen
abzuarbeiten, da das LCD und die Eingabe von einem zweiten Controller
übernommen wird.


.include "m16def.inc"

  ser R16
  out DDRA,R16
  ldi r16,0x05

        ldi ZL, low(sine*2)
        ldi ZH, HIGH(sine*2)

loop:
  add zl, r16
  lpm
  out PORTA,R0
  rjmp loop

sine:

.db 0x80,0x82,0x85,0x88,0x8C,0x8F,0x92,0x95
.db 0x98,0x9B,0x9E,0xA1,0xA4,0xA7,0xAA,0xAD
.db 0xB0,0xB3,0xB6,0xB9,0xBB,0xBE,0xC1,0xC3
.db 0xC6,0xC9,0xCB,0xCE,0xD0,0xD3,0xD5,0xD7
.db 0xDA,0xDC,0xDE,0xE0,0xE2,0xE4,0xE6,0xE8
.db 0xE9,0xEB,0xED,0xEE,0xF0,0xF1,0xF3,0xF4
.db 0xF5,0xF6,0xF8,0xF9,0xF9,0xFA,0xFB,0xFC
.db 0xFD,0xFD,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF
.db 0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFD
.db 0xFD,0xFC,0xFB,0xFA,0xF9,0xF9,0xF8,0xF6
.db 0xF5,0xF4,0xF3,0xF1,0xF0,0xEE,0xED,0xEB
.db 0xE9,0xE8,0xE6,0xE4,0xE2,0xE0,0xDE,0xDC
.db 0xDA,0xD7,0xD5,0xD3,0xD0,0xCE,0xCB,0xC9
.db 0xC6,0xC3,0xC1,0xBE,0xBB,0xB9,0xB6,0xB3
.db 0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x9E,0x9B
.db 0x98,0x95,0x92,0x8F,0x8C,0x88,0x85,0x82
.db 0x80,0x7D,0x7A,0x77,0x73,0x70,0x6D,0x6A
.db 0x67,0x64,0x61,0x5E,0x5B,0x58,0x55,0x52
.db 0x4F,0x4C,0x49,0x46,0x44,0x41,0x3E,0x3C
.db 0x39,0x36,0x34,0x31,0x2F,0x2C,0x2A,0x28
.db 0x25,0x23,0x21,0x1F,0x1D,0x1B,0x19,0x17
.db 0x16,0x14,0x12,0x11,0x0F,0x0E,0x0C,0x0B
.db 0x0A,0x09,0x07,0x06,0x06,0x05,0x04,0x03
.db 0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00
.db 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02
.db 0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x09
.db 0x0A,0x0B,0x0C,0x0E,0x0F,0x11,0x12,0x14
.db 0x16,0x17,0x19,0x1B,0x1D,0x1F,0x21,0x23
.db 0x25,0x28,0x2A,0x2C,0x2F,0x31,0x34,0x36
.db 0x39,0x3C,0x3E,0x41,0x44,0x46,0x49,0x4C
.db 0x4F,0x52,0x55,0x58,0x5B,0x5E,0x61,0x64
.db 0x67,0x6A,0x6D,0x70,0x73,0x77,0x7A,0x7D

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst "sine" auf eine Adresse mit Low-Byte=0 legen, sonst musst du
beim Addieren das Carry berücksichtigen und den Zähler am Ende der
Tabelle wieder zurücksetzen.

Zur Frequenzeinstellung: schau dir
http://www.mikrocontroller.net/projects/dds/ an.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.