mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servo , ADC und Bascom


Autor: ManfredSteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ManfredSteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann man Servo()= ..   einen Single-Wert zuweisen??

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.