Attiny45 steuert mein Servo nicht an

omega1951

Neues Mitglied
08. März 2008
5
0
1
Sprachen
Hallo ihr Profis,
mit einem Attiny45 wollte ich über zwei Taster ein Servo ansteuern,
leider gibt das Servo keinen Mucks von sich.Mit Atmega8 funktioniert
alles einwandfrei.Liegt der Fehler bei mir oder kann der Tiny45 keine
Servos ansteuern.
Vielen Dank für Eure Hilfe
Gruss Dieter
Anbei meinen Code.

$regfile = "attiny45.dat"
$hwstack = 16
$crystal = 8000000
Config Portb.0 = Output
Config Pinb.3 = Input
Config Pinb.2 = Input
Portb.3 = 1
Portb.2 = 1
Config Servos = 1 , Servo1 = Portb.0 , Reload = 8
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Start Timer0
Init:
Servo(1) = 80
Main:
Timer0 = 0
If Pinb.3 = 0 Then -----Taster1
Servo(1) = Servo(1) + 1
End If
If Pinb.2 = 0 Then -----Taster2
Servo(1) = Servo(1) - 1
End If
Warte:
If Timer0 < 300Then -----Timing für Servo
Goto Warte
End If
Goto Main
 
Hallo,

ich glaube Bascom nutzt für das Servo-Timing den Timer0, du darfst den Timer0 also nicht in deinem Programm verwenden.

Code:
Config Servos = 1 , Servo1 = Portb.0 , Reload = 8
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Start Timer0
...wird sich hier beissen.

Wenn du den Timer0 in deinem Programm benötigst, kannst du bei Config Servos als Option Timer = Timer1 angeben, dann wird der Timer1 für das Servo-Timing genutzt.

Gruss,
Dirk
 
Hallo Dirk,
danke für die schnelle Antwort,ich werde es ausprobieren
Gruss
Dieter
 
Syntax

CONFIG SERVOS = X , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = rl





Remarks

Servo’s need a variable pulse in order to operate. The CONFIG SERVOS directive will set up a byte array with the servo pulse width values and will initialize an ISR that uses TIMER0.



X


The number of servo’s you want to control. Each used servo will use one byte of SRAM.

PORT


The port pin the servo is attached too.

RL


The reload value for the ISR in uS.

Auszug aus der BASCOM-Hilfe... Demnach könnte er aber den Timer 1 NICHT für die Servos nehmen - gibt keine Option dafür....

Ich weiß es aber nicht genau, würd mich aber interessieren, weil ich auch ein µC-Projekt mit 2 Servos vor habe...

Gruß Rainer
 
Hallo Rainer,

es müsste eigentlich auch mit Timer1 funktionieren:
Code:
[COLOR=RoyalBlue][COLOR=#008000][FONT=Courier New]Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1[/FONT][/COLOR][/COLOR]
Man kann bis zu 14 Servos ansteuern, in dem obigen Beispiel sind es zwei. Die entsprechenden Portpins müssen noch als Ausgang geschaltet werden und die Interrupts müssen global freigegeben werden, damit die von Bascom initialisierte ISR des Timers aufgerufen wird.

Hier schnell nochmal der link zur Hilfe, siehe dir im unteren Bereich das Beispiel an.

Grüße,
Dirk

PS: Kann aber auch sein, dass ich mich täusche, ich habe noch nie ein Bascom-Programm geschrieben :rolleyes: ich programmiere in C, Pascal und Assembler.
 
Entschuldige bitte, Dirk, du hast Recht... Habs überlesen...

Code:
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

Timer1 geht auch - allerdings darf man den Timer dann sonst nicht mehr verwenden.

Gruß Rainer
 
Hallo Männer,
zunächst einmal vielen Dank für eure Mühe.Die Servofunktion funktioniert
mit einem Atmega8 sogar über zwei Taster und die Infrarot-Fernbedienung.
Nur beim Attiny45 bekomme ich keine Funktion.Schaut euch den Code vom
Atmega8 an wo alles schön funktioniert.Ich komme nicht dahinter,warum es
beim Attiny45 nicht klappen will.
Gruss,
Dieter


Code:
$regfile = "m8def.dat"
$framesize = 52
$swstack = 62
$hwstack = 72
$crystal = 8000000

Config Pind.0 = Input                                       'Bett oben hoch
Config Pinb.6 = Input                                       'Bett oben runter
Config Pinc.2 = Input                                       'Bett unten hoch
Config Pinc.3 = Input                                       'Bett unten runter
Config Portc.0 = Output                                     'Servo Bett oben
Config Portc.1 = Output                                     'Servo Bett unten
Config Rc5 = Pind.2 , Timer = 2
Portd.2 = 1
Portd.0 = 1
Portb.6 = 1
Portc.2 = 1
Portc.3 = 1

Config Servos = 2 , Servo1 = Portc.0 , Servo2 = Portc.1 , Reload = 10
Config Timer1 = Timer , Prescale = 1024
Dim Address As Byte , Command As Byte

Enable Interrupts
Do
Start Timer1

Init:
Servo(1) = 38                                               '0..255
Servo(2) = 55
Main:
Timer1 = 0
If Pind.0 = 1 Then

Servo(1) = Servo(1) - 1
End If

If Pinb.6 = 1 Then
Servo(1) = Servo(1) + 1
End If

If Pinc.2 = 1 Then
Servo(2) = Servo(2) + 1
End If

If Pinc.3 = 1 Then
Servo(2) = Servo(2) - 1
End If

Getrc5(address , Command)
If Address <> 255 Then : End If

If Command = 160then
Servo(1) = Servo(1) + 1
End If
If Command = 32then
Servo(1) = Servo(1) + 1
End If

If Command = 161then
Servo(1) = Servo(1) - 1
End If
If Command = 33then
Servo(1) = Servo(1) - 1
End If

If Command = 145then
Servo(2) = Servo(2) + 1
End If
If Command = 17then
Servo(2) = Servo(2) + 1
End If

If Command = 144then
Servo(2) = Servo(2) - 1
End If
If Command = 16then
Servo(2) = Servo(2) - 1
End If
Goto Main
Loop
End
 
Hallo Dieter,

in dem Sourcecode für den ATmega8 setzt du den Timer1 direkt nach dem Label Main auf 0. Das kann dann eigentlich nicht funktionieren, zumindest gibt es aber Timingprobleme bei den Servos.

Der RC5-IR-Empfänger-Teil nutzt bestimmt auch einen Timer, vielleicht gibt es hier Probleme.

Mit den Angaben $framesize, $swstack, usw. im Head-Bereich habe ich mich noch nicht befasst, das wird auch für den ATtiny45 passen?

Gruss,
Dirk
 

Ü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)