Config Servos = 1 , Servo1 = Portb.0 , Reload = 10

Neuuser

Mitglied
11. Aug. 2008
465
0
16
Sprachen
Hallo Leute,
ich wollte über mein Programm noch zwei Servos ansteuern und dachte das mache ich zu letzt wird ja wohl kein Problem sein, aber wen ich
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
einfüge stockt das komplette Programm, beim Ablauf, selbst die Sekunden der Uhr lässt einige zahlen aus, woran kann das liegen.:confused:


Gruß Neuuser M.
 
Hi, Neuuser.

Ich bin zwar niemand der etwas von Bascom versteht, aber in der Bascom-Hilfe steht dass Reload der Wert für die Periodendauer in uSekunden ist in der die Routine für das Servo-Handling aufgerufen wird.(oder so ähnlich)

'The reload value specifies the interval of the timer in uS

Wenn du da 10 hinschreibst kann das dem AVR schon fast zu viel werden. Experimentier mal mit höheren Werten. Z.b. 100, mit einer 100uS Genauigkeit löst der Servo immerhin noch in 10 Schritten von einem zum nächsten Anschlag auf.
 
Hallo Simon,
ja es hat die Belastung etwas gelindert, aber ich habe bemerkt das auch mit dem Programm was ich in das andere integrieren wollte, was nicht stimmt.
Ich habe nun zwei voll identisch gleiche Programme, aber das eine funktioniert und das andere nicht, langsam wird es komisch :pleasantry:
So etwas hatte ich auch noch nicht. :fie:

Gruß Neuuser Micha
 
Hallo Simon,
leider funktioniert es mit der Einstellung Reload = 50 oder 100 nicht, es funktioniert nur einmal nach dem brennen, danach tuckert er nur wie ein Trecker.
Und immernoch hängt und stolpert die Sekundenanzeige etwas, kann doch nicht sein das diese Config Servo Anweisung das komplette Programm so dermaßen ausbremst :mad:

Gruß Neuuser Micha
 
Hallo Micha.

Gut, dann ist der AVR wahrscheinlcih selbst ohne die Timer Interrupts für die Servos schon ziemlich ausgelastet.
Es ist sowieso ungeschickt, wie in den Bascom-eigenen Routinen, 100000 Interrupts in der Sekunde auszulösen, nur um einen PIN 100 mal in der Sekunde auf HIGH oder LOW zu setzen. Daher würde ich dir raten einen freien TimerCounter so einzustellen dass du alle 20ms einen 1 bis 2ms breiten Puls erzeugen kannst.
 
Hi Simon,

Daher würde ich dir raten einen freien TimerCounter so einzustellen dass du alle 20ms einen 1 bis 2ms breiten Puls erzeugen kannst.
ui wie soll den das gehen, weiß ich garnicht wie ich das anfangen soll.
oder würde es auch funktionieren wen ich den Mega in der Mhz hoch setze, jetzt habe ich ihn auf 8 könnte man damit was erreichen wen er schneller wird.
Aber ich weiß nicht mal ob man ihn höher als 8 bekommt.

Gruß Neuuser
Micha
 
Hi Micha.
ui wie soll den das gehen, weiß ich garnicht wie ich das anfangen soll.
Wie das in Bascom hinhaut weiß ich auch nicht, das könnte dir Cassio, Knickohr oder Markus viel besser erklären.
oder würde es auch funktionieren wen ich den Mega in der Mhz hoch setze, jetzt habe ich ihn auf 8 könnte man damit was erreichen wen er schneller wird.
Aber ich weiß nicht mal ob man ihn höher als 8 bekommt.
Keine Ahnung.
 
Hallo,

oder würde es auch funktionieren wen ich den Mega in der Mhz hoch setze, jetzt habe ich ihn auf 8 könnte man damit was erreichen wen er schneller wird.
Aber ich weiß nicht mal ob man ihn höher als 8 bekommt.
Stromsparversionen (L-Versionen) können normalerweise nur 8MHz. Der interne
Takt (RC-Oszillator) läuft eigentlich auch nur bis 8MHz. Die "normalen" AVRs
können bis 16MHz und manche AVRs können bis 20MHz (mgea644, 48, 88, 168)

Gruß
Dino
 
Hallo Dino,
wie bekomme ich den 168 intern auf 16 Mhz gestellt, im Datenblatt ist davon nichts zu finden.

Gruß Neuuser
Micha
 
Hi Michael,

wie bekomme ich den 168 intern auf 16 Mhz gestellt, im Datenblatt ist davon nichts zu finden.
garnicht . :(

... internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmed,
resulting in 1.0MHz system clock.


Entweder mit externem 16MHz Quarz/Keramik-Resonator oder garnicht.
Interner 16MHz-Oszillator ist leider nicht.

Gruß
Dino
 
Hi Dino,
ja das konnte ich mir schon bald denken, schade.

Nun ja im Programm sind noch andere Faktoren die dazu beitragen das das Programm ausbremst, ganz besonders die hin und herschaltung der Relais die durch eine 200 ms wartezeit stoppen, daher sind es dann schon 800ms und das macht sich bemerkbar.
Nur leider bekomme ich sie nicht so einfach durch eine GOO Sub Anweisung aus dem Programm, dann würden sie ja nicht mehr bremsen, aber irgendwie ! :eek:

Gruß Neuuser
Micha
 
.....das könnte dir Cassio, Knickohr oder Markus viel besser erklären.

Hallo Neuuser, hallo Nomis!

Ich hatte den Thread schon gelesen und latent verfolgt. ;)

Leider kann ich da Neuuser auch nicht helfen!
Ich habe zwar mal mit einem Graupner-Servo etwas experimentiert, bin aber über diese Phase nicht hinaus gekommen.

Im Internet gibt es einige Themen zur BASCOM-Programmierung für die Servos. Scheint aber nicht so einfach zu sein.

Ich war bei kleinen Test auch nur bedingt zufrieden, weil mir das Servo zu "abgehackt" gefahren ist und die Ermittlung der Werte für die Endanschläge und die Mitte zu nervig waren.

Da ich aber den Befehl zu Servos nur mal testen wollte und keinen wirklichen Verwendungsuweck dafür hatte, habe ich das Ganze dann auch nicht weiter entwickelt bzw. verbessert.

Sorry, Neuuser! Vielleicht kann ich ja dann nach deinen Erfahrungen mit den Servos mal etwas von dir lernen. :)

Gruß,
Cassio
 
....ganz besonders die hin und herschaltung der Relais die durch eine 200 ms wartezeit stoppen, daher sind es dann schon 800ms und das macht sich bemerkbar.

Hi Neuuser!

Hast du das Programm irgendwo eingestellt? Habe nichts gefunden! :hmmmm:

Wieso musst du denn immer eine 200ms Pause machen?
Kannst du das nicht auf eine andere Art und Weise lösen, als das ganze Programm auszubremsen? :hmmmm:

Gruß,
Cassio
 
Hast du das Programm irgendwo eingestellt? Habe nichts gefunden! :hmmmm:
Genau Micha.

Erzähle er uns welche Timer in Verwendung er hat und wofür er versucht sie einzusetzen auch von Belang sein kann. Nur dann Prognose stellen die Profis können.

Den Code unerfahrene Programmierer oft unzureichent kommentieren tun. Deshalb oft nicht wichtig, den gesamten Quellcode ins Netz zu stellen, ist. Als Padawan nicht zuviel Anleitung er ohnehin bekommen soll.

Eins mit dem Controller er werden muss, doch sehe vor er sich. Lasse nicht auf die PIC -Seite der Mikrocontroller führen er sich.
 
Noch ne kleine OffTopic Zeile zum Schluß ...

Eins mit dem Controller du werden musst, doch sehe vor er sich. Lasse nicht auf die PIC -Seite der Mikrocontroller führen er sich.
Die PIC-Lords, immer zu zweit sie sind. Aber wer der Meister und wer der
Schüler war ich nicht sagen kann. :)

Wir nun besser sind still. Dirk ein Machtwort sonst sprechen wird ;)

Gruß
Dino

... könnte man im OffTopic-Bereich ja ne Geschichte draus entwickeln ...
 
Hi ihr,

Wir nun besser sind still. Dirk ein Machtwort sonst sprechen wird

warum hört sich gut an und lässt sich nicht schlecht lesen :D

so nun, das Programm ist immer noch mein Pool-programm, was auch schon mit der ersten Version seit zwei Wochen draußen sein dienst macht, aber es soll ja immer mehr werden wofür auch die Platine schon ausgelegt ist.

Nun habe ich ein Handy mit integriert damit ich ,wie das Wetter so ist, von der ferne umstellen kann, per Anruf, bis jetzt sind meine Test gut verlaufen aber beim umschalten der Relais muss eine warte zeit von mindestens 200ms sein sonst schaltet er wieder zurück.
Die Servo werden damit auch geschaltet, zum umstellen der Ventile.
Ich dachte schon das ich den Timer 1 wieder zum zählen verwende, so das er für die zeit dazwischen unterbricht.

Gruß Neuuser
Micha
 

Anhänge

  • Pump-steuerung.bas
    15,1 KB · Aufrufe: 9
Also wie gesagt, von Bascom versteh ich nichts. Aber so wie ich das sehe verwendest du nur den TimerCounter 1, da ist der TimerCounter 0 ja noch frei, mit dem kannst du Etwas anfangen.
Das du da im Programm 200ms wartest ist egal weil alles in Interrupts abläuft.

Du stellst deinen TCNT0 so ein dass er einmal bei Overflow und einmal beim Compare-Match mit dem CompareRegister einen Interrupt wirft.
Weiters wär bei 8Mhz ein Prescaler von 64 angebracht weil man damit über das Output-Compare-Register Zeiten bis 2,048ms abdecken kann.(Es ist spät kann mich auch verrechnet haben)
Wenn du nun in das Output-Compare-Register Werte zwischen 128 und 255 reinschreibst betragen die zeiten zwischen Overflow-Interrupt und Output-Compare-Interrupt zwischen 1,024 und 2,048ms.
Beinahe genau die Zeiten die wir brauchen.

Du brauchst also abgesehen vom Initialisieren nur in den Output-Compare_Interrupts den Servopin auf LOW zu setzen, in jedem 10ten(zwischen den Pulsen sollten 20ms vergehen) Overflow-Interrupt den Servopin auf High setzen und im Hauptprogramm den Servoausschlag von 0 bis 100% in das OCR-Register in Zahlen von 128 bis 255 Reinschreiben.

Ich weiß aber gerade nicht ob der AVR bei einem OCR-Wert von 255 noch einen OC-Interrupt auslöst, also nimm sicherheitshalber 254 oder so.

Außerdem, den Servo beim testen immer griffbereit halten. Nicht dass er sich selbst zerstört.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)