Guten Abend,
ich muss mich für ein Projekt mit einem Sägezahngenerator in VHDL
beschäftigen. Leider kenne ich mich in diesem Bereich überhaupt nicht
aus und stoße auf ein paar grundlegende Verständnis Probleme.
Meine Aufgabe ist:
Ich soll eine Schaltung entwickeln, deren Ausgabe einen DA-Converter
weitergeleitet wird, der dann eine analoge treppenförmige
Sägezahnfunktion erstellt.
Ich muss dem Converter also nur Werte übergeben und mich nicht darum
kümmern wie der arbeitet.
Dieser Converter hat 8 je 1 Bit große Eingänge.
Die Schaltung um die ich mich kümmern soll bekommt einen Frequenzbereich
der zwischen 100-10.000 Hz liegt.
Ich habe eine Grundfrequenz von 2,56 MHz, eine Auflösung von 1 Hz, und
es gibt einen zusätzlichen Eingang zur Unterscheidung zwischen
steigender/fallender Sägezahnfunktion.
Soweit so gut.
Ich soll damit jetzt das passende Ausgangssignal welches an den
DA-Converter weitergeleitet wird erstellen.
Meine erste Vermutung war dass es sich hierbei um die Anzahl der Zähne
handelt die pro Takt erstellt werden können.
Also 2,56 MHz/ Frequenzbereich.
Damit komme ich zwar bei 10.000 Hz auf 256 was perfekt in die 8 Bit
passt aber sollte ich andere Werte nehmen lässt sich das Ergebnis nicht
mehr mit 8 Bit darstellen.
Das ganze soll nur aus VHDL Code (mit entitys, architecturs) bestehen,
also keine physischen Bauteile.
Ich wäre sehr dankbar wenn mir jemand erklären könnte, was ich hierbei
missverstehe und wie sich die Angaben der Grundfrequenz, des
Frequenzbereiches und der Auflösung sich auf die Funktion beziehen.
Grüße,
Basti
Hallo,
das Stichwort, nach dem du mal suchen solltest, ist NCO oder Numeric
Controlled Oscillator. Da kommt ein Sägezahnförmiger Phasengang raus.
Grüße
Für einen Sägezahn brauchts doch nur einen Zähler und ein bisschen
Steuerlogik drumherum. Und noch einen 2. Zähler, der per Clock Enable
die Zählfrequenz vorgibt.
Danke das hilft mir schon mal weiter.
Beim NCO stand dann da wird von einem DDS ausgeführt.
Ich versteh den so als würde er den Frequenzbereich den ich als Eingang
hab (Beispielsweise jetzt mal 10.000 Hz) auf einen Speicher addieren der
so groß ist wie das Signal das dann an den DA Converter kommt (Bei mir
dann 8 Bit also 256).
Als Ergebnis würde dann wohl nach dem ersten Takt "16" rauskommen.
256 passt 39 mal in die 10.000 und dann bleiben noch 16 übrig.
Dann wieder 10.000 drauf addieren also dann hätte ich eine 32 dann 48
usw bis ich wieder nen Überlauf hab.
Sorry ich stell mich bei Dingen mit denen ich noch nie etwas gemacht
habe immer ziemlich dumm an und kann mir das mit einem konkreten
Beispiel besser vorstellen.
Weil dann müsste ich ja nur 1 mal ausrechnen was ich nach der ersten
Addition im Speicherregister stehen hab und dann einen Zähler für jeden
weiteren Takt der dieses Ergebnis auf addiert. Sollte etwas weniger
Performancelastig sein als jedesmal meinen Frequenzbereich zu addieren.
Und das Ergebnis gebe ich dann an meinen DA-Converter weiter.
Oder ist mit dem im 2. Beitrag genannten Zähler etwas anderes gemeint?
Bastian D. schrieb:> Sorry ich stell mich bei Dingen mit denen ich noch nie etwas gemacht> habe immer ziemlich dumm an und kann mir das mit einem konkreten> Beispiel besser vorstellen.
Kannst du dir denn die Geschichte nicht einfach mal ganz
unvoreingenommen vorstellen? Halt so, wie du es bauen würdest, wenn du
es brauchen würdest. Ohne den Kontext einer Studiumsaufgabe. (Btw ist
diese Aufgabe sehr trivial.)
P. M. schrieb:> Halt so, wie du es bauen würdest, wenn du es brauchen würdest.
Und zwar mit Hardwarebausteinen: Zähler, Flipflops und Gatter....
> (Btw ist diese Aufgabe sehr trivial.)
Nachdem die ein Frage beantwortet ist, wie die gewünschte Frequenz an
das zu erstellende Modul übergeben wird.
Bastian D. schrieb:>>> eine Auflösung von 1 Hz,
Denn ein einfacher Vorteiler von 256 bringt zwar genau 10kHz, aber schon
bei 9999Hz wird es kritisch. Der nächste Vorteilerwert wäre ja 257 und
die erzielbare Frequenz daher 9961kHz. Und schon ist eine der
Forderungen so einfach nicht erreichbar.
Klar wäre dafür am anderen Ende die Auflösung wesentlich besser, weil
100Hz einen Vorteiler von 25600 brauchen, und mit 25599 nur 4 mHz mehr
herauskommen (100.0039Hz), aber das bringt ja am "oberen Ende" nichts...
Eine DFS könnte da nur weiterhelfen, wenn die Maximalwerte des
Sägezahns 0 und 255 nicht unbedingt in jedem Zyklus am Ausgang
erscheinen müssen. Wenn es also reicht, z.B. bei 9999Hz nur etwas
"sägezahnähnliches" zu bekommen.
>>> Dieser Converter hat 8 je 1 Bit große Eingänge.
In der Praxis spricht man da von einem 8 Bit breiten Bus. Und von einem
8-Bit DA-Wandler...
P. M. schrieb:> Kannst du dir denn die Geschichte nicht einfach mal ganz> unvoreingenommen vorstellen? Halt so, wie du es bauen würdest, wenn du> es brauchen würdest. Ohne den Kontext einer Studiumsaufgabe. (Btw ist> diese Aufgabe sehr trivial.)
Nun ja ich wüsste nicht wofür ICH das jetzt brauchen würde ;)
Diese Aufgabe mag sicher für viele trivial erscheinen aber für jemanden
der von sowas noch nie gehört hat ist das nicht ganz klar.
Lothar Miller schrieb:> Eine DFS könnte da nur weiterhelfen, wenn die Maximalwerte des> Sägezahns 0 und 255 nicht unbedingt in jedem Zyklus am Ausgang> erscheinen müssen. Wenn es also reicht, z.B. bei 9999Hz nur etwas> "sägezahnähnliches" zu bekommen.
Also heißt das im Klartext ich scher mich nicht um die Genauigkeit und
lasse zu das in den meisten Fällen nur einen Annäherung auskommt?
War denn dann meine Idee in meinem 2. Beitrag so richtig?
Ich sehe grad da dass da die Werte falsch sind ist natürlich 255 aber
davon abgesehen.
Bastian D. schrieb:> Also heißt das im Klartext ich scher mich nicht um die Genauigkeit und> lasse zu das in den meisten Fällen nur einen Annäherung auskommt?
Hier geht es um die Fälle, die nicht "genau" aufgehen. 9961 Hz wird z.B.
wieder recht gut gehen, weil da der Teiler 257 ist.
Und bis zu einer bestimmten Frequenz wird es immer funktionieren, dass
du sowohl den Minimalwert wie auch den Maximalwert erhältst...
Bastian D. schrieb:> Dieser Converter hat 8 je 1 Bit große Eingänge
seltsame Beschreibung einer Byte-Schnittstelle.???
(wie breit sollten die Bits sonst sein? - die sind immer 1 Bit "gross")
Du hast noch nicht viel mit Digitaltechnik gemacht, was?
Ich fürchte, wenn Dir nicht spontan eine Bausteinlösung und auch die
mathematische Bescheibung davon in den Kopf kommen, sobald Du due
Aufgabe siehst, ist die Digitaltechnik nichts für Dich.
Ein Sägezahngenerator ist nichts anderes, als ein Zähler. Je grösser /
breiter der Zähler, desto feinstufiger und genauer zählt er. Den Zähler
muss man bei der Ausgabe auf die 8 Bit normieren, um Vooaussteuerung zu
haben, bzw passend skalieren und verschieben, um die Ausgabe in einem
bestimmten Bereich zu haben.
Michael schrieb:> Du hast noch nicht viel mit Digitaltechnik gemacht, was?>> Ich fürchte, wenn Dir nicht spontan eine Bausteinlösung und auch die> mathematische Bescheibung davon in den Kopf kommen, sobald Du due> Aufgabe siehst, ist die Digitaltechnik nichts für Dich.
Da hast du Recht. Es handelt sich hierbei um ein Projekt was ich von der
Uni aus bekommen habe und hatte keinerlei Wahlmöglichkeiten und hatte
gehofft dass ich kein VHDL Thema bekomme. Tja leider Pech gehabt aber
was solls ich glaub mit eurer Hilfe hab ich das verstanden ;)
Was studierst Du?
Ehrlich gesagt, habe ich solche Lösungen mit 15 aus dem Hut gezogen und
sie direkt in Assembler in den Computer gehackt oder in Pascal
geschrieben, ohne, dass wir in der Schule sowas gehabt hätten oder ich
eine Uni gesehen häbe. Die Sprache ist dabei eigentlich auch egal und
die Hardware auch. Es ´geht so um das Vorgehen, weisst Du?
Elektronikverständnis kommt dann auch noch obenauf:
Hast Du Dir mal angesehen, wie eine ALU oder ein anderes Rechenwerk in
einem Rechner funktionieren? Oder wie eine FSM aussieht, wenn sie von
einer HW gemacht wird oder per SW emuliert wird oder wenn sie abtrakt in
VHDL geschrieben wird?
Die Zusammenhänge musst Du mehr oder weniger ohne Hilfe oder Lernen
direkt sehen, sonst ist nix mit Studium.
Meine Erkenntnisgrenze war damals die Vorstellung, wie eine CPU
multithreading beherrschen kann und dabei organisiert sein muss, damit
sie sich nicht vertut. Das hab ich erst voll kapiert und hätte es auch
bauen können, nachdem ich es im Studium hatte.
Ich studiere Informatik mit Nebenfach Mathe und spezialisiere mich auf
Software.
Alles was mit Hardware zu tun hatte konnte ich soweit, dass es für die
Klausur gereicht hat aber interessiert habe ich mich dafür nicht.
Ich brauche es auch nie wieder in meinem Studium und habe nicht vor es
zu meinem Beruf zu machen und hatte Dinge die mir wichtiger waren auf
die ich mich dann eher konzentriert habe.
Selbstverständlich weiß ich wie ein Rechner arbeitet, wie seine
Kernbauteile aufgebaut sind, und wieso sie tun was sie tun. Aber nur in
der Theorie.
Die Antwort :
Bastian D. schrieb:> Selbstverständlich weiß ich wie ein Rechner arbeitet
auf diese Frage:
Michael schrieb:> Hast Du Dir mal angesehen, wie eine ALU oder ein anderes Rechenwerk in> einem Rechner funktionieren?
zeigt das Problem: Du hast keine Idee, was eine Alu ist und wie sie
arbeitet, dass es sich um eine befehlsgesteuerte Architektur handelt,
die sich Befehle holt, sie ausführt, Daten aus Registern und RAMs holt
und wieder speichert.
Bastian D. schrieb:> Ich studiere Informatik mit Nebenfach Mathe und spezialisiere mich auf> Software.
Man könnte jetzt sagen, ok, dann braucht er keine Hardware. Ja.
Aber: Ein Informatiker sollte auch einen Ablauf eines sich langsam
erhöhenden Zählers verstehen und sich dann die paar C-Befehle holen, das
zu formulieren. DAzu muss ich nur wissen, welche HW zur Verfügung steht.
(Mikrocontroller, CPU oder was auch immer).
Dasselbe geht auch bei den VHDL Befehlen: Hardware studieren und dann
die Befehle finden.
Die meisten Studies, die ich kenne, haben sich VHDL selber begebracht.
Selbst die Physiker kriegen das hin.
Ich wünsche Dir viel Glück.
the last commentator schrieb:> Die meisten Studies, die ich kenne, haben sich VHDL selber begebracht.>> Selbst die Physiker kriegen das hin.
und so sieht der code dann meist auch aus: "selber beigebracht"!
Bastian D. schrieb:> Dann wieder 10.000 drauf addieren also dann hätte ich eine 32 dann 48>> usw bis ich wieder nen Überlauf hab.
Du brauchst nur einen gross genug dimensionierten Akku