Forum: Mikrocontroller und Digitale Elektronik Servo , ADC und Bascom


von ManfredSteiner (Gast)


Lesenswert?

Hallo

Ich habe ein Problem mit der Servo-Ansteuerung mit der BAscom-Routine 
und gleichzeitger ADC auswertung.
Ich habe 2 Servos an den Atmega8 (Pollin Board) angeschlossen.
Atmega läuft per exteren 8 Mhz Quarz.
Ich kann die Servos mit der BAscom Routine problemlos ansteuern.

Probleme gibt es nur wenn ich gleichzeitig versuche 2 ADC Werte 
einzulesen.

Getadc(0)
Getadc(1)

Der erste Wert , steuert praktisch das Servo.( Getadc(0) )
Die Werte werden umgerechnet damit der Winkel der Potis welche am ADC 
Eingang hängen entsprechen.

Im Prinzip nichts anderes als Messe die Spannung und erzeuge einen Wert 
für das Servo.

Das ganze funktioniert solange super bis ich an den 2ten Eingan auch ein 
Poti hänge.Ich also einen 2 Wert per GetADC(1) einlese.
Dan fängt das Servo je nach Stellung des 2ten Potis an zu zucken bzw 
läst sich nicht mehr steuern über den ersten Poti GetADC(0)


Ich hoffe man kann das was ich schreibe nachvolziehen ?

Vieleicht kennt das Problem jemand oder hat einen Rat/Tip für mich


Schönen Abend noch ......

Hier der Code:


$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 100
$swstack = 100
$framesize = 100

Config Adc = Free , Prescaler = Auto , Reference = Avcc
Dim Messergebnis As Word
Dim Messergebnis2 As Word

Config Servos = 2 , Servo1 = Portd.1 , Servo2 = Portd.2 , Reload = 10

Dim Volt As Single
Dim Volt2 As Single
Dim Volt12 As Single
Dim Volt22 As Single
Dim Teiler As Single
Config Portd = Output
Teiler = 10
Enable Interrupts

Do


Messergebnis = Getadc(0)
Volt = Messergebnis / Teiler
Volt = Volt + 50
Volt2 = Round(volt)

Messergebnis2 = Getadc(1)
Volt12 = Messergebnis2 / Teiler
Volt12 = Volt12 + 50
Volt22 = Round(volt12)







Servo(1) = Volt2
Servo(2) = Volt22






Loop

von Klaus D. (kolisson)


Lesenswert?

Hallo,

> Das ganze funktioniert solange super bis ich an den 2ten Eingan auch ein
> Poti hänge.Ich also einen 2 Wert per GetADC(1) einlese.

Was denn nun von beiden ?
Poti anschliessen oder Wert einlesen ?

Die ADC Eingänge sollten sich nicht beeinflussen!
evt. das "Config Adc = Free"  mal auf "single " ändern.
Ich sehe hier denn Sinn für "free" nicht.

Vielleicht solltest Du mal nen Schaltplan anhängen.

Gruss Klaus

von ManfredSteiner (Gast)


Lesenswert?

Hallo

Im Prinzip beides ....

Der Poti ist so angeschlossen , ich lese mit Getadc(0) bzw (1) nur die 
Spannung aus ! Je nach Stellung des Potis soll sich das Servo dan 
bewegen.
Das klappt auch ganz gut das Servo stellt sich syncron mit dem Poti.
Nur eben sobald ich einen zweiten Poti an den nechsten Port anschliese 
und ihn dan wie oben im Code benutze kommt es zu den o.g Problemen

http://www.mikrocontroller.net/wikifiles/7/75/Tut_ADC_01.gif

von Stefan (Gast)


Lesenswert?

kann man Servo()= ..   einen Single-Wert zuweisen??

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:
> kann man Servo()= ..   einen Single-Wert zuweisen??

Das wird schon gehen, auch wenn die ganze single-Variablen in erster 
Instanz schon mal Unsinn sind.

Aber ich denke auch, dass hier der Free-Running Mode des ADC die 
Probleme verursacht. Den ADC auf single umstellen, so dass sicher 
gestellt ist, dass ein GetADC(1) dann auch tatsächlich vom Kanal 1 
seinen Wert liest.

von Klaus D. (kolisson)


Lesenswert?

.. Du beantwortest meine Frage nicht:

was passiert, wenn Du das zweite poti anschliesst,
dieses aber nicht abfragst und trotzdem daran drehst ?

Ansonsten.. wie von Karl Heinz bestätigt:
ADC = Single anstelle von Free (hat übrigens nichts
mit deinen Single-Variablen zu tun.

Bei Single Variablen rechnest du mit Kommastellen.
Weder der ADC noch der Servo benötigen Kommastellen.
Da müsste man dann später nochmal drüber nachdenken.

Zunächst gest nun bitte der gegenseitigen Beeinflussung auf den grund.

Gruss Klaus

von Hannes L. (hannes)


Lesenswert?


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.