Funktionsgenerator

Gast #69134
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.
Angehängte Dateien:
Gast #69135
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
Gast #69137
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
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.