R2R DAC an welche Pins vom Atmega8

Gast #1036410
Lesenswert?

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
#1036427
Lesenswert?

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
Gast #1036441
Lesenswert?

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
Gast #1036450
Lesenswert?

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?
#1036461
Lesenswert?

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
Gast #1036464
Lesenswert?

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.
Gast #1036581
Lesenswert?

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).
Gast #1036607
Lesenswert?

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
Gast #1039484
Lesenswert?

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

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