Forum: Mikrocontroller und Digitale Elektronik R2R DAC an welche Pins vom Atmega8


von semi (Gast)


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

von Michael U. (amiga)


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

von semi (Gast)


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

von semi (Gast)


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?

von Falk B. (falk)


Lesenswert?

@ 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

von Michael U. (amiga)


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

von ulrich (Gast)


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.

von semi (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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 :-)

von Mike (Gast)


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

von semi (Gast)


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

von semi (Gast)


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

von semi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.