Pin Abfrage sbic mit Sprungbefehl rcall

OP #1134186
Lesenswert?
• ▲
▼
Hallo ,

ich versuche mit dem Timer 1 ein Servo zu steuern.

OCR1A ist auf die 20ms periode eingestellt und schaltet den Port wieder 
ein und stellt das Zählregister auf Null. OCR1B ist veränderbar und soll 
den Wert 1ms bis 2ms je nach Drehlage haben.

Jetzt zu meinem Problem.
In der mainloop möchte ich nur die Pin´s abfragen und dann mit rcall ein
Unterprogramm aufrufen in dem der Wert von OCR1B abgeändert wird.

mainloop:
   sbic Pinb,0
   rcall mitte

   sbic Pinb,1
   rcall up

   sbic Pinb,2
   rcall down
rjmp mainloop

----------------------------------------------

wenn ich das Programm so schreibe fährt das Servo in die Position
ohne sbic



mainloop:

rcall up

rjmp mainloop



Habe das Programm im Anhang auf den Chip aufgespielt und es funktioniert 
nur teilweise.

Wenn ich die Befehle sbic ausklammere und nur einen rcall zulasse fährt 
das Servo in die Stellung die mit dem Unterprogramm erreicht werden 
soll.

Lass ich aber die mainschleife wie ich sie im Programm geschrieben habe 
, kommt mein Servo ein zuckel und fährt nicht in die Stellung.
Eigentlich sollte wenn keine Taste gedrückt ist in der Schleife nichts 
passieren es werden alle rcall übersprungen.

Hat jemand eine Ahnung was das ist ?


Habe den Stack inialisiert damit der nach dem Unterprogramm auch wieder 
an die gleiche stelle gesprungen werden kann.

Habe im AVR Studio das Programm simuliert , dort scheint alles zu gehen.


Über einen Tipp würde ich mit freuen.

Joachim
Angehängte Dateien:
Gast #1134234
Lesenswert?
• ▲
▼
Was hast Du an PB0, PB1 und PB2 angeschlossen?

Falls es Taster sind (das suggerieren mir die aktivierten PullUps), sind 
sie gegen GND geschaltet?

Falls ja, dann sind sie L-aktiv, dann müsstest Du sie mit SBIS abfragen.

Falls es um Taster geht, solltest Du Dich demnächst mal mit 
Entprellung beschäftigen. Falls nicht, dann nehme ich alles zurück 
und behaupte das Gegenteil... ;-)

...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren