PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC gibt immer nur einen Wert aus?



Lord_Vader
07.03.2010, 12:40
Hi,

habe vor den ADC (channel 0) vom AtMega8 für einen shocksensor zu benutzen.

Ich hab folgenden code zum testen geschrieben:


$regfile = "m8def.dat"

$framesize = 32
$swstack = 32
$hwstack = 128

$crystal = 1000000

Config Adc = Single , Prescaler = 128

Dim Wert As Word

' --- IO´s bestimmen ---

Config Pind.6 = Output

Led Alias Portd.6

Led = 1

Do

Wert = Getadc(0)
If Wert < 100 Then Led = 0

Loop


Egal ob ich wert <100 oder <1000 mache die LED geht nicht aus. Am Pin messe ich 0,0V (billiges MM). Der shocksensor gibt auch im leerlauf nur einige mV welligkeit aus. Selbst ohne shocksensor geht der wert nie auf 0 bzw 0V also iwas um die 0-100...

Was mache ich falsch?

MfG Vader

Kampi
07.03.2010, 12:59
Ich vermute mal das das daran liegt das du vor dem Do Befehl die Led auf 1 gesetzt hast. Mach mal eine if- Else Schleife also sagen:

If wert=100 then LED =1 Else LED=0

vielleicht hilft das ja bereits. Ansonsten wenn das nicht funktioniert sollte stell mal einen Schaltplan von der ganzen Schaltung rein. Hab da noch ne andere Lösung im Kopf, aber muss mich vorher halt noch vergewissern das es so sein könnte......

Lord_Vader
07.03.2010, 13:03
Nein das hilft nicht.





Wert = Getadc(0)
Waitms 100
If Getadc(0) <> Wert Then Led = 1 : Waitms 1000 : Led = 0




Der wert ändert sich nichtmal...

Edit: Ausserdem muss die LED auf 1 gesetzt sein. Wenn der wert unter 100 geht soll die LED ausgehn...

radbruch
07.03.2010, 13:05
Hallo

Ich würde sagen, "Start Adc" fehlt nach dem Config. Schau doch mal in die Bascom-Hilfe unter Config Adc.

Gruß

mic

Lord_Vader
07.03.2010, 13:06
Start ADC ist nicht nötig und mit funktioniert es auch nicht

Kampi
07.03.2010, 13:12
:o gar nicht gesehn das der Start Befehl fehlt :/. Und setz mal deinen Prescaler auf Auto ist denk ich mal besser. Und Start Adc ist sehr wohl nötig. Bisher hast du den adc ja nur konfiguriert aber du musst dem Controller noch sagen das er den anschalten soll.

Besserwessi
07.03.2010, 13:13
Der Prescaler ist etwas hoch, das gibt es auch die Option Auto, dann sollte es stimmen. Sonst ein Prescaler von 8 oder 16. Die Ursache für das eigentliche Problem wird das vermutlich aber nicht sein, ich habs aber noch nicht Probiert den AD so langsam laufen zu lassen.

Man sollte auch noch die Ref. Spannung definieren. Bei der eher kleinen Signalspannung vermutlich die interne Referenz.

radbruch
07.03.2010, 14:17
Config Portd.6 = Output ?

Lord_Vader
07.03.2010, 14:51
PortD.6 ist meine LED.

Ja mit der internen referenz scheint es zu funktionieren. Mhh vllt ist auf dem entwicklerboard da etwas nicht richtig.

Besserwessi
07.03.2010, 19:08
Das Board kann schon OK sein. Es ist nur gut möglich, dass man, wenn man bei der Ref. nichts angibt, die Auswahl externe Ref. kriegt. Wenn dann an Aref nur ein Kondensator dran ist, hat man keine definierte Spannung und ggf. eine zu kleine Spannung. Wenn es mit der internen Ref. geht, ist es also ein Softwarefehler.

Lord_Vader
07.03.2010, 20:37
k danke für die Hilfe. Die Interne Referenz reicht ja für die anwendung. Bzw ist ja sogar feiner als die 5V weil ich ja maximal bis 100mV messen will.

MfG Vader