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.
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