www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit R/2R DA- Wandlung


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir ein 8 Bit R/2R DA - Wandler gabaut. Es ist alles richtig 
angeschlossen. Er funktioniert nur zu einem Bstimmten Grad richtig:

Wenn ich an den Ausgang die Bits langsam hochzähle, kann ich eine 
ansteigende Spannung am Voltmeter erkennen. Ab einem bestimmten Wert 
~128, fällt die Spannung ab, auf die Hälfte der ref. Spannung (5V) und 
ab da wird weitergezählt.

Mfg Daniel

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Daniel

>Ich habe mir ein 8 Bit R/2R DA - Wandler gabaut. Es ist alles richtig
>angeschlossen. Er funktioniert nur zu einem Bstimmten Grad richtig:

>Wenn ich an den Ausgang die Bits langsam hochzähle, kann ich eine
>ansteigende Spannung am Voltmeter erkennen. Ab einem bestimmten Wert
>~128, fällt die Spannung ab, auf die Hälfte der ref. Spannung (5V) und
>ab da wird weitergezählt.

Klingt entweder nach vertauschten Bits in der Verdrahtung (MSB) oder 
Einer-Zweierkomplement Verwechselung.

MFG
Falk

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Verdrahtung stimmt, ich zähle einfach mit einer for -schleife hoch 
die Zahl, die hochgezählt wird, gebe ich an den Port aus.

Mfg. Daniel

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Daniel

>Die Verdrahtung stimmt, ich zähle einfach mit einer for -schleife hoch
>die Zahl, die hochgezählt wird, gebe ich an den Port aus.

In C? Ist deine Zählvariable als unsigned definiert? Zeig mal den Code.
Du kannst auch die Bits einzeln setzen und prüfen. Das LSB wackelt nur 
wenig, das MSB um VCC/2.

MfG
Falk

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier der Code

int main (void)

{
  uint16_t  j,l,m,i;
  

  DDRB = 0xff;

  while(1)
  {
    for( i = 0; i < 257; i = i + 1) //Abzählen der Ports aufwärts
    {  
    
      PORTB = i;
      

      for(j=0; j < 1; j = j+1);
        
            //Abwarten
    }

 for( l = 257; l > 0; l = l -1) //Abzählen der Ports abwärts
    {
      PORTB = l;
      

      for(m=0; m < 1; m = m+1);
        
            //Abwarten
    }







  }




  return 1;
}


Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe ich da jetzt was falsch?

128 ist die Hälfte von 256 -> Halbe Referenzspannung am Ausgang

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Daniel

>Hier der Code

Soweit OK (naja ein paar Schnitzer sind drin), aber dein Abwarten wird 
rausoptimiert bzw. ist soo kurz, dass du da nichts sehen kannst. Womit 
misst du? Mit nem Oszi? Ich tippe immer noch auf verdrehte Verdrahtung. 
Hast du einen Schaltplan?
Hier mal die etwas aufgeräumte Version. Du brauchst dafür die include 
der delay Macros

#include <avr/delay.h>

int main (void)

{
  uint16_t  j,l,m,i;

  DDRB = 0xff;

  while(1)
  {
    for( i = 0; i < 256; i++) //Abzählen der Ports aufwärts
    {
      PORTB = i;
    _delay_us(1);
    }

 for( l = 255; l > 0; l--) //Abzählen der Ports abwärts
    {
      PORTB = l;
      _delay_us(1);
    }
  }
  return 1;
}

MFG
Falk

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder evtl irgendwo ein Widerstand mit falschem Wert?

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.