Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Semplice Test deviatori o finecorsa con Arduino

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto Utentexyz, Foto UtenteWALTERmwp

0
voti

[21] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto UtenteMarcoFR » 16 mag 2020, 18:12

credo di aver danneggiato rduino, ora anche scollegando tutti i fili dalla scheda ottengo sul pin 2 HIGH fisso e sul pin 3 un alternarsi di HIGH e LOW ....
rispondo a lucaking: si l'IDE è la 1.8.11, ho win7
Avatar utente
Foto UtenteMarcoFR
5 3
New entry
New entry
 
Messaggi: 54
Iscritto il: 21 giu 2016, 19:03

0
voti

[22] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto Utenteedgar » 16 mag 2020, 18:17

MarcoFR ha scritto:credo di aver danneggiato rduino

Hai usato qualche tensione strana? I micro ATmega sono molto robusti, addirittura un ATmega8 mi è sopravvissuto all'inserimento invertito nello zoccolo!
Avatar utente
Foto Utenteedgar
6.477 3 5 8
Master
Master
 
Messaggi: 3283
Iscritto il: 15 set 2012, 22:59

0
voti

[23] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto UtenteMarcoFR » 16 mag 2020, 18:24

edgar ha scritto:Hai usato qualche tensione strana? (...)

errore banale nella programmazione e insistevo con quello sketch ... risolto.

secondo voi per evitare rimbalzi di tensione da quanto devono essere le resistenze? sto provando con 400 ohm ma mi da qualche problemino, mettendone 2 in serie non cambia, ne ho provata una da 220kohm ma non passa corrente, idee?
Ultima modifica di Foto UtenteWALTERmwp il 17 mag 2020, 3:15, modificato 1 volta in totale.
Motivazione: Ridotta citazione, l'integrale richiamo non è necessario
Avatar utente
Foto UtenteMarcoFR
5 3
New entry
New entry
 
Messaggi: 54
Iscritto il: 21 giu 2016, 19:03

0
voti

[24] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto Utentelucaking » 16 mag 2020, 19:17

Mi sembra strano, visto che i pin configurati come input dovrebbero avere un impedenza di ingresso attorno ai 100 Mohm, 220 kohm di pulldown non mi sembra possano creare problemi.
Non so che dirti, a me con le resistenze da 220 kohm funziona anche alimentando il deviatore con i 3,3V di arduino .

Con delle semplici resistenze non vedo come tu possa attenuare gli spike.
I circuiti antirimbalzo, possono partire dal semplice filtro RC a salire, con grado di complicazione e funzionalità crescente.
Si potrebbe anche implementare via software, ma dovendo gestire i due interrupt è decisamete fuori dalle mie capacità.
Avatar utente
Foto Utentelucaking
1.078 2 5 8
Expert
Expert
 
Messaggi: 961
Iscritto il: 29 mag 2015, 14:28

0
voti

[25] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto UtenteMarcoFR » 16 mag 2020, 20:18

forse c'è una svolta ragazzi, ho riscritto il codice partendo dal creare un semplice cronometro in cui è arduino stesso a dettare i tempi con delay (per la cronaca ogni 1000 di delay, millis mi misura 8millisecondi in piu ) e poi ho creato la funzione richiamata direttamente dall'interrupt senza andare a riconoscere i vari stati, le interrupt faranno tutto il lavoro di innesco
questo è il codice:
Codice: Seleziona tutto
  int  durata, contatore;
  unsigned long inizio, fine;

void setup() {
  Serial.begin(9600);
  attachInterrupt( digitalPinToInterrupt(2) , crono , CHANGE);
  attachInterrupt( digitalPinToInterrupt(3) , crono , CHANGE);
}

void loop() {
  digitalRead(3);
  digitalRead(2);
}

void crono (){
  switch (contatore){
    //la prima volta che la interrupt chiama la funzione prende il tempo
    case (0):
        inizio = millis();
        contatore = 1;
    break;
    //la seconda chiamata dovrebbe essere conclusiva quindi riprende il tempo e fa la differenza
    case (1):
        fine = millis();
        if ( inizio > fine ){
           // non so quando resetta millis, ho ipotizzato 10 sec
          inizio = inizio + 100000 ;
        }else{
          durata = fine - inizio;         
        }
        Serial.print("questa è la durata:");
        Serial.println(durata);
        contatore = 0;
  }
}

funziona piuttosto bene ma a causa dei presunti rimbalzi mi crea appunto falsi contatti che mi lanciano piu volte del previsto le interrupt, quindi i risultati teoricamente non sono validi MA, ricevo valori tra 0 e 2 ms di solito, volendo aumentare fisicamente questi intervalli ho provato a premere il finecorsa molto lentamente, in modo da prolungare il lasso di tempo che impiega per scattare la molla, ebbene ho ricevuto in 2 occasioni 10ms, quindi credo che sia il codice esatto.
Detto ciò credo di avere problemi anche con la funzione "attachInterrupt" perché pur cambiando la modalità (terzo parametro) non vedo differenze nelle mie prove su prove...
forse domani provo qualche deviatore tipo BTicino e quello che rimedio in casa.
Pareri?
Comunque grazie per l'assistenza in ogni caso!
sarei curioso se qualcuno di voi potesse replicare il circuito con questo sketch e confrontare i risultati
Avatar utente
Foto UtenteMarcoFR
5 3
New entry
New entry
 
Messaggi: 54
Iscritto il: 21 giu 2016, 19:03

0
voti

[26] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto UtenteIlGuru » 16 mag 2020, 21:11

MarcoFR ha scritto:anche scollegando tutti i fili dalla scheda ottengo sul pin 2 HIGH fisso e sul pin 3 un alternarsi di HIGH e LOW


O ci sono le pull-ups attive sui PIN che usi per le external interrupt o arducoso si è preso un virus e va cambiato.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.444 1 10 13
Master
Master
 
Messaggi: 1539
Iscritto il: 31 lug 2015, 23:32

0
voti

[27] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto Utentelucaking » 16 mag 2020, 21:16

Penso che tu abbia fatto tutto ciò che NON si deve fare in una ISR.
Dai una letta a questa discussione dove se ne è parlato di recente.
Avatar utente
Foto Utentelucaking
1.078 2 5 8
Expert
Expert
 
Messaggi: 961
Iscritto il: 29 mag 2015, 14:28

0
voti

[28] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto Utentelucaking » 16 mag 2020, 21:24

E anche se non sarà la fonte più autorevole leggi anche questa.
https://www.arduino.cc/reference/en/lan ... interrupt/
Avatar utente
Foto Utentelucaking
1.078 2 5 8
Expert
Expert
 
Messaggi: 961
Iscritto il: 29 mag 2015, 14:28

0
voti

[29] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto UtenteMarcoFR » 16 mag 2020, 23:18

Luca hai fatto un'ingresso a gamba tesa e da dietro però è stato utile, ho fatto una "piccola" modifica al codice in modo tale da ridurre a solamente una operazione le interrupt, non ho ancora pensato se scrivere un debouncer o meno dato che appunto dovrei andare a vedere proprio piccolissimi intervalli di tempo che verrebbero probabilmente filtrati ...
Codice: Seleziona tutto
  int  durata, contatore;
  unsigned long inizio, fine;
  volatile int attivatore = 0;

void setup() {
  Serial.begin(9600);
  attachInterrupt( digitalPinToInterrupt(2) , crono , CHANGE);
  attachInterrupt( digitalPinToInterrupt(3) , crono , CHANGE);
}

void loop() {
  digitalRead(3);
  digitalRead(2);
  if (attivatore != 0){
     switch (contatore){
    //la prima volta che la interrupt chiama la funzione prende il tempo
    case (0):
        inizio = millis();
        contatore = 1;
    break;
    //la seconda chiamata dovrebbe essere conclusiva quindi riprende il tempo e fa la differenza
    case (1):
        fine = millis();
        if ( inizio > fine ){
           // non so quando resetta millis, ho ipotizzato 10 sec
          inizio = inizio + 100000 ;
        }else{
          durata = fine - inizio;         
        }
        Serial.print("questa è la durata:");
        Serial.println(durata);
        contatore = 0;
  }
  attivatore=0;
  }
}

void crono (){
  attivatore++;
Avatar utente
Foto UtenteMarcoFR
5 3
New entry
New entry
 
Messaggi: 54
Iscritto il: 21 giu 2016, 19:03

1
voti

[30] Re: Semplice Test deviatori o finecorsa con Arduino

Messaggioda Foto Utentelucaking » 17 mag 2020, 9:03

Non è questione di cartellini gialli o rossi :D, era solo un modo per invitarti a documentarti quando approcci un problema, altrimenti è inevitabile il fallimento e il conseguente demoralizzarsi.
Inoltre se il tempo perso in tentativi a caso (e fidati che parlo per esperienza) lo investissimo nello studio dei fondamentali, ce lo troveremmo la prossima volta.
Fare correttamente quello che cerchi di fare non è cosa così banale, e come ti ho gia detto ho scritto qualcosa solo perché speravo in qualche caziatone di qualche utente esperto in materia.

A tal proposito, ci ho preso gusto e mi permetto nuovamente :lol: :
Approccio che non ti porta da nessuna parte:
MarcoFR ha scritto:
Codice: Seleziona tutto
// non so quando resetta millis, ho ipotizzato 10 sec


Approccio che ti porta un POCO piu in la:
Una veloce ricerca, e una letta qui e poi qui e lo avresti impararlo una volta per tutte invece di ipotizzarlo.

Comunque sorvolando su un po' di cose, per quello che posso capire io il codice che hai scritto non credo faccia quello che vuoi.
Cosa succede se la seconda ISR che scatta non fosse dovuta da un evento sul pin 3 ma da un rimbalzo sul pin 2?
Avatar utente
Foto Utentelucaking
1.078 2 5 8
Expert
Expert
 
Messaggi: 961
Iscritto il: 29 mag 2015, 14:28

Precedente

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti