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.
Das Problem dabei ist aber das die eingestellt Spannung bei mir immer sehr stark springt.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
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







Zitieren

Lesezeichen