Forum: Mikrocontroller und Digitale Elektronik gesucht: Servo mit variabler Geschwindigkeit an Attiny45


von Ingo (Gast)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von spess53 (Gast)


Lesenswert?

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

von T. Roll (Gast)


Lesenswert?

Die Folgen der Ganzheitsmethode nach Arduino :(

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Ingo (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Rangi J. (rangi)


Lesenswert?

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.

von Rudolph (Gast)


Lesenswert?

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. :-)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Max D. (max_d)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Ingo (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

> Für einen Servo....Grrrrr

Tja, ich würde dazu einen ATtiny13 für 90 Cent verwenden.

von Ingo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.