Comportamento servo anomalo

Salve a tutti, rieccomi qui …stavolta spero che sia una cavolata…
Dopo aver collegato la mia L298N in lap mode… dove al momento… tutto funziona… ho un problema…
Mi sono accorto che se nel mio codice includo

  ServoUT.attach(5);
  ServoUT.write(90);

le ruote cominciano a girare sole… vi posto il mio setup:

#include <Servo.h>

byte mot1=9 ;
byte mot2=10 ;
Servo ServoUT;

void setup(){
 setPwmFrequency(9, 8); // imposta frequenza 3906 hz
 pinMode(mot1,OUTPUT);
 pinMode(mot2,OUTPUT);
 ServoUT.attach(5);
 ServoUT.write(90);
}

void loop(){

 Avanti();
}
void setPwmFrequency(int pin, int divisor) {
  byte mode;
  if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
    if(pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } else {
      TCCR1B = TCCR1B & 0b11111000 | mode;
    }
  } else if(pin == 3 || pin == 11) {
    switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 32: mode = 0x03; break;
      case 64: mode = 0x04; break;
      case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x7; break;
      default: return;
    }
    TCCR2B = TCCR2B & 0b11111000 | mode;
  }
}

Succede che se commento la parte del servo, tutto funziona bene… come mai?
Ho provato a collegare il servo ad altri prin PWM e non! ma niente da fare…
Grazie a tutti

ciao.

E’ un conflitto di librerie: la libreria Servo utilizza il timer1 di arduino ovvero quello usato per i segnali PWM sui pin 9 e 10, che sono i pin a cui hai collegato il L298N.
Una possibile soluzione è di usare i pin 3 e 11 per il L298N (sempre che siano disponibili).
cambisetPwmFrequency(9, 8); // imposta frequenza 3906 hz
insetPwmFrequency(3, 8); // imposta frequenza 3906 hz
e

byte mot1=9 ;
byte mot2=10 ;

in

byte mot1=3 ;
byte mot2=11 ;

ciao
pippo72

Karma ++ Grazie mille...a quanto pare funziona :D

Controlla, potresti avere die problemi con i delay() o millis()

  • PWM frequencies are tied together in pairs of pins. If one in a
  • pair is changed, the other is also changed to match:
  • - Pins 5 and 6 are paired on timer0
  • - Pins 9 and 10 are paired on timer1
  • - Pins 3 and 11 are paired on timer2
  • Note that this function will have side effects on anything else
  • that uses timers:
  • - Changes on pins 3, 5, 6, or 11 may cause the delay() and
  • millis() functions to stop working. Other timing-related
  • functions may also be affected.
  • - Changes on pins 9 or 10 will cause the Servo library to function
  • incorrectly.

ciao

@brunello: io sapevo (o credevo di sapere) che millis e delay fossero collegate al timer0. Hai maggiori info?

ciao pippo72

@brunello: io sapevo (o credevo di sapere) che millis e delay fossero collegate al timer0.

Gia'... e' vero quello che dici

Ragazzi riprendo questa discussione perchè ho dei led collegati al pin 9 e 10.. quando provo a fare il fading mi si accendono e spengono subito... sicuramente sarà causa della frequenza... non è possibile assegnare la frequenza di default solo al pin 9 e 10? ho libero solo il pin 13 Grazie

EDIT: Ho: pin3 e pin11 i motori. pin 6 servo pin 9 e 10 led... (che questi mi si accendono e spengono subito e non funziona il fade :(

Ragazzi ho cambiato pin da 9 e 10 ho messo i led a 5 e 6...e fanno il fading... però quando fanno il fade, il servo comincia a girare solo dando i numeri.... Servo.attach(13).. provato su 9 e 10 ma nada... Aiutino... :(

ciao. ricapitolando: -timer0 (pin 5 e 6) utilizzato dalle funzioni millis() e delay(). -timer1 (pin 9 e 10) utilizzato dalla libreria Servo(). -timer2 (pin 3 e 11) collegati i motori e con frequenza PWM variata.

Credo (e sottolineo credo) che tu possa collegare il servo ai pin 9 o 10 così che la libreria servo non dovrebbe rompere le balle ai pin 5 e 6 ai quali dovresti poter collegare i led e poter fare il fade attraverso l'analogwrite.

ciao pippo72