Hallo Member, ich hätte eine Frage bezüglich der Pinbelegung. Wie könnte ich einen 8 bit R2R DAC an einen Mega8 anschließen, wenn ich RESET, RX, TX, OC1A und OC1B und ein Pin von dem DAC (PortC) benötige. Klar habe ich noch genug freie Pins, aber dann klappt ja das senden einer 8bitzahl an einen Port nicht mehr so komfortabel. Oder kann man da irgendwas in den *.h Dateien ändern, damit ich mir meine Ports selber definieren kann? Oder vielleicht sogar noch einfacher? Danke schon mal für jeden Tip... schönen Abend MFG Semi
Hallo, hängt wohl eher davon ab, ob Du kurzzeitig ungültige Ausgaben des R2R akzeptieren kannst... Eine Subroutine, die einen 8Bit-Wert bekommt und mit ein paar Maskierungen und Schiebereien auf irgendwelche Portpins verteilt, sollte auch in C nicht sonderlich aufwändig sein (bin ASM-Programmierer...). Du hast eben ziemliche Spikes in Deiner Ausgangsspannung bis alle Bits neu gesetzt sind. Wenn Du Platz hast und noch ein Pin frei könntest Du natürlich ein 8Bit-Latch (74HC573 z.B.) dazwischen händen, dann in Ruhe Deine Bits setzten und anschließend mit LE das Byte im Stück in das Latch übernehmen. Es mötig ist und den Aufwand Wert ist, hängt vom Verwendungszweck ab. Gruß aus Berlin Michael
Danke für die schnelle Antwort. Soll ein Test für ein kleines Projekt mit DDS für die Ausgabe einer Sinuswelle mit variabler Frequenz sein. Da wären Spikes nicht so schön und Verzögerungen, würden sich auch auf die Periodendauer auswirken. Wie genau funktioniert das mit dem Latch? Habe dahingehened noch keine Erfahrungen. Dachte nur, dass ich mit einem R2R gut aufgehoben bin, für die ersten Gehversuche... Danke nochmal und Gruss semi
vor allem, wie kann ich portC als Ganzes verwenden? Da hängt doch der Reset dran, und wenn das mit den fuses umstellbar ist, sollte der doch auch nicht mehr programmierbar sein? ich vermute ich kann kein 8bit dac verwenden oder? muss doch irgendwie in den headerdateien änderbar sein, oder?
@ semi (Gast)
>R2R gut aufgehoben bin, für die ersten Gehversuche...
Dann machs doch nicht so kompliziert! Pack den R2R n einen VOLLSTÄNDIGEN
Port und gut. Und lass die Finger vom Reset, den brauchst du für ISP.
MFG
Falk
Hallo, häng Deine Portpin-Sammlung ;) an die Eingänge eines 74HC573, das R2R-Netzwerk an dessen Ausgänge. /OE fest auf L damit die Ausgänge immer aktiv sind, LE an einen freien Portpin, der in Grundstellung auf L liegt. Jetzt Deine Portbits setzen und wenn alle passend anliegen LE auf H (damit werden die Eingangsdaten ins Latch und auf die Ausgängeund gelegt), dann wieder auf L (damit werden die Eingänge vom Latch getrennt, die Ausgänge behalten den Zustand bei. Die ganze Geschichte kostet meiner Meinung nach ohnehin recht viel Zeit, kommt darauf an, vie hoch Deine Frequenzen werden sollen... Falls Du den DAC des Mega8 benutzt danke daran, daß während einer Wandlung die anderen Portbits nicht umgeschaltet werden sollen, wenn sie Ausgang sind, das stört die Wandlung. Gruß aus Berlin Michael
Bei einem einfachen R2R AD sollte man auch mit 7 Bit Auflösung auskommen. dann kann man den Restpin Freilassen. Sonst ein anderer Controller wo 8 Bits zusammen frei sind. Z.B. Tiny2313 oder Mega16.
Danke für die Antwort, aber die Rot markierten pins benötige ich halt für andere zwecke. Sieht da noch jemand ein 8bitPort frei?
Du kannst auch ein Schieberegister 74HC595 nehmen und an 3 Portpins hängen. Das ist zwar langsamer als ein paralleles Latch, sollte für Tonausgabe aber noch reichen. Dein SPI ist ja auch noch frei :-)
Brauchst du die serielle Schnittstelle unbedingt? Dann hättest du Port D. Frei. Mit 8 Bit. Ansonsten wäre Port C wohl die nächst beste Lösung (6 Bit frei - sogar ohne Verschiebereien). Alternativen: - AVR mit mehr Pins verwenden (Mega 16/32/8535) oder etwas günstiger verteilt Tiny 2313 - Wie schnell soll denn deine DSS werden? Wenn das nicht allzu schnell, dann geht eventuell ein 74HC595 als Porterweiterung (ist ein Schieberegister mit Latch).
Vielen Dank nochmal an alle Vorschläge.
Ich habe mich nun für die Testzwecke auf 4bit geeinigt, und klappt
wunderbar. Allerdings habe ich noch Probleme bei der DDS selbst bzw beim
generieren meiner Sinustabelle.
Ist in dem Falle tabelle[16]=sin(2*pi*z/16) korrekt? oder muss ich da
anders vorgehen? Wie komme ich auf die schrittweite, die ich verwenden
muss für die bestimmte frequenz?
>Wie schnell soll denn deine DSS werden?
maximal 20khz, also alles im hörbaren pieptonbereich...
danke und gruss
semi
Mag mir denn keiner Helfen? Ich hänge immernoch an der Berechnung der Frequenzen bzw Sprungweiten für ein Sinussignal. Ich verstehe die Beschreibungen zum Thema DDS einfach nicht genau, ich habe so viel darüber gelesen (teils auch englisch) aber ich steig da nicht hinter. Vielleicht kann mir das einer Kurz und Knapp in Worte fassen, die ich nachvollziehen kann. Oder korrigiert mich bitte, wenn ich ein Denkfehler hab: Ich habe eine Sinustabelle, die eine Periode zb in meinem Falle in 4bit(16Teile) teilt und die Funktionswerte an diesen 16Bereichen beinhaltet? Nun ist es möglich mit dem Timer compare match verschiedene Frequenzen zu erreichen, wie berechnet man sowas? Was übergebe ich dem µC für ein TuningWord und wofür ist das genau? Warum ist die Wortbreite von diesem Tuningword so gross? hat das einen besonderen Grund? Wäre für jede Hlfe, jeden Tip oder Pseudocode sehr dankbar. Schönen Abend und Gruss Semi
Hat denn wirklich niemand ein Denkanstoss zum Thema DDS und Sinus ?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.