SoftwareServo ATtiny85

Ho scaricato questa libreria: http://playground.arduino.cc/ComponentLib/Servo
E ho caricato questo sketch sull’ATtiny85 @ 8 mhz con Arduino as ISP:

#include <SoftwareServo.h> 

SoftwareServo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 

int pos = 0;    // variable to store the servo position 

void setup() 
{ 
  myservo.attach(1);  // attaches the servo on pin 1 to the servo object 
} 

void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
    SoftwareServo::refresh();
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
    SoftwareServo::refresh();
  } 
}

Il problema è che il Servo “vibra” ma non si muove…

Sei sicuro che sia compatibile con l'Attiny85? Sei sicuro che possa lavorare ad 8 MHz?
Ho visto nel codice che usa una temporizzazione basata sulla lettura del timer 0. Sull'Arduino tale timer è impostato con un tempo di overflow che è legato anche al clock usato (16 MHz).Oltre ad una modalità che potrebbe essere diversa da quella usata nel core che stai usando tu per programmare l'Attiny85.

leo72:
Sei sicuro che sia compatibile con l'Attiny85? Sei sicuro che possa lavorare ad 8 MHz?
Ho visto nel codice che usa una temporizzazione basata sulla lettura del timer 0. Sull'Arduino tale timer è impostato con un tempo di overflow che è legato anche al clock usato (16 MHz).Oltre ad una modalità che potrebbe essere diversa da quella usata nel core che stai usando tu per programmare l'Attiny85.

Penso che sia compatibile, l'ho preso da qui: Running a servo on ATTiny 85 | mogshade

Forse uno schema di come hai fatto i collegamenti dei motori ed il tipo degli stessi potrebbe aiutare qualcuno più ferrato.

sono alle prime armi :), ma credo che un servo debba essere collegato a un pin PWM per poter regolare l'angolo di rotazione. Prova a controllare che il pin a cui hai collegato il servo sia adatto.

L'ho collegato al pin 6 dell'attiny85, quel servo con Arduino funziona benissimo.

Sui servo non so aiutarti, non so nulla. Ma non vorrei che ci fosse un problema di clock. L'Arduino va a 16 MHz, come detto, e quella lib non ha nessuna porzione di codice che mi faccia pensare che possa capire a quanto va il chip e si adatti. Si limita a leggere il valore del timer 0. Poi c'è un controllo per cui se non sono passati 20 ms la lib pare non faccia nulla.

X sagara:
I servo non vengono pilotati con il pwm arduinico, il segnale utile in ppm viene generato dalla lib su qualsiasi pin.

Non ho mai provato su attiny, del discorso timer non so, mentre sul fatto dei 20ms credo sia normale proprio perché il segnale ppm ricreato ha una frequenza di 50Hz

C'è da dire che a fine articolo si parla di problemi non ancora chiariti.
Per andare a fondo ti serve un oscilloscopio.

Un oscilloscopio non cel ho..
Ho provato con la libreria Servo8Bit ma il servi rimane immobile.

Ho un 85 montato in prova su una breadboard.
Stanotte recupero un miniservo e faccio qualche prova. :wink:

PaoloP:
Ho un 85 montato in prova su una breadboard.
Stanotte recupero un miniservo e faccio qualche prova. :wink:

ok, ma perchè stanotte XD

Perché ora non sono a casa e ho tantissime cose da fare. ]:slight_smile:
A queste cose lavoro nei ritagli di tempo e tipicamente la sera tardi.

PaoloP:
Perché ora non sono a casa e ho tantissime cose da fare. ]:slight_smile:
A queste cose lavoro nei ritagli di tempo e tipicamente la sera tardi.

ok; fammi sapere :slight_smile:

Io sono pieno di Tiny di tutte le misure ma non ho servo per cui posso aiutarti solo lato codice :stuck_out_tongue:

C'e' sul sito del TinyCore una issue sulla servolibrary standard, che riporta alla SoftwareServo e ad un thread sul forum aperto da @Ratto
http://forum.arduino.cc/index.php?topic=62912.0

E' un pò vecchio (2011) ma potrebbe esserci la soluzione.

nid69ita:
C'e' sul sito del TinyCore una issue sulla servolibrary standard, che riporta alla SoftwareServo e ad un thread sul forum aperto da @Ratto
[Solved]ATtiny 85 and servo library - Motors, Mechanics, Power and CNC - Arduino Forum

E' un pò vecchio (2011) ma potrebbe esserci la soluzione.

Ah, si, l'avevo già vista... ma alla fine dice che non ha modificato la libreria.

Ho fatto un piccolo video, così magari rende meglio l'idea: Problema servo con ATtiny85 libreria SoftwareServo - YouTube

A parte che è il nostro Ratto, quindi magari scrivigli che ti può dare un mano... :wink:
Poi dice (ed un altro utente lo conferma) che la lib non è stata modificata perché funziona ma ha solo cambiato il codice. E mette un codice di esempio che a lui funziona(va). Lo hai provato?

leo72:
A parte che è il nostro Ratto, quindi magari scrivigli che ti può dare un mano... :wink:
Poi dice (ed un altro utente lo conferma) che la lib non è stata modificata perché funziona ma ha solo cambiato il codice. E mette un codice di esempio che a lui funziona(va). Lo hai provato?

Io messo 25 come delay, ratto invece 50. adesso riprovo.

Il mio servo fa una specie di balletto. :grin:

L’unica modifica che ho fatto alla softwareservo è togliere l’include di WProgram.h e aggiungere l’include di Arduino.h

//#include <WProgram.h>
#include <Arduino.h>

Ho spostato il servo sul pin 4 perché l’1 è occupato dai cavetti per l’ISP.