Hallo Ihr Spezialisten, ich suche für eine Modellbahnanlage die Möglichkeit, einen Servo mit ein- stellbarer Geschwindigkeit an einen Attiny45/85 anzuschließen. Einstellbare Geschwindigkeit im Sketch, der Servo muß nur schön langsam zwischen 2 Positionen wechseln. VarSpeedServo funktioniert mit einem Nano ganz toll, stelle ich in der IDE einen Attiny ein (nach Anpassung der Anschlüsse) erhalte ich div. Fehlermeldungen: Arduino: 1.6.5 (Windows 8.1), Platine: "ATtiny85 @ 8 MHz (internal oscillator; BOD disabled)" C:\Users\Ingo\Documents\Arduino\libraries\VarSpeedServo-master\VarSpeedS ervo.cpp: In function 'void __vector_3()': C:\Users\Ingo\Documents\Arduino\libraries\VarSpeedServo-master\VarSpeedS ervo.cpp:160:44: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'volatile uint16_t* {aka volatile unsigned int*}' for argument '2' to 'void handle_interrupts(timer16_Sequence_t, volatile uint16_t*, volatile uint16_t*)' handle_interrupts(_timer1, &TCNT1, &OCR1A); ^ C:\Users\Ingo\Documents\Arduino\libraries\VarSpeedServo-master\VarSpeedS ervo.cpp: In function 'void initISR(timer16_Sequence_t)': C:\Users\Ingo\Documents\Arduino\libraries\VarSpeedServo-master\VarSpeedS ervo.cpp:206:5: error: 'TCCR1A' was not declared in this scope TCCR1A = 0; // normal counting mode ^ C:\Users\Ingo\Documents\Arduino\libraries\VarSpeedServo-master\VarSpeedS ervo.cpp:207:5: error: 'TCCR1B' was not declared in this scope TCCR1B = _BV(CS11); // set prescaler of 8 ^ C:\Users\Ingo\Documents\Arduino\libraries\VarSpeedServo-master\VarSpeedS ervo.cpp:214:5: error: 'TIFR1' was not declared in this scope TIFR1 |= _BV(OCF1A); // clear any pending interrupts; ^ C:\Users\Ingo\Documents\Arduino\libraries\VarSpeedServo-master\VarSpeedS ervo.cpp:215:5: error: 'TIMSK1' was not declared in this scope TIMSK1 |= _BV(OCIE1A) ; // enable the output compare interrupt ^ Fehler beim Kompilieren. Vermutlich nicht Attiny-tauglich ??? SoftwareServo.h bietet anscheinend nicht die Möglichkeit, die Servo- Geschwindigkeit zu beeinflussen. Mit meinen begrenztem Wissen komme ich nicht weiter, es wäre nett, wenn jemand einen Tip hätte. schon mal Danke Grüße Ingo
1. Die Register und Interrupt Vektoren haben beim Tiny andere Namen als beim Mega. 2. Jede Servo Library kann man so ansteuern, das sich das Servo nur langsam bewegt, indem man auch Zwischenschritte zwischen den Endpunkten anfährt. 3. Dein Programm fehlt im Posting und ohne dieses kann man nur im Nebel stochern.
:
Bearbeitet durch User
Hi >stelle ich in der >IDE einen Attiny ein (nach Anpassung der Anschlüsse) erhalte ich div. >Fehlermeldungen: Anscheinend den falschen: TCCR1B -> hat der Attiny45 nicht TIFR1 -> TIFR TIMSK1 -> TIMSK MfG spess
Die Folgen der Ganzheitsmethode nach Arduino :(
spess53 schrieb: > TIMSK1 -> TIMSK Und dieses Register ist für beide Timer zuständig, es gibt kein extra Register für jeden Timer wie beim Mega. Man muss also doch etwas nachdenken und nachvollziehen, was die Library da macht. Das gleiche gilt für TIFR.
Sorry, an den Sketch habe ich nicht gedacht. Ich verwende den Sketch Knob aus der Original-Servo-Librarie, eben geringfügig angepaßt. Nach dieser Methode habe ich schon ca 50 Weichensteuerungen mit Servos gebaut, jedoch alle mit dem Pro Mini. Anzuschauen u.a. hier: http://1drv.ms/1NDhSab (inkl. Sketch u. Verschaltung) bitte macht es nicht zu kompliziert, das übersehe ich mit meinem Halb- wissen und meinen 61 Jahren nicht mehr ! Grüße Ingo
Hi >Und dieses Register ist für beide Timer zuständig, es gibt kein extra >Register für jeden Timer wie beim Mega. Ach. Es gibt auch ATMegas mit einem TIMSK/TIFR-Register. MfG Spess
Servos benötigen ein PWM-Moduliertes Signal (typ. 5..15% @ 100Hz) um den Winkel einzustellen. Wenn du eine bestimmte PWM (zb. 8%) einstellt wird der Servo so schnell wie möglich versuchen den passenden Winkel einstellen. Wenn du langsam drehen willst, musst du ausgehend von der aktuellen Lage, den neuen Winkel durch langsames ändern der PWM-Zeit anfahren (z.b. alle 100ms den PWM-Wert um 0.5% erhöhen bis der Endwert erreicht wurde). Je nach Auflösung des Timers ruckelt das dann.
Arduino oder nicht, der Tiny45 hat sowieso nur zwei 8 Bit Timer. Direkter geeignet wäre einer mit 16 Bit Timer, etwa Tiny44. Wobei ich jetzt aber nicht andeuten will, dass das mit dem Tiny45 gar nicht möglich wäre. :-)
spess53 schrieb: > Ach. Es gibt auch ATMegas mit einem TIMSK/TIFR-Register. Aber nicht im Uno - da isses nun mal ein Mega328, der für jeden Timer ein eigens Timsk besitzt. Das solltest du aber wissen. Wir wollen das hier jetzt mal nicht zu kompliziert für den TE machen.
:
Bearbeitet durch User
Die arduino Philosophie "erschlagt die Probleme mit Abstraktion" versteht sich halt nicht mit der Kompaktheit der tinys. Ich würde dir da eher C anraten, sooo schwer ist das jetzt auch nicht zu verstehen.
http://stefanfrings.de/mikrocontroller_buch/index.html Im Band drei werden unterschiedliche Lösungsansätze (ohne Arduino IDE aber mit Arduino Nano Hardware) detailliert beschrieben.
erst mal Danke für die Hilfe. Habe gerade bemerkt, daß mein OneDrive-Link nicht mehr funktioniert. https://onedrive.live.com/redir?resid=89096C07434A4A81!14000&authkey=!AKw8Yn7EF_CVJus&ithint=folder%2c Kurz-Links scheint es nicht mehr zu geben. Eure gutgemeinten Ratschläge überfordern mein Wissen jedoch bei weitem, werde mich wohl doch für einen Pro Mini entscheiden, davon hab ich noch ein paar. Für einen Servo....Grrrrr Grüße Ingo
> Für einen Servo....Grrrrr
Tja, ich würde dazu einen ATtiny13 für 90 Cent verwenden.
Die Pro Minis vom FC haben als 10er-Pack 18,27,-€ gekostet, also nicht die Welt. Wenn ich dagegen meine (und Eure) Zeit setze, die wir schon zugesetzt haben....... Nochmals Dank für Eure Hilfe !!! Grüße Ingo
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.