Stell doch einfach die PWM aus, damit bekommt er kein Signal mehr und hält keine Position mehr.
Guten Tag liebe AVR leute, zuerst mal hallo ich bin AVRMagician alias Mario und neu hier. Bin nun seit einenm guten Monat am Lernen und liebe dieses Forum, dass mir bis jezt fast alle meine Fragen duch Suchen beantwortete. Einfach spitze! Ich bin voll angefressen. *SMILE*
Nun zu meinem Problem, ich habe eine Bauchrednerpuppe die ich mit Servos steuere. Die Puppe soll wenn sie nicht spricht frei an den Servos beweglich sein, ich habe verschiedenes probiert, komme aber auf keine funktionierende Lösung. Das eifachste wäre es natürlich den steuerdraht duch ein Relais zu unterbrechen, das muss aber doch auch per Software möglich sein denke ich, aber verflixt wie?.
Ich bin für jede Anregung und Hilfe dankbar. Die beiden Servos lauffen an PortB.2 + PortB.3
Grüsse MARIO
In Gebrauch:
MEGA 32 16mhz, Steuerung der Servos mit Bascom Servo befehl.
Stell doch einfach die PWM aus, damit bekommt er kein Signal mehr und hält keine Position mehr.
Wenn du den Timer0 deaktivierst, sollte Ruhe sein in der Hütte.
STOP TIMER0
Du mußt ihn dann halt wieder starten, wenn die Puppe wieder was zu reden hat.
START TIMER0
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo, Danke Robert und Thewulf00 für eure Inputs.
Das mit dem Stoppen klappt mit dem Befehl STOP TIMER0 prima, aber einschlten lässt er sich nicht mehr ... Grübel. Sollte eigendlich gehen, aber vielleicht geht das nicht weil ich den Servo(1) = xx Befehl in Bascom nutze.
Hab diverse Variannten probiert, einmal Timer aus, keine Servoaktivität mehr bis zum Reset. Hmmm .... also doch die Relais version?
Gruss Mario
Vielleicht nach der Pause nochmal Config Servo... ?
Schon probiert, Bascom ärgert sich dann über schon verwendete Variable "Variable alredy Dimensioned" ... Grübel ...
Ich denke, Bascom verliert die Zuordnung, bzw. der Atmel verliert sie dann. Es muss also nochmal eine PWM zugeordnet, sprich aktiviert und eingestellt werden. Probier doch einfach mal, die PWM auf einen niedrigen Wert zu setzen, bspw. 0. Oder mach Servo(0) oder so. Das wird aber nicht gehen, schätze ich.
Wenn ich servo(0) mache dann dreht der servo über den anschlag aber geht nicht aus. Wenn ich anstatt Start timer "Config Servos = 2 , Servo1 = Portb.2 , Servo2 = Portb.3 , Reload = 10" (Bacom motzt beim Kompilieren aber geht) lade, geht es auch nicht, ignoriert es einfach. Ich nehme an das wie Du sagst die Zuordnung vorloren geht und erst bei einem Neustart neu wieder zugeordnet werden kann.
Gibt es noch eine Möglichkeit PWM auf null zu setzen? Ausser Stop Timer0
Dann doch das gute alte Relais?, nein ich habs, ich nehme einen zweiten mega32, der kontrolliert dann das ein und ausschalten des steuerpfades *SCHIEFLACH*
Mario
Nun wart' mal.
Folgendes macht Bascom, um die Servo-Kontrolle zu Starten:
(Der Rest ist nurmehr in der ISR-ROutinen)Code:Bascom definiert eine ISR-Routine und setzt den Timer auf (TIMER0) IN r24,TCCR0 ORI r24,0x01 'no prescale (/1) OUT TCCR0,r24 IN r24,TIMSK ORI r24,0x01 'enable OUT TIMSK,r24 LDI r24,0xB1 'preload = 177 OUT TCNT0,r24
Die "177" sind, um 10µS Interrupts zu haben
Jetzt müßt ich mal schauen, was Bascom genau bei "STOP TIMER0" eigentlich macht.
Sei mal brutal und versuche
TIMSK = TIMSK AND 254 ---->Für "STOP TIMER0"
und
TIMSK = TIMSK OR 1 ---->Für "START TIMER0"
Weiters:
Was tut denn der µC sonst noch ? THeoretisch ginge ja auch
DISABLE INTERRUPTS (stop)
ENABLE INTERRUPTS (start)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
was mir spontan dazu einfällt aber keine ahnung ob das funktioniert...
könnte man nicht einfach den port an dem das servo hängt auf eingang schalten? und später wenn das servo wider laufen soll auf ausgang?
gruss bluesmash
Meine Homepage:
www.bluesmash.roboterbastler.de
Lesezeichen