mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik R2-R Ladder


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mir ein 10bit R2R Ladder gebastelt. Nun habe ich
folgendes Problem: gibt es eine einfache Lösung in C diesen
anzusteuern ..? Bin leider noch Anfänger.

Hätte mir folgendes vorgestellt:
zB.: gewünschte Ausgabespannung: 4.62

V Port: 4,92

4,92/1024 = 0,0048046875

4.62/0,0048046875 = 961,5609756097560975609756097561

961 mod 2 = 1
480 mod 2 = 0
240 mod 2 = 0
120 mod 2 = 0
 60 mod 2 = 0
 30 mod 2 = 0
 15 mod 2 = 1
  7 mod 2 = 1
  3 mod 2 = 1
  1 mod 2 = 1

wäre dann binär: 11 1100 0001

Wenn ich jeden Rivisionsrest einer Veriable zuweise und die Portpins
dann einzeln setze funktiert das ja, nur die Lösung ist sicher nicht
das gelbe vom Ei.

.... gibts dafür ne einfache Lösung ... ?

Danke vorerst mal ..

Chris

Autor: Dingens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo genau liegt denn da das problem? wozu fummelst du deinen ausgabewert
961 nochmal manuell in binär um?
man könnte es doch z.B. so auf zwei ports aufteilen:

v_pin=4.92;
v_out=4.62;
dac_wert=1024*v_out/v_pin;
port_low=dac_wert & 0xff;
port_high=(port_high & 0xfc) + (dac_wert >> 8);

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

danke mal ... sorry, ein paar sachen sind mir dabei nicht klar ...

v_pin=4.92;                                       OK
v_out=4.62;                                       OK
dac_wert=1024*v_out/v_pin;                        OK
port_low=dac_wert & 0xff;
     port_low=0x3C1 & 0xFF
     port_low=0xC1 (1100 0001)                    OK

port_high=(port_high & 0xfc) + (dac_wert >> 8);
     port_high=?????????????????  + (11 1100 0001 >> 8)
     port_high=?????????????????  + (11)

was macht: (port_high & 0xfc)

wird dadurch der status der anderen 6 portpins (PA0 - PA5) in dem fall
am port_high beeinflußt? die sind nämlich bereits belegt ..

zB.:

void OutputRR(void)
{
    float v_pin;
    float v_out;
    float dac_wert;
    int port_low;
    int port_high;

    v_pin=4.92;
    v_out=4.62;
    dac_wert=1024*v_out/v_pin;
    port_low=dac_wert & 0xff;
    port_high=(port_high & 0xfc) + (dac_wert >> 8);

    DDRB = 0xFF; //DDR für Port B auf Ausgabe
    DDRA = 0xFF; //DDR für Port A auf Ausgabe
    PORTA = port_high;
    PORTB = port_low;

    PORTA.0 = 1; // PORTA.0 bis A.5 in Verwendung
    PORTA.1 = 1;
    PORTA.2 = 0;
    PORTA.3 = 1;
    PORTA.4 = 0;
    PORTA.5 = 1;

}

würde das so funktionieren .... ?

thx
Chris

Autor: Dingens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das "port_high & 0xfc" setzt die beiden untersten bits auf 0.
anschliessend wird der wert dieser beiden bits aufaddiert. sinn der
sache ist jene beiden bits zu setzen ohne den rest des ports zu
verändern.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

danke ... habe das mit dem bitweise UND auch gecheckt ... find ich
super ..

thx
CHRIS

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ein 10bit R2R Ladder gebastelt"

Bist Du sicher, daß das auch funktioniert ?

Mit normalen 1% Widerständen (1/100 genau) kommst Du ja nicht mal auf 7
Bit (1/128 genau).

Deshalb macht sowas heutzutage keiner mehr zu Fuß, sondern nimmt
fertige DACs, wo der Hersteller dafür sorgt, daß die internen
Widerstände genau genug sind.


Peter

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0,1 % Widerstände gibt's ja auch. ;-)  Habe mich letztens erst
gewundert,
was der violette Toleranzring auf ein paar Widerständen ist...  da
habe
ich erstmal nachgucken müssen dafür. :)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja mit 0,1% gehen 10 Bit gerade so (1/1000 statt 1/1024).

Aber auch die Analogschalter berücksichtigen !

Bei 10k/20k fürs R/2R dürfen die höchstens 10 Ohm On-Widerstand haben.


Peter

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter: welche Analogschalter??

hat jemand einen Schaltplan für DAC und AVR und evtl. C-Source?
würde mir das gerne anschauen ...

Chris

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"welche Analogschalter??"

Wenn Du Dir mal die Innenschaltung eines R/2R-DAC ansiehst, ist da für
jedes Bit ein Analogschalter drin, der zwischen Analog-GND und Analog-
Referenz umschaltet.

Anders gesagt, wen Du die R/2R direkt auf den MC legst, sind auch mit
0,1% Widerständen keine 10 Bit drin.
Deine Ausgangsspannung würde ordentlich zappeln, je nachdem, welche
Last die anderen Pins Deines MC gerade ansteuern.


Peter

Autor: Manfred Glahe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zusätzlich ist noch die Versorgungsspannung zu berücksichtigen, jede
Schwankung schlägt voll zu. Deshalb schaltet man üblicherweise mit
Kontstantstrom, da spielen Versorgungsschwankungen keine Rolle
mehr.Solche Anordnung habe ich selbst vor 20 Jahren nur bis 4 Bit
eingesetzt.

MfG  Manfred Glahe

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und das erzählt mir mir jetz, wo ich die schaltung fertig habe?! :)
naja, hab den filter noch nich aufgebaut, aber bis jetz ist es
eigentlich das, was ich erwartet habe (von der genauigkeit her)

Hab Silizium Widerstandsreihen verwendet für meine 8 Bit. aber den
Spannungsteilerstrang dann doch mit 10% (!) Kohleschicht-R´s machen
müssen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.