ATtiny84 e L239D

Sto cercando di usare l’ L239D per pilotare i miei 2 motori (cosa che ho già fatto con successo con ArduinoUno) comandato dall’ Attiny84 in standalone.
Il risultato è che i motori vanno a scatti infinitesimali. :fearful:
I collegamenti sono nello sketch, allego anche uno schemino e datasheet (così Menniti non si 'nczz… XD XD ).
Ho collegato i 2 micro, li ho ricontrollati ma niente. Fa 1 cm al minuto…
Nello schema i pin di enable (9 e 1) sono messi a +5V, ma ho provato anche ad abilitarli dallo sketch ma non cambia nulla.
Ho provato anche a caricare lo sketch con attiny a 1MHz (magari il flash a 8 non era andato bene) ma nada de nada…
Mi sembrava una cosa semplice eppure…
Cosa sbaglio? :blush:
edit: ho tolto lo schema perchè non corrisponde a quello che ho disegnato su BB, lo correggo.
ecco rimesso.

L293D.pdf (86 KB)

Che sketch usi? Forse ci sono delle incompatibilità con la libreria che stai usando? Lo stesso schema collegato all'Arduino funziona?

leo72: Che sketch usi? Forse ci sono delle incompatibilità con la libreria che stai usando?

ops mi sono dimenticato lo sketch.

Lo stesso schema collegato all'Arduino funziona?

Ho usato la stessa configurazione del robottino. Poi visto che non andava ho usato questo sketch super semplificato, non ci sono nè librerie nè niente di particolare...

//int photoresistorSX = 3;    // photoresistor input SX
//int photoresistorDX = 2;    // photoresistor input DX

//pin ATtiny84 ed L293D
int motor1Pin1 = 0;    // pin 2 on L293D   SX
int motor1Pin2 = 1;    // pin 7 on L293D   SX
int enablePin1 = 8;    // pin 1 on L293D
int enablePin2 = 7;    // pin 9 on L293D
int motor2Pin1 = 9;    // pin 10 on L293D  DX
int motor2Pin2 = 10;   // pin 15 on L293D  DX




void setup() {


  // set all the other pins you're using as outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enablePin1, OUTPUT);
  digitalWrite(enablePin1, HIGH);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  pinMode(enablePin2, OUTPUT);
  digitalWrite(enablePin2, HIGH);



}
void loop() {
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);

  delay (5000);

  /* digitalWrite(motor1Pin1, HIGH);
   digitalWrite(motor1Pin2, LOW);
   digitalWrite(motor2Pin1, HIGH);
   digitalWrite(motor2Pin2, LOW);
   
   //delay (1000);
   */
}

Sul lato 293 non posso aiutarti, non ho mai usato quell’integrato quindi non so cosa dirti.
Lo sketch mi pare a posto: imposti dei pin e stop.
Non è che forse c’è un problema di alimentazione, nel senso che la batteria non riesce a fornire la giusta corrente? Forse con l’Arduino ti andava perché l’alimentazione la prendevi da un’altra parte? No so… sono ipotesi.

No è alimentato dall'arduino, ho messo la batteria x alimentare il circuito su fritzing. Adesso ho smontato la BB e riprovo su un'altra BB prima con arduino e poi lo sostituisco con l'84.

Pensavo a qualche incompatibilità con l'84 ma non mi sembra. Forse è la BB andata.

Ci aggiorniamo...

Allora: l293 con arduino funziona bene, mentre comandato dall'84 va a scatti e non a piena potenza. Neanche variando il delay da 5000 a 100 cambia niente. Ho misurato la tensione e ai motori arriva meno di 1 V mentre a vuoto sul connettore sono 4.6V. Per qualche motivo l'84 mi mangia tensione sul 293. Il fatto è che l'84 non dovrebbe alimentare niente se non i segnali digitali. Boh?

Non è possibile che l'Attiny84 si mangi tensione. A livello elettrico l'Attiny è identico al 328: stessa tensione in uscita sui pin, stessa corrente massima.

Hai messo un condensatore di disaccoppiamento tra i pin Vcc e Gnd del micro? Un C da 0.1uF. L'alimentazione alla breadboard (quindi sia al Tiny sia ai motori sia al 239) la fornisci dai pin 5V/GND di Arduino, giusto?

leo72: Non è possibile che l'Attiny84 si mangi tensione. A livello elettrico l'Attiny è identico al 328: stessa tensione in uscita sui pin, stessa corrente massima.

Hai messo un condensatore di disaccoppiamento tra i pin Vcc e Gnd del micro? Un C da 0.1uF. L'alimentazione alla breadboard (quindi sia al Tiny sia ai motori sia al 239) la fornisci dai pin 5V/GND di Arduino, giusto?

No non ho messo condensatore, Se ci vuole me lo devo procurare ( e imparare a cosa serve). Ho uno da 10 uF o 22p , può andare bene?

Giusto. Con il robottino comunque ce la fa ad alimentare tutto compresi anche 2 servi

Il condensatore di disaccoppiamento serve per separare la linea di alimentazione del micro da quella del resto del circuito. Si mette il più vicino possibile ai pin Vcc e Gnd del micro, in modo da costituire una piccola riserva di energia nel caso di sbalzi di assorbimento interno, come ad esempio quando il micro deve alimentare dispositivi esterni tramite i pin di output che potrebbero "succhiare molta corrente. Si usa generalmente o un ceramico o un poliestere da 0.1uF (in mancanza d'altro anche un elettrolitico va bene) e si mette generalmente a tutti i micro in standalone: microcontrollori, chip di memoria, shift register ecc... Siccome non costano nulla, fattene una scorta ed usali sempre.

Tornando al discorso alimentazione, ricordati che l'Arduino fornisce al max 500 mA, compresi i mA che vanno all'Atmega328. Fai i conti dei consumi, perché 2 motori non credo che consumino poco.

I motori li tengo a vuoto senza carico per le prove. Metterò il condensatore.
Adesso devo uscire ci aggiorniamo al pom.
Grazie Leo

In attesa di comprare i condensatori da 0,1 uF posso usare un elettrolitico 50V 4,7 uF o rischio danni?

Danni non ne rischi.

Il condensatore sull'attiny ha risolto il problema, i motori girano bene!! XD Stasera provo con lo sketch completo. E mi sono fatto una cultura sul condensatore di disaccoppiamento...

Grazie a Sua Soavità :grin: