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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren