Blue72
28.05.2009, 12:29
Hi Leute,
ich habe da ein Problem mit dem ADC.
Es liegt am ADC7 eine Spannung an von 3V (z.B.), zeitgleich mit dem einschalten des µC. Diese Spannung lasse ich mir über LEDs anzeigen.
Das Problem ist, das die anliegende Spannung erst dann erkannt wird wenn eine Änderung dieser Eintritt, vorher nicht.
Ich habe schon viel probiert, z.B. Stop ADC und direkt Start ADC eingefügt, um kurz die Spannung vom ADC zu entfernen.
Auch der Betriebsmodus Single oder Free brachte keine Änderung.
Hier mal das Programm:
$regfile = "m8def.dat"
$framesize = 32
$swstack = 64
$hwstack = 64
$crystal = 1000000
Dim I As Byte , W As Word , B(7) As Word , C(7) As Word , A As Byte
Config Portd = Output
Config Pind.7 = Input
Config Portb.1 = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8
Compare1a = 1
Config Timer0 = Timer , Prescale = 64
Enable Timer0
Enable Interrupts
On Timer0 Zaehlen
Do
W = Getadc(7)
If W > 0 And W < 50 Then : Led_port = &B10100111 : End If
If W > B(1) And W < C(1) Then : Led_port = &B11111001 : End If
If W > B(2) And W < C(2) Then : Led_port = &B11000000 : End If
If W > B(3) And W < C(3) Then : Led_port = &B10100100 : End If
If W > B(4) And W < C(4) Then : Led_port = &B10110000 : End If
If W > B(5) And W < C(5) Then : Led_port = &B10011001 : End If
If W > B(6) And W < C(6) Then : Led_port = &B10010010 : End If
If W > B(7) And W < C(7) Then : Led_port = &B10000010 : End If
Loop
Irgend jemand ne Idee woran es liegt ? Ich habe im Datenblatt des Mega8 nichts gefunden wo z.B. steht das der ADC erst bei Änderung der anliegenden Spannung was macht.
Wenn ich allerdings anstelle von W=GETADC(7) W=200 angebe funktioniert es sofort. Sobald sich der Wert einmal geändert hat funktioniert alles bestens, bis man den µC wieder abschaltet oder resettet.
ich habe da ein Problem mit dem ADC.
Es liegt am ADC7 eine Spannung an von 3V (z.B.), zeitgleich mit dem einschalten des µC. Diese Spannung lasse ich mir über LEDs anzeigen.
Das Problem ist, das die anliegende Spannung erst dann erkannt wird wenn eine Änderung dieser Eintritt, vorher nicht.
Ich habe schon viel probiert, z.B. Stop ADC und direkt Start ADC eingefügt, um kurz die Spannung vom ADC zu entfernen.
Auch der Betriebsmodus Single oder Free brachte keine Änderung.
Hier mal das Programm:
$regfile = "m8def.dat"
$framesize = 32
$swstack = 64
$hwstack = 64
$crystal = 1000000
Dim I As Byte , W As Word , B(7) As Word , C(7) As Word , A As Byte
Config Portd = Output
Config Pind.7 = Input
Config Portb.1 = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8
Compare1a = 1
Config Timer0 = Timer , Prescale = 64
Enable Timer0
Enable Interrupts
On Timer0 Zaehlen
Do
W = Getadc(7)
If W > 0 And W < 50 Then : Led_port = &B10100111 : End If
If W > B(1) And W < C(1) Then : Led_port = &B11111001 : End If
If W > B(2) And W < C(2) Then : Led_port = &B11000000 : End If
If W > B(3) And W < C(3) Then : Led_port = &B10100100 : End If
If W > B(4) And W < C(4) Then : Led_port = &B10110000 : End If
If W > B(5) And W < C(5) Then : Led_port = &B10011001 : End If
If W > B(6) And W < C(6) Then : Led_port = &B10010010 : End If
If W > B(7) And W < C(7) Then : Led_port = &B10000010 : End If
Loop
Irgend jemand ne Idee woran es liegt ? Ich habe im Datenblatt des Mega8 nichts gefunden wo z.B. steht das der ADC erst bei Änderung der anliegenden Spannung was macht.
Wenn ich allerdings anstelle von W=GETADC(7) W=200 angebe funktioniert es sofort. Sobald sich der Wert einmal geändert hat funktioniert alles bestens, bis man den µC wieder abschaltet oder resettet.