Forum: Mikrocontroller und Digitale Elektronik Problem mit ADC in Bascom


von Daniel S. (thenogger)


Lesenswert?

Ich habe jetzt angefangen mich mit dem ADC vom Mega8 vertraut zu machen 
und wollte einen simplen Code mit dem man ledeglich den Wert des ADC in 
Putty anschauen kann. Ich habe dazu einige Tutorials angeschaut und 
disen Code bei RN-Wissen gefunden:


' Die gemessene Spannung wird in der Variablen W gespeichert.
' Channel ist der Pin, an dem die Spannung gemessen werden soll.

$baud = 9600
$crystal = 1000000
$regfile "m32def.dat"
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte
Channel = 0
Do
  W = Getadc(channel)
  Print "ADC-Pin " ; Channel ; ": Wert " ; W
  Incr Channel
  If Channel > 7 Then Channel = 0
  Waitms 800
Loop
End

ich habe diesen dann zu abgeändert um ihn für meine zwecke zu nutzen :

$baud = 9600
$crystal = 8000000
$regfile "m8def.dat"
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte
Channel = 0
Do
  W = Getadc(channel)
  Print "ADC-Pin " ; Channel ; ": Wert " ; W
  Incr Channel
  If Channel > 7 Then Channel = 0
  Waitms 800
Loop
End

Ich habe den Code auf meinen Mega 8 geladen und einen Poti mit 10KO an 
PC0, GND und Avcc angeschlossen.
Wenn ich nun Putty öffne wird mir nichts angezeigt, weiss aber nicht 
wieso ???

Hoffe ihr könnt mir helfen
mfd daniel

von Karl H. (kbuchegg)


Lesenswert?

Hast du denn die UART schon mal abseits vom ADC in Betrieb genommen?

von Daniel S. (thenogger)


Lesenswert?

Ja und es hat funktioniert. Ich habe nur Probleme mit dem ADC.

von Karl H. (kbuchegg)


Lesenswert?

Daniel S. schrieb:
> Ja und es hat funktioniert.

Und was hast du dort anders gemacht

> Ich habe nur Probleme mit dem ADC.

Nö, hast du nicht.
Der Aufruf von GetADC liefert eine Zahl.
Was immer diese Zahl auch ist, sie verhindert nicht, dass der UART den 
Text "ADC-PIN .... " etc ausgibt.

Wenn du Probleme mit dem ADC hast, dann würde dort meinetwegen stehen, 
dass der ADC Pin 0 einen Wert von 8257 geliefert hat, was nicht sein 
kann. Oder dass der Wert auf Dauer 0 ist, wenn du am Poti drehst.

Das wären Indizien dafür, dass du Probleme mit dem ADC hast.

Wenn aber gar nichts am Terminal erscheint, dann hast du ein Problem mit 
der UART.


Geh halt mal schrittweise vor.
Schreib ein neues Programm, welches erst mal nur Text und eine Variable 
ausgibt. Die Variable setzt du auf 0.
Wenn dieser Ausgabe klappt, dann nimmst du den ADC mit dazu und lässt 
dir vom ADC den gelesenen Wert in die Variable schreiben.

von Matthias S. (mat-sche)


Lesenswert?

Hi,

wie hast Du die Eingänge für den Mega und ADC beschalten?
MAT

von Karl H. (kbuchegg)


Lesenswert?

> Geh halt mal schrittweise vor.
> Schreib ein neues Programm, welches erst mal nur Text und eine
> Variable ausgibt. Die Variable setzt du auf 0.

1
$crystal = 8000000
2
$regfile "m8def.dat"
3
$baud = 9600
4
5
Dim W As Word
6
7
W = 0
8
Print "Starting"
9
10
Do
11
  Print "Wert " ; W
12
  Waitms 800
13
Loop
14
End


klappt oder klappt nicht?

Wenn klappt, dann

> Wenn dieser Ausgabe klappt, dann nimmst du den ADC mit dazu
> und lässt dir vom ADC den gelesenen Wert in die Variable schreiben.
1
$crystal = 8000000
2
$regfile "m8def.dat"
3
$baud = 9600
4
5
Config Adc = Single , Prescaler = Auto
6
Dim W As Word
7
8
W = 0
9
Print "Starting"
10
11
Do
12
  W = getadc( 0 )
13
  Print "Wert " ; W
14
  Waitms 800
15
Loop
16
End

klappt oder klappt nicht?

von Daniel S. (thenogger)


Lesenswert?

@ Kerl Heinz
Wenn ich mir das überlege könnte es doch gut sein dass es am UART liegt 
da der erste Code nicht geht. Putty müsste eigentlich auch richtig 
eingestellt sein ... Wie kann ich das überprüfen / den UART erstzen ??? 
Ich benutze das Eavulations-Board von Pollin.
Ich habe aber auch schon versucht es nicht auszugeben und direkt als 
wert für  einen PWM zu nutzen. Das hat auch nicht geklappt.

von Karl H. (kbuchegg)


Lesenswert?

Daniel S. schrieb:
> @ Kerl Heinz
> Wenn ich mir das überlege könnte es doch gut sein dass es am UART liegt
> da der erste Code nicht geht. Putty müsste eigentlich auch richtig
> eingestellt sein ... Wie kann ich das überprüfen / den UART erstzen ???

Du sagtest doch, du hättest den UART schon mal mit putty in Betrieb 
gehabt. Und genau deshalb hab ich gefragt, was du damals anders gemacht 
hast :-)

von MWS (Gast)


Lesenswert?

Ohne Stacks und Frame im Code werden die Vorgaben aus den 
IDE-Einstellungen verwendet, welche zu niedrig sein können. Also erst 
mal passende Werte dafür in den Code rein, denn sowas kann die komplette 
Funktion verhindern.

von Daniel S. (thenogger)


Lesenswert?

@ oke ...
@ MWS Welche Einstellungen würdest du mir empfehlen ?

von MWS (Gast)


Lesenswert?

So in etwa:
1
$hwstack = 32
2
$swstack = 32
3
$framesize = 24
Oder einfach mal in den Beispielen der Hilfe dazu nachsehen.

Andere auch gern genommene Fehler:
- Prozessortakt anders als $crystal-Angabe
- kein Quarz, dann sollten aber wenigstens unsinnige Zeichen ausgegeben 
werden
- Einstellungen in der Systemsteuerung zum Com-Port falsch / anders als 
eingestellte Baudrate

Dann gäb's noch:
- Pegelwandler für RS232 vergessen oder kaputt
- falsch herum angeschlossen, µC-TXD-Ausgang auf MAX232-TXD und 
umgekehrt
- gibt sicher noch mehr...

von Daniel S. (thenogger)


Lesenswert?

Ok danke erstmal :-) Habe die Einstellungen im Geräte-Manager richtig 
gestellt und jetzt bekomme ich wirre nicht deutsche Buchstaben . Also 
fehlt ein Quar, oder ? Aber was für eine und ich dachte auf dem 
Evaluarionsboard von Pollin wäre einer ? (entschuldigt die 
Rechtschreibung, bin gerade nur mit dem Hand online)

von MWS (Gast)


Lesenswert?

Daniel S. schrieb:
> jetzt bekomme ich wirre nicht deutsche Buchstaben .

Tatsächlichen Takt, der per Fuses vorgegeben wird, mit dem $crystal-Wert 
vergleichen, Baudrate kleiner machen, je kleiner die ist, desto geringer 
macht sich der Fehler des R/C-Oszillators bemerkbar.

> ich dachte auf dem
> Evaluarionsboard von Pollin wäre einer ? (entschuldigt die

Wenn Du das glaubst, solltest Du die Anleitung durchsehen, um sicher zu 
sein.

Wenn ein Quarz angeschlossen ist, dann müssen die Fuses auch auf 
externem Quarz gestellt werden. Nicht auf externen Oszillator stellen, 
sonst ist der Käfer erst mal tot.

von Daniel S. (thenogger)


Lesenswert?

Danke erstmal. :-)
Ich werde einmal nach den Frequenzen usw. schauen.
Ich gebe Bescheid wenn ich den Fehler gefunden habe.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.