PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hauptprogramm schleife fängt woanders an ?



Tredory
21.02.2009, 18:02
Hi, ich bin nun auch endlich mal dazu gekommen mir ein Microcontrollerboard zu Kaufen (Pollin Atmel Evaluations Board V 2.0.1).
Hab bis jetzt erfolgreich ein paar Blinklichter durch ändern des Beispielprogramms das man bei pollin bekommt hinbekommen.
Nun hab ich ein Paar Probleme Eins nach dem anderen:

1.

Ich hab gerade mal ein Servo angehängt, und versuche nun einfach mal sinnlos ein wenig hin und herzufahren ;) hab dazu mal ein kleines Programm erstellt:



$regfile = "m32def.dat" 'definieren des verwendeten Chips

$crystal = 16000000 'definieren des verwendeten externen Quarz (16MHz)


Ddrd = &B11100000 'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang)
Portd = &B00000000 'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb = Output
Declare Sub Beep(byval Verz As Integer , Byval Anz As Integer)
Dim I As Integer

Enable Interrupts

Call Beep(1 , 200)
Waitms 150
Call Beep(1 , 30)
Waitms 150
Call Beep(1 , 30)
Waitms 150
Call Beep(1 , 30)
Waitms 150
Call Beep(1 , 200)
Waitms 1000


Do 'Anfang der Schleife

Goto Servolauf
Waitms 100

Loop 'zum Anfang der Schleife



Sub Beep(byval Verz As Integer , Byval Anz As Integer)

For I = 0 To Anz
Portd.7 = 1
Waitms Verz
Portd.7 = 0
Waitms Verz
Next I

End Sub

Servolauf:

Portd.5 = 1

For I = 50 To 150
Servo(1) = I
Waitms 2
Next I

Portd.5 = 0
Portd.6 = 1

For I = 150 To 50 Step -1
Servo(1) = I
Waitms 2
Next I

Portd.6 = 0

Servo(1) = 50

Return


Was mir dabei jetzt auffällt, erstens ich habe jetzt ein wenig rumprobiert um einigermaßen die anschläge des Servos zu erwischen, aber wie bekommt man da denn die genauen werte, 50 und 150 habe ich jetzt aus dem RN Artikel Servos übernommen, aber damit fährt er nicht genau auf die endpositionen. Links versucht er weiter zu fahren wie er kann, und rechts fährter nicht weit genug ?
Zweitens ich hab das Programm jetzt im controller, was ich nicht verstehe ist er piept bei jedem programmdurchlauf wieder, das sollte er eigendlich nur ein mal am anfang machen, normal sollte doch dann nurnoch das wiederhohlt werden was in der Do Loop schleife steht oder nicht ?
Das piepen steht vor der do loop schleife, warum wird das trotzdem bei jedem durchgang wieder ausgeführt ??



2.

Kennt sich jemand mit dem Pollin Board aus ? ich habe das gefühl das mit den tastern irgendwas faul ist, in der regel funktionieren die wohl aber ab und zu erkennt er einfach mal einen anderen taster oder reagiert garnicht auf den Tastendruck. Hab irgendwo im inet mal was gelesen, das das wohl irgendwie mit dem wiederstand und dem Kondensator an den tasten zusammenhängt, finde die seite allerdings nicht mehr. Schaltplan ist in der PDF zum Board
http://www.pollin.de/shop/downloads/D810022B.PDF
Fehler beim zusammenbauen kann ich mir nicht vorstellen, habe bereits mehrfach durchgemessen, und kann da nichts finden.

Hoffe auf ein paar Antworten ;)

vohopri
21.02.2009, 18:13
Hallo tredory,

mach aus servolauf eine sub und rufe sie mit call auf.

Ich kenne diese Programmiersprache nicht, nur 15 andere von Fortran bis Object Pascal. Seit 10 Jahren verwende ich kein goto mehr in höheren Programmiersprachen. Mit goto aus der Schleife springen ist im Allgemeinen ungesund.

grüsse,
Hannes

Dirk
21.02.2009, 18:26
mach aus servolauf eine sub und rufe sie mit call auf.
... oder laß sie so und ruf sie mit Gosub auf.

Gruß Dirk

Tredory
21.02.2009, 18:28
Das ging ja Fix, Danke dir, habe das nun geändert und den Servolauf inne Sub gepackt und siehe da er piept nurnoch einmal o.O.

Dann bleibt noch die Frage nach den min und max Werten für den Servo, und das Tasten Problem

Dirk
21.02.2009, 18:33
Zu den Servowerten:
Da gibts keinen Standard. Must du für dein Servo für beide Anschläge ausprobieren.

Zu den Tastern:
Kann ich nichts sagen.

Gruß Dirk

vohopri
21.02.2009, 19:32
Hallo nochmals,

ich bin mit ziemlich sicher, dass es an den Servos liegt. Die sind nicht kalibriert. Man trimmt meist am Gestänge und an der Anlage im Modellbau. Zur Kontrolle vertausche mal die Servos an den Anschlüssen. Dann siehst du, obs am Programm oder an den Servos liegt.

grüsse,
Hannes

Tredory
21.02.2009, 21:12
Hmm, Servos kalibrieren ? wie geht das ?es sind ein paar billig servos für 4,90€ von conrad ;)
Was für Anschlüsse tauschen ? es gibt doch nur vcc, gnd, und die signal leitung, da kann ich doch keine von tauschen ?

Dirk
21.02.2009, 21:26
Servos kalibrieren
In deinem Fall der Werte für die Bascom-Servofunktion gibt es nichts zu kalibrieren. Du must den unteren und oberen Wert des Servo-Drehbereichs einfach so einstellen, dass das Servo nicht am Anschlag "brummt", d.h. der Stellbereich gut eingestellt ist.
Wenn es am linken Anschlag Probleme gibt, erhöht man einfach den unteren Grenzwert (z.B. auf 55 oder 60). "Brummt" es am rechten Anschlag, wird der obere Wert verringert (auf 145, 140 ...).
Wenn der Anschlag offenbar nicht erreicht wird, muss man die Werte umgekehrt ändern.


Was für Anschlüsse tauschen
Bloß nicht, da geht das Servo und ggf. der uC kaputt.

Gruß Dirk

vohopri
21.02.2009, 22:43
Hallo,
ich sagte nicht Anschlüsse tauschen, sondern die Servos vertauschen. Ich dachte du hättest 2 Servos dran hängen.

Kalibrieren kannst du die nicht. Ich hab doch geschrieben, dass man üblicherweise am Gestänge und an der Fernsteueranlage trimmt.

Du musst einfach die Werte ermitteln, mit denen dein Servo zurechtkommt. Entweder programmierst du die fix ein, oder du schaffst softwaremässig eine Kalibriermöglichkeit. Im letzteren Fall kannst du das Servo austauschen, ohne die Software verändern zu müssen.

Wenn eine eventuell vorgefertigte Routine die Servos nicht gut ansteuert muss man nötigenfalls, eine bessere Software selbst schreiben.

grüsse,
Hannes