PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo ansteuern



Hübi
15.10.2008, 19:05
hallo,
ich möchte gern ein Servo per attiny2313 ansteuern, dazu habe ich mir die Anleitung aus der FAQ zum testen genommen, aber wenn ich das Programm Compile wird immer der Fehler 85: unknown interrupt file ausgeworfen, was mache ich falsch?

bitte nicht schlagen, wenn die Frage blöd ist, bin echt noch blutiger Anfänger...



$regfile = "attiny2313.dat"
$crystal = 1000000


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

Config Portb = Output

Enable Interrupts

Servo(1) = 100
Servo(2) = 100
waitms 1000


mfg Hübi

Dirk
15.10.2008, 20:52
Hallo Hübi,

ist das das ganze Programm?

Wenn ja ...

1. Ein "End" (oder "Do Loop") sollte ans Ende des Programms
2. Du solltest am Anfang noch $hwstack, $swstack und $framesize definieren.

Insgesamt wird sich aber auch nicht viel tun, weil beide Servos ja nur in eine feste Position gestellt werden und das Programm danach endet.

Nimm doch einfach das Bascom-Beispiel, das unter "Config Servos" in der Hilfe steht.

Gruß Dirk

Hübi
15.10.2008, 21:58
meinst du dieses hier?



'-----------------------------------------------------------------------
' (c) 2001-2005 MCS Electronics
' servo.bas demonstrates the SERVO option
'-----------------------------------------------------------------------

'Servo's need a pulse in order to operate
'with the config statement CONFIG SERVOS we can specify how many servo's we
'will use and which port pins are used
'A maximum of 16 servos might be used
'The SERVO statements use one byte for an interrupt counter and the TIMER0
'This means that you can not use TIMER0 anymore
'The reload value specifies the interval of the timer in uS
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
$regfile = "2313def.dat"

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
'as an option you can use TIMER1
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1


'we use 2 servos with 10 uS resolution(steps)

'we must configure the port pins used to act as output
Config Portb = Output

'finally we must turn on the global interrupt
Enable Interrupts

'the servo() array is created automatic. You can used it to set the
'time the servo must be on
Servo(1) = 10 '10 times 10 = 100 uS on
'Servo(2) = 20 '20 times 10 = 200 uS on
Do
Loop

Dim I As Byte
Do
For I = 0 To 100
Servo(1) = I
Waitms 1000
Next

For I = 100 To 0 Step -1
' Servo(1) = I
Waitms 1000
Next
Loop
End


da habe ich immer noch genau den selben Fehler drin...

ist es möglich, das es an meiner Bascom version liegt?

mfg

Dirk
15.10.2008, 22:20
... ist es möglich, das es an meiner Bascom version liegt?
Bei meiner Version 1.11.9.2 gibt's mit deinem Programm keinen Fehler.

Gruß Dirk

Hübi
15.10.2008, 22:36
danke für eure Bemühungen, es liegt an meiner Version -,-
-mit der demo klappts...

naja, jetzt kann ich ja erstmal ein bischen rumprobieren der Tipp mit den Beispielprogrammen ist echt gold wert :-)

mfg Hübi

Hübi
16.10.2008, 14:25
ok, mit rumrobieren ist wohl doch noch nicht so viel...

mit meinem Programm zittert das servo nur "blöd herrum"

hab schon alle möglichen programme ausprobiert, aber es ist eig. immer nur ein Zucken...

habt ihr eine idee woran es liegen kann?

(Die $hwstack, $swstack und $framesize sind aber nicht zwingend erforderlich oder?)






$regfile = "attiny2313.dat"
$crystal = 1000000

$hwstack = 32
$swstack = 5
$framesize = 20



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

Config Portb = Output

Enable Interrupts


Do

Servo(1) = 50

Wait 2

Servo(1) = 150

Wait 2

Loop
End


mfg hübi

Jon
16.10.2008, 14:32
Diese Infos:
$hwstack = 32
$swstack = 5
$framesize = 20
sollten drinnen sein. Bei so einen Code wird dich BASCOM aber nicht umbringen, wenn das fehlt. Das wird erst bei größeren Codes interessant. bei deinen Einstellungen ist der swstack viel zu klein. Den solltest du mindestens auf 32 stellen.

Woran das Zittern liegen kann:
1. Der Quarz ist zu langsam. Entweder, es gibt einen schnelleren internen, oder du musst einen schnelleren externen anlöten.
2. Reload ist der falsche Wert. Den richtigen krigt man meistens nur duch Experimentieren heraus.
3. Bricht die Spannung beim Bewegen des Servos ein? Wenn ja, häng den Servo mal testweise an eine andere Stromquelle. Servos ziehen beim einschalten gerne mal etwas mehr Strom, was den µC im schlimmsten Fall dazu bringt, dass er sich resettet, was ein Zittern des Servos zur Folge hat.

Ich hoffe, du findest den Fehler!
Wenn nicht, melde dich wieder!

jon

Hübi
23.10.2008, 18:35
Danke Jon, du hattest recht, es lag am Quarz...
ich habe jetzt einen AT90s2313 mit 8Mhz quarz genommen, damit klapps ohne Probleme!

mfg hübi

thewulf00
24.10.2008, 10:31
Herzlichen Glückwunsch!

Und keiner hat Dich geschlagen. Was soll man bei solchen Problemen auch machen? Dafür ist das Forum ja da.