farmerjo
18.12.2005, 22:32
Hallo!
Folgendes Problem:
Ich habe an meinen MEGA16 eine R2R DA-Wandler angeschlossen über 15/30kOhm Widerstände und den Port C soll eine 8 bit Wandlung ablaufen. Als test hab ich ein kleines Program mit Bascom geschrieben, dass einen am AD-Wandler anleigenden Wert wieder über den DA-Wandler ausgibt.
Im Großen und ganze funktioniert das auch. Allerdings ist die Wandlung nicht linear und es werden bei 0 auch noch immer 0,7V ausgegeben.
Ich hab dann mal angefangen die einzelnen Pins nachzumessen und da sind immer wieder welche dabei die statt 0V und 4,96V zwischen 3,1V und 4,9V umschalten. Ich bin mir ziemlich sicher, dass keine Lötbrücken oder ein generreler Fehler im Aufbau des Wandlers vorliegen.
Ein absolut baugleicher Wandler läuft an meinem RN-MEGA8 ohnr Probleme. Dort sind aber auch alle Pins über die Status LEDs mit Masse verbunden. Ich hab so den verdacht das da was mit den Pullups/Pulldowns nicht stimmt. Muss ich die Pins einzeln noch extern auf ein Level ziehen oder kann ich die direkt mit den DA-Wandler verbinden?
Anbei noch der Quellcode, vielleicht ist da ja auch der Hund begraben. Würd mich freuen wenn mir jemand helfen könnte hab da heute schon ein paar Stunden reingesteckt ohne richtiges Ergebnis.
$regfile = "m16def.dat"
$crystal = 8000000
Config Porta = Input
Config Portd = Output
Config Portc = Output
Config Lcdpin = Pin , E = Portb.2 , Rs = Portb.0 , Db4 = Portb.3 , Db5 = Portb.4 , Db6 = Portb.5 , Db7 = Portb.6 ,
Config Adc = Single , Prescaler = Auto
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Config Lcd = 16 * 4
Dim I As Integer
Dim V As Integer
Start Adc
Portd.1 = 1
Cls
For I = 1 To 20
Toggle Portd.0
Toggle Portd.1
Waitms 200
Next
Portd = 0
Do
V = Getadc(1)
V = V / 4
Cls
Lcd V
Portc = V
Waitms 250
Loop
End
Am Port D sind nur 2 LowCurrent LEDs angeschlossen die erst ein bischen blinken.
Sowohl der Mega 8 als auch 16 laufen mit dem interne 8Mhz Oszi.
Folgendes Problem:
Ich habe an meinen MEGA16 eine R2R DA-Wandler angeschlossen über 15/30kOhm Widerstände und den Port C soll eine 8 bit Wandlung ablaufen. Als test hab ich ein kleines Program mit Bascom geschrieben, dass einen am AD-Wandler anleigenden Wert wieder über den DA-Wandler ausgibt.
Im Großen und ganze funktioniert das auch. Allerdings ist die Wandlung nicht linear und es werden bei 0 auch noch immer 0,7V ausgegeben.
Ich hab dann mal angefangen die einzelnen Pins nachzumessen und da sind immer wieder welche dabei die statt 0V und 4,96V zwischen 3,1V und 4,9V umschalten. Ich bin mir ziemlich sicher, dass keine Lötbrücken oder ein generreler Fehler im Aufbau des Wandlers vorliegen.
Ein absolut baugleicher Wandler läuft an meinem RN-MEGA8 ohnr Probleme. Dort sind aber auch alle Pins über die Status LEDs mit Masse verbunden. Ich hab so den verdacht das da was mit den Pullups/Pulldowns nicht stimmt. Muss ich die Pins einzeln noch extern auf ein Level ziehen oder kann ich die direkt mit den DA-Wandler verbinden?
Anbei noch der Quellcode, vielleicht ist da ja auch der Hund begraben. Würd mich freuen wenn mir jemand helfen könnte hab da heute schon ein paar Stunden reingesteckt ohne richtiges Ergebnis.
$regfile = "m16def.dat"
$crystal = 8000000
Config Porta = Input
Config Portd = Output
Config Portc = Output
Config Lcdpin = Pin , E = Portb.2 , Rs = Portb.0 , Db4 = Portb.3 , Db5 = Portb.4 , Db6 = Portb.5 , Db7 = Portb.6 ,
Config Adc = Single , Prescaler = Auto
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Config Lcd = 16 * 4
Dim I As Integer
Dim V As Integer
Start Adc
Portd.1 = 1
Cls
For I = 1 To 20
Toggle Portd.0
Toggle Portd.1
Waitms 200
Next
Portd = 0
Do
V = Getadc(1)
V = V / 4
Cls
Lcd V
Portc = V
Waitms 250
Loop
End
Am Port D sind nur 2 LowCurrent LEDs angeschlossen die erst ein bischen blinken.
Sowohl der Mega 8 als auch 16 laufen mit dem interne 8Mhz Oszi.