come stabilizzare stato delle uscite durante il caricamento?

Ciao
in questa applicazione ho una scheda arduino per controllare delle elettrovalvole per aria compressa, attraverso 74hc595+ULN2803, quando carico uno sketch le uscite di arduino passano da H a L più di una volta creando un temporaneo e anomalo funzionamento dell'applicazione. Sapete se c'è un modo per evitare questo senza togliere aria all'impianto.

Grazie
Stefano

che uscite stai usando??

stefa24:
quando carico uno sketch le uscite di arduino passano da H a L più di una volta creando un temporaneo e anomalo funzionamento dell'applicazione. Sapete se c'è un modo per evitare questo senza togliere aria all'impianto.

Durante il caricamento dello sketch tutti i pin di Arduino vanno in stato di alta impedenza, se non hai previsto delle resistenze esterne di pullup/pulldown su i pin che pilotano le utenze è facile che queste commutano in modo random.

ciao
questo è l'estratto dallo sketch

#define FineCorsa       3  //inductive sensor
#define sensoreAngolo   2  //pin encoder canale 0

#define pulsante   6 //pin interruttore
#define pin_carpet 7 //pin joined to carpet pin

int dataPin = 11; //Pin connected to DS of 74HC595 14
int latchPin = 8;//Pin connected to ST_CP of 74HC595 12
int clockPin = 12;//Pin connected to SH_CP of 74HC595 11

const int angolo_1 = 0;  //andata
const int angolo_11 = 10;  //andata
const int angolo_2 = 28;  //andata
const int angolo_21 = 50;  //andata
const int angolo_3 = 132;  //andata
const int angolo_4 = 169;  //ritorno
const int angolo_41 = 175;  //ritorno
const int angolo_6 = 233;  //ritorno
const int angolo_61 = 250;  //ritorno

byte var1;
byte var2;

byte var[16] = 
{
  B00000000,// A in
  B00000000,// A out
  B00000000,// B in
  B00000000,// B out
  B00000000,// C in
  B00000000,// C out
  B00000000,// D in  
  B00000000,// D out
  B00000000,// griper_1 in
  B00000000,// griper_1 out
  B00000000,// griper_2 in
  B00000000,// griper_2 out
  B00000000,// push_1 in
  B00000000,// push_1 out
  B00000000,// push_2 in
  B00000000,// push_2 out
};

byte stato_pulsante;
byte stato_ciclo;
byte k;
char fila;
int ritardo;
int ritardo_1;

byte fase;
byte stato;
int angolo;

long tempo_0;
int delta_t;

void setup()
{
  pinMode(sensoreAngolo, INPUT_PULLUP);  //interrupt
  attachInterrupt(0, ciclo, RISING);

  pinMode(FineCorsa, INPUT_PULLUP);
  //  attachInterrupt(0, stepper, FALLING);

  pinMode(dataPin, OUTPUT);       //Configure each IO Pin
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  digitalWrite(latchPin, LOW);

 // var1=B00000000;
  //var2=B00000000;

  pinMode(pin_carpet, OUTPUT);
  digitalWrite(pin_carpet, HIGH);

  pinMode(pulsante, INPUT_PULLUP);
  stato_pulsante = 0;

  stato = 0;
  angolo = 0;
  fila = 'p';
  fase = 0;
  k = 1;
  ritardo = 500;
  ritardo_1 = 3000;
  pinMode(13, OUTPUT);
  digitalWrite(13,LOW);
  Serial.begin(115200);
  Serial.println("Pronto");
  
  tempo_0 = 0;
  delta_t = 0;
}

lo sketch completo è lungo se serve lo posto

grazie per le risposte
come metto queste resistenze, le posso mettere tutte UP o DOWN oppure le devo mettere a seconda di come ho settato i pin nel setup()?

stefa24:
come metto queste resistenze, le posso mettere tutte UP o DOWN oppure le devo mettere a seconda di come ho settato i pin nel

Metti delle R da 47k tra il pin e 5V/ GND a seconda dello stato logico per tenere disattivato il dispositivo.

La programmazione avviene sui pin SPI che hai collegato allo shift register. E' normale che switchano durante la programmazione.
Usa altri pin e non 10,11,12,13.

Ciao

flz47655:
La programmazione avviene sui pin SPI che hai collegato allo shift register. E' normale che switchano durante la programmazione.
Usa altri pin e non 10,11,12,13.

Se usa il bootloader quei pin non hanno nulla a che vedere con la programmazione, eventualmente spostare solo il pin 13, se usato, perché è quello del led che lampeggia dopo un reset.

astrobeed:
Se usa il bootloader quei pin non hanno nulla a che vedere con la programmazione, eventualmente spostare solo il pin 13, se usato, perché è quello del led che lampeggia dopo un reset.

Si vero, visto che però non ha specificato se carica sketch da USB o no, meglio avvertirlo.

ciao
grazie provvedo a aggiungere le resisstenze

poi se usa 74hc595+ULN2503, ipin di uscita del ULN sono casuali e non controllati da Arduino. Devi mettere a +5V con una resistenza il pin OE (pin 13 del 595).
Ciao Uwe

ciao
da quello che mi dite e da quello che ho letto sul datasheet, il pin OE posto H manda OFF lo shift register ma poi non lo devo devo mandare L, per far lavorare lo shift register?

stefano

74hc595+uln2803.pdf (8.89 KB)

stefa24:
ciao
da quello che mi dite e da quello che ho letto sul datasheet, il pin OE posto H manda OFF lo shift register ma poi non lo devo devo mandare L, per far lavorare lo shift register?

stefano

se metti una resistenza pullup quando l' uscita Arduino é a alta impedenza il segnale é HIGH e dopo, quango il pin é definito come uscita il segnale é quello che piloti con l' uscita.
Ciao Uwe

ciao
quindi metto OE alto con la resistenza e poi lo connetto ad un pin di arduino settato come output e che mando L nel setup, mi serve un 4° filo come immaginavo

Stefano