-         

Ergebnis 1 bis 4 von 4

Thema: Problem DA-Wandler

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272

    Problem DA-Wandler

    Anzeige

    Hallo,

    habe einen R2R-DA Wandler gebaut und jetzt an meinen Atmega 16 angeschloßen.

    Link zur Erklärung: http://www.mikrocontroller.net/articles/DA-Wandler

    Da das Teil vielseitig anwendbar ist, wollte ich den halt mal ausprobieren.

    Die Hardware ist so easy, die muss richtig sein. habe ich auch nach gemessen. die stimmt.

    Habe dann ein kleines Programm geschrieben um eine Zahl in einen Binärwert umzusetzten.

    Ach als Widerstände habe ich 4,7k und 10k Ohm verwendet.

    Code:
    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 9600
    
    
    '******************* LC Display ************************************************
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Porta.6 , Rs = Portb.0
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    
    Dim A As Byte , B1 As Byte , C As Byte , D As Byte , B2 As Byte , B3 As Byte
    Dim B4 As Byte , B5 As Byte , B6 As Byte , B7 As Byte , B8 As Byte , B0 As Byte
    Dim H0 As Byte , H1 As Byte , H2 As Byte , H3 As Byte , H4 As Byte , H5 As Byte,
    Dim H6 As Byte , H7 As Byte,
    
    Config Porta.1 = Input
    Config Porta.0 = Input
    
    
    Config Porta.2 = Output
    Config Porta.3 = Output
    Config Portd.7 = Output
    Config Portd.6 = Output
    
    'Werteübergabe an die einzelnen Pins
    Da0 Alias Portc.1 'Z0
    Da1 Alias Portc.0 'Z1 
    Da2 Alias Portd.7 'Z2
    Da3 Alias Portd.6 'Z3
    Da4 Alias Portd.5 'Z4
    Da5 Alias Portd.4 'Z5
    Da6 Alias Portd.3 'Z6
    Da7 Alias Portd.2 'Z7
    
    Portd = &B11000000
    Portb = &B11111111
    Porta = &B11001111
    Portc = &B11111111
    
    Declare Sub Umrechnen()
    
    A = 163 'ca. 2,5V
    
    Do
    Cls
    
    'Taste für Hochzählen
    If Pina.0 = 0 Then                                          'Tastenabfrage der Powertaste
    
          Waitms 50                                             'entprellen
    
          If Pina.0 = 0 Then
    
                Incr A
    
          End If
    
       End If
    
    'Taste für Runterzählen
    If Pina.1 = 0 Then                                          'Tastenabfrage der Powertaste
    
          Waitms 50                                             'entprellen
    
          If Pina.1 = 0 Then
    
                Decr A
    
          End If
    
       End If
    
    'eingestellter Wert auf lcd ausgeben
    Locate 1 , 1
    Lcd ; A;
    
    'Zahl umrechnen in binärwert
    Call Umrechnen
    
    'ausgabe des Binärwerts
    Locate 2 , 1
    
    Lcd ; H7;
    Lcd ; H6;
    Lcd ; H5;
    Lcd ; H4;
    Lcd ; H3;
    Lcd ; H2;
    Lcd ; H1;
    Lcd ; H0;
    
    'Übergabe des Binärwerts zu den Ports
    Da0 = H7
    Da1 = H6
    Da2 = H5
    Da3 = H4
    Da4 = H3
    Da5 = H2
    Da6 = H1
    Da7 = H0
    
    Print A
    
    Loop
    
    End
    
    
    '*************** Umrechnen *****************************************************
    Sub Umrechnen()
    
    B0 = A / 2
    B1 = B0 / 2
    B2 = B1 / 2
    B3 = B2 / 2
    B4 = B3 / 2
    B5 = B4 / 2
    B6 = B5 / 2
    B7 = B6 / 2
    
    H0 = A Mod 2
    H1 = B0 Mod 2
    H2 = B1 Mod 2
    H3 = B2 Mod 2
    H4 = B3 Mod 2
    H5 = B4 Mod 2
    H6 = B5 Mod 2
    H7 = B6 Mod 2
    
    End Sub
    Das Problem dabei ist aber das die eingestellt Spannung bei mir immer sehr stark springt.

    Also bei einem Wert von 1 kann ich am DA Wandler 1,79V messen. bei 2 = 1,57V. bei 5 = 2,4V und so weiter.
    Habe die Ausgabeports schon ein paarmal angepasst, aber es funzt immer noch nicht.

    jetzt vermutet ich ein fehler in meinem Decimal in Binär umwandlungsprogramm.

    Könnt ihr bitte mal schaun ob ich mich irgendwo vertan habe. Rein theoretisch sollte die Differenz zwischen den DA Wandler werten bei 20mV liegen. Ic probiere schon seit 2 Tagen rum.

    thx Arno
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272
    ok, habs hinbekommen.
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    27
    Beiträge
    443
    Hallo,

    kannst du mal sagen wie du das hinbekommen hast?
    Habe nämlich einen ähnliche fehler.

    mfg
    Michael
    Besuch mal meine HP: www.highcurrent.de

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272
    Hallo,

    das Programm was ich geschrieben habe war irgendwo falsch gewesen. Ausserdem gibt es in Bascom eine vie einfachere Variante der Umwandlung.

    Code:
    Declare Sub Write_Port
    ...
    Write_port Dac                                              'Wertübergabe an DA Wandler
    ...
    
    
    Sub Write_port(x As Byte)
    
    Portd.2 = X.7
    Portd.3 = X.6
    Portd.4 = X.5
    Portd.5 = X.4
    Portd.6 = X.3
    Portd.7 = X.2
    Portc.1 = X.1
    Portc.0 = X.0
    
    End Sub
    Das ist nur ein Auszug aus dem Programm. Du gibst also ein Wert für den DAC vor. Den Übergibst du in das Unterprogramm was dann die einzelnen Ports richtig setzt.

    Hoffe das Hilft dir weiter.

    cu Arno
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •