• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Servo zuckt nur - Probleme mit Ansteuerung über BASCOM

Hucky3000

Geocacher
So. ich habe das ganze jetzt mal so gemacht wie auf dem Link von Windi.
Der Motor zuckt leider nur. Lass ich eine Taste gedrückt wird das zucken schächer , drücke ich die andere Taste wird das Zucken immer stärker, bis zum Stillstand. Mit zucken meine ich, dass der Servo erst links und sofort wieder rechts drehen will.
Habe schon mit den Werten etwas herumgespielt. Dadurch wird das zucken nur noch stärker, oder schwächer, oder das Ding sagt garnichts mehr.
Ist das Teil vielleicht kaputt ? :schockiert:
Oder muss der Takt zwingend auf
$crystal = 3686411
stehen ?
Ist doch nicht sooo ein gravierender Unterschied zu 4000000 ?
Wenn ja WAS muss ich WO bei den Fusebits von dem Tiny 2313 einstellen ?
Kenne mich da nicht mit aus - soll nicht abrauchen.

Hucky

Code:
$regfile = "attiny2313.dat"
$crystal = 4000000
$framesize = 32
$swstack = 10
$hwstack = 40

Config Portb = &B00000000                                   'PortB komplett auf Eingang
Config Portd = &B01111000                                   'PortD 0-2 auf Eingang - Rest auf Ausgang - PD7 nicht vorhanden
Portb = &B11111111                                          'PortB komplett Pull Up ein
Portd = &B00000111                                          'PortD 0-2 Pull Up ein

Config Servos = 1 , Servo1 = Portd.5 , Reload = 10
Enable Interrupts

Dim Winkel As Byte
' Etwa auf Mittelstellung setzen
Winkel = 70
Servo(1) = Winkel

' Hauptprogrammschleife
Do
If Pinb.1 = 0 Then
  ' ist Schalter an Pin 2 Port D gedrückt
  If Winkel > 30 Then Decr Winkel
Elseif Pinb.0 = 0 Then
' ist Schalter an Pin 3 Port D gedrückt
  If Winkel < 110 Then Incr Winkel
End If
Servo(1) = Winkel
Waitms 10
Loop

End
 
OP
Hucky3000

Hucky3000

Geocacher
Hi !
Oszilloskop habe ich nicht.
Habe noch was im Netz gefunden. Hätte ich jetzt einfach mal ähnlich gemacht, bevor ich mit dem Servo-Befehl in BASCOM noch verrückt werde.
Das ganze probier ich die Tage mal aus...

Dim I As Byte

Gosub Servo rechts
Waitms 1000
Gosub Servo links
end

Servo rechts:

For I = 1 to 18
PortB.1 = 0
Waitms 10
PortB.1 = 1
Waitms 1
Next I
PortB.1 = 1
Return

Servo links:

For I = 1 to 15
PortB.1 = 1
Waitms 10
Portb.1 = 0
Waitms 10
Next I
Portb.1 = 1
Return


Hucky
 
OP
Hucky3000

Hucky3000

Geocacher
Funktioniert nicht :???:

Zuckt nur.

Muss wohl doch nen EXAKTES Timing sein.
Werde nochmal versuchen ein Beispiel mit Interrupt auseinanderzupflücken und auf 4Mhz umzurechnen.

Ansonsten: :hilfe:

Hätte ich mal nen einfach Türöffner genommen :kopfwand:

Hucky
 

stonewood

Geowizard
Hucky3000 schrieb:
Oder muss der Takt zwingend auf
$crystal = 3686411
stehen ?
Ist doch nicht sooo ein gravierender Unterschied zu 4000000 ?
Ja, das kann schon sein. Hab zwar noch kein Servo hier, aber die wollen ein vernünftiges Timing.

Bascom rechnet bei waitms mit $crystal - ein 'waitms 1000' wartet also genau eine Sekunde wenn $crystal mit der aktuellen Taktfrequenz übereinstimmt. Übersetzt das also in 'warte 4000000 Takte'. Und wenn das nicht paßt ist das eben keine Sekunde.

Also: Probier mal ein 'waitms 10000' und teste anhand eines Portpins mit LED ob das paßt.
 

Bussard

Geocacher
Hallo Hucky3000,
nicht verzweifeln, auch ohne Oszi und Frequenzmesser kannst du ein wenig Licht in die Sache bringen:
Probiere mal das begefügte Testprogramm (ohne Prüfung, ohne Garantie), bei dem ich mal die Interrupts usw. außen vor gelassen habe. Vor Allem kannst du sehen, ob der Tiny mit der vermuteten Frequenz läuft - was ja die Voraussetzung für alle zeitgesteuerten Funktionen ist. Also die LED muß 10x in 10 sek blinken, dann das Servo 5sek in ca. Mittelstellung stehen, dann je 5sek in den beiden Endstellungen.
Eins noch - erst ohne Servo die Zeit testen, wenn OK, dann Servo anschließen. Wenn es nicht 5sek still steht, sondern weiter zuckt, trenne mal die +5V ab (Masse und Puls lassen) und versorge das Servo aus einem separaten Akku/ Batterie.
__________________________________________________________________
Code:
$regfile = "attiny2313.dat"
$crystal = 4000000
$framesize = 32
$swstack = 10
$hwstack = 40

Config Portb = Output
Portb = &B00000011
'PINB.1 an LED Anode, Kathode an R ca. 220 OHM, R an 0V
'PINB.0 Servo-Impuls positiv, nominal 1.5ms, alle ca. 20ms wiederholt

Dim I As Byte
Dim Sweep As Byte
Dim Puls As Word


Do
Portb.0 = 0
'10x blinken als Kontrolle, ob der Takt wirklich der eingestellten
'Frequenz entspricht
'MUSS 10 Sekunden dauern, sonst die Fuses und Vorteiler kontrollieren

For I = 1 To 10
    Portb.1 = 1                                             'LED an
    Waitms 500                                              'für 1/2 sek
    Portb.1 = 0                                             'LED aus
    Waitms 500                                              'für 1/2 sek
Next I


Wait 1                                                      '1 sek Pause

'Servo auf Mittelstellung
Main:

For I = 1 To 250                                            'ca. 5 sec Mittelstellung
Portb.0 = 1                                                 'Servopuls ein für ca. 1.5ms
Waitus 1500
Portb.0 = 0
Waitms 19                                                   'ca. 50 Wiederholungen pro Sekunde
Next I

For I = 1 To 250                                            'ca. 5 sec Endstellung 1
Portb.0 = 1                                                 'Servopuls ein für ca. 1.1ms
Waitus 1100
Portb.0 = 0
Waitms 19                                                   'ca. 50 Wiederholungen pro Sekunde
Next I

For I = 1 To 250                                            'ca. 5 sec Endstellung 2
Portb.0 = 1                                                 'Servopuls ein für ca. 1.9ms
Waitus 1900
Portb.0 = 0
Waitms 19                                                   'ca. 50 Wiederholungen pro Sekunde
Next I

Goto Main

Loop                                                        'pro forma[/color]
 
OP
Hucky3000

Hucky3000

Geocacher
Hi !

Danke, dass du dich mit meinem Problem auseinandersetzt.
Die LED blinkt nur 3 mal in 10 Sekunden :(
Ich hatte auch schonmal in die Fusebits geguckt, da steht was von 8MHz.
Stelle ich Crystal auf 8000000 blinkt die LED noch weniger.
Dann kann das mit dem Servo wohl auch net funzen. :lachtot: Hatte schon mal mit Crystal 8000000 probiert und eine Interruptansteuerung mit 16Bit Timer "passend" umgerechnnet. Zuckte wieder nur.
Dachte schon der Servo wäre kaputt - habe mir gestern 3 bei Ebay gezogen :kopfwand:
Egal. Zumindest ein Projekt mit Servo steht noch an.

So. Hier mal die Fusebits von meinem Tiny. Sag mir doch bitte was ich einstellen muss.
Ins "Datenblatt" hatte ich die Tage auch schon reingeschaut. Allerdings bin ich kein Freund von "auf dem Bildschirm" lesen und wollte mir bis jetzt die 250 Seiten nicht ausdrucken, Mit Englisch ist auch nicht soooo.... :???:

Fusebits:
http://home.teleos-web.de/jwittiber/fusebits.jpg

Hucky
 

Bussard

Geocacher
Hallo Hucky,
das ist doch mal 'ne Ansage! Das Blinken und die Fuse sagen, daß dein Tiny intern mit 1MHz (1000000Hz) läuft: (interner Takt 8MHz, mit Vorteiler /8 auf 1MHz geteilt).
Da die "erzeugten" Zeiten von deiner Angabe im Programm abhängen, müssen nur beide in Übereinstimmung gebracht werden.

$regfile = "attiny2313.dat"
$crystal = 4000000 ändern in 1000000


Dann sollte es funktionieren - viel Erfolg
 
OP
Hucky3000

Hucky3000

Geocacher
:gott: D A N K E !!! :gott:
Ach SOOO funktioniert das. Ich habe diverse Literatur - habe aber bisher nichts zu dem "Problem" gefunden.
Wenn man das einmal weiß....
DAS kostete jetzt 2 Wochen :schockiert:
Irgendwo hatte ich mal gelesen, das Crystal sich (nur) auf die Taktfrequenz bezieht... :irre:

Aber wo erkenne ich denn in den Fusebits den Teiler ?

Hucky
 
OP
Hucky3000

Hucky3000

Geocacher
Der Servo läuft wie er soll ! :p
Ich brauch ja nur beide "Anschläge" - baue nen Kasten mit Codeschloß und Verriegelung. Codeschloß ist schon fertig programmiert. Wenn den Code einer sieht... :roll: Habe bisher Basic und Assembler mit Commodore gemacht ;) AVR - Assembler ist ähnlich / lässt sich gut umsetzten. Gefällt mir gut mit den vielen Registern. Da ich mit meinen GC-Projekten vorrankommen möchte habe ich (erstmal) auf BASCOM zugegriffen :^^:
Das Fusebit C. So, so. Steht bestimmt irgendwo auf einenr der 250 Seiten. Irgendwo hatte ich auch was von Prescale gelesen - hatte es bei BASCOM aber so nicht wiedergefunden :???:
Deinen Link habe ich ersteinmal "gebootmarkt" - kurz drauf gesehen, sieht recht interessant aus.....
Habe mir von MyAVR den MK1 + Workpad Plus und das Lernbuch gegönnt...
Habe da mal angefangen. Hab dann diverse Aufgaben so programmiert wie ich das auch mit dem 6510 gemacht hätte. Ging auch :D
Kommt Zeit kommt Rat....
Desweiteren habe ich mir vor ein paar Tagen so nen dicken Schinken über BASCOM gegönnt. Leider wird speziell nur auf den ATMega8 und STK500 eingegangen, aber die Beispiele und einzelene Punkte sind für mich recht interessant.

Hucky
 

Bussard

Geocacher
Das Fusebit C ist das aus deinem Fuses-Bild, jeder Tiny hat etwas andere Fuses. Irgendwo in den Weiten des "Indernett"s steht auch, daß die Tinys, welche interne Oszillatoren haben, ab Werk mit auf 1MHz eingesteller Frequenz ausgeliefert werden (keine Ahnung, ob das immer stimmt, aber zumindest oft).
Solange man also die Fuses nicht verstellt, liegt man mit $crystal = 1000000 meist richtig.
? Veteran C64 oder Amiga ?
Gruß Bussard
 
OP
Hucky3000

Hucky3000

Geocacher
Hab ich auch irgendwo gelesen. Allerdings wurde ich nicht richtig daraus schlau.
In dem Thread stand, das wer welche mit 4MHz bekommen hat, ein anderer mit 8MHz und einer welche mit 1Mhz (vom Werk). Jetzt versteh ich das auch. Man kann ja nur auf 128KHz, 4MHz, oder 8MHz einstellen. Zumindest ohne externen Quarz. Dann ist mit 8MHz und 1 MHz in dem Fall "das selbe" gemeint - da wird dann wenigstens einer in dem Thread das auch nicht so richtig verstanden haben, oder hat sich nicht klar ausgedruckt ;)
Alles wird gut... :^^:

Ach ja.... C64 ;)

Im Moment pausier ich da etwas...
Da gibts noch richtige Cracks, die richtig was auf dem Kasten haben. Neue Hardware usw...
Es gibt auch ein grosses Forum - Schwerpunkt C64, aber auch alle anderen 8 Bitter und Konsolen.
Ferner gibts regelmässige Treffen.
Ich habe auch mal aktiv an einer HP mit gestaltet - hat jetzt ein anderer übernommen.
Diverse Beiträge sind von mir, der gute ist aber noch am Aufbau. Kommt nicht in Quark.
Wenns dich interessiert kann ich dir ne PN schicken, will hier keine Werbung machen ;)
Habe früher hauptsächlich Demos gecodet.
Desweiteren viel mit dem Userport gebastelt...

Hucky
 

stonewood

Geowizard
Hucky3000 schrieb:
Hab ich auch irgendwo gelesen. Allerdings wurde ich nicht richtig daraus schlau.
In dem Thread stand, das wer welche mit 4MHz bekommen hat, ein anderer mit 8MHz und einer welche mit 1Mhz (vom Werk). Jetzt versteh ich das auch. Man kann ja nur auf 128KHz, 4MHz, oder 8MHz einstellen. Zumindest ohne externen Quarz. Dann ist mit 8MHz und 1 MHz in dem Fall "das selbe" gemeint - da wird dann wenigstens einer in dem Thread das auch nicht so richtig verstanden haben, oder hat sich nicht klar ausgedruckt ;)
Du meinst '8 MHz, CKDIV8 eingeschaltet'. Gibt dann 1 Mhz.
Das Tiny2313-Datenblatt ist sogar gleicher Meinung:
Default Clock Source
The device is shipped with CKSEL = “0100”, SUT = “10”, and CKDIV8 programmed.
The default clock source setting is the Internal RC Oscillator with longest start-up time
and an initial system clock prescaling of 8, resulting in 1.0 MHz system clock. This
default setting ensures that all users can make their desired clock source setting using
an In-System or Parallel programmer.
Vielleicht mal da nachsehen bevor man 'irgendwo' nachliest ... ;)
 
Oben