Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino, il mio contatore Geiger con Arduino

Avatar utente
zoomx
Messaggi: 144
Iscritto il: 28/04/2017, 9:27

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da zoomx » 28/04/2017, 17:39

E questo è anche vero!

In b_simboli.ino ho cambiato tutti gli array byte in const byte PROGMEM ma non so se così si introduce daccapo il problema della corruzione dei caratteri che hai avuto con la direttiva F.



Avatar utente
Datman
Messaggi: 410
Iscritto il: 29/09/2016, 22:33
Località: ROMA
Contatta:

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da Datman » 28/04/2017, 18:30

Non ho capito quale fosse la causa del problema. Così com'è, però, funziona perfettamente e lo spazio è sufficiente, perciò non l'ho "stuzzicato" oltre :)
Quando uno sketch è così voluminoso, devi sempre conservare la versione originale e fare piccole modifiche ogni volta; se no, in caso di problemi, non sai che cosa è problematico e che cosa no.


Gianluca
Canale Youtube: [External Link Removed for Guests]

Avatar utente
zoomx
Messaggi: 144
Iscritto il: 28/04/2017, 9:27

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da zoomx » 28/04/2017, 20:43

Anche a me è capitata una cosa identica ma con un altro tipo di schermo, non ricordo se OLED o TFT LCD a colori.

Riguardo al secondo problema... non è un problema visto che usi GitHub, hai sempre la possibilità di fare un fork e poi, se tutto va bene, fare un merge e poi ci sono sempre i commit con cui puoi fare confronti con le versioni precedenti.



Avatar utente
zoomx
Messaggi: 144
Iscritto il: 28/04/2017, 9:27

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da zoomx » 03/05/2017, 15:06

Leggendo qui [External Link Removed for Guests] la routine di interrupt andrebbe cambiata da così

Codice: [Local Link Removed for Guests]

void ContaAB() // INTERRUPT 0
{
detachInterrupt(0);  
DAB++;
if(TS) Tic(); // TIC-TIC SOFTWARE
particella=1;
//while(!(PIND&0x20)); // Usando "FALLING" (fronte di discesa) non dovrebbe servire.
attachInterrupt(0,ContaAB,FALLING);
}
a così

Codice: [Local Link Removed for Guests]

void ContaAB() // INTERRUPT 0
{
DAB++;
if(TS) Tic(); // TIC-TIC SOFTWARE
particella=1;
//while(!(PIND&0x20)); // Usando "FALLING" (fronte di discesa) non dovrebbe servire.
}
Il detach interrupt non è necessario in quanto, finché la routine non viene eseguita, non è possibile un nuovo interrupt sullo stesso pin. Stessa cosa per l'attach. E' anche possibile che il compilatore elimini queste istruzioni.
Poiché la priorita degli interrupt su pin è maggiore di quelli dei timer se il primo viene chiamato troppo spesso dovrebbe succedere un rallentamento di tutti glòi altri interrupt e delle funzioni millis e micros ma non ne sono certo, dovrei andare a vedere nelle librerie.



Avatar utente
Datman
Messaggi: 410
Iscritto il: 29/09/2016, 22:33
Località: ROMA
Contatta:

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da Datman » 03/05/2017, 15:28

Li ho messi perché ho visto che qualcuno aveva fatto così. Mi sono chiesto se servisse...


Gianluca
Canale Youtube: [External Link Removed for Guests]

Avatar utente
zoomx
Messaggi: 144
Iscritto il: 28/04/2017, 9:27

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da zoomx » 03/05/2017, 17:35

Se è per questo io sono dovuto andarmi a leggere il post di cui il link, mi pareva fosse così ma non ne ero certo anche perché mi par di ricordare che in altri micro potesse capitare il richiamo dell'interrupt mentre si è già in interrupt. Per cui prima mi son documentato.
Come ho scritto prima, può darsi che nel binario non cambi nulla in quanto il compilatore sembra che sia abbastanza furbo, a volte troppo.

Il rallentamento dell'orologio software è una mia ipotesi, per provarla bisognerebbe fornire all'Arduino tantissimi impulsi.



Avatar utente
eliocor
Senior
Messaggi: 431
Iscritto il: 10/10/2015, 23:28
Località: Europe
Contatta:

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da eliocor » 03/05/2017, 17:57

L'attivazione del tick software dentro l'interrupt POTREBBE dare problemi se avviene un altro impulso in tempi molto brevi.
OK, il tempo morto di un normale tubo va intorno ai 10us, però sarebbe da evitare tale opzione nell'interrupt.
Ha più senso settare un flag e fare il tick esternamente all'interrupt.


٩(•̮̮̃•̃)۶ - Excusatio non petita, accusatio manifesta

Avatar utente
Datman
Messaggi: 410
Iscritto il: 29/09/2016, 22:33
Località: ROMA
Contatta:

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da Datman » 03/05/2017, 18:05

Ci avevo pensato e l'ho reso escludibule, però credo che il problema non ci sia, perché il Tic è un tone() che, una volta avviato, libera il ciclo.


Gianluca
Canale Youtube: [External Link Removed for Guests]

Avatar utente
zoomx
Messaggi: 144
Iscritto il: 28/04/2017, 9:27

Re: Contatore Geiger: in attesa dei tubi... Ovvero: Geigerino 1.8U, il mio contatore Geiger con Arduino

Messaggio da zoomx » 03/05/2017, 22:15

Tone usa un interrupt e la routine è la seguente (tratto da [External Link Removed for Guests])

Codice: [Local Link Removed for Guests]

ISR(TIMER1_COMPA_vect)
{
  if (timer1_toggle_count != 0)
  {
    // toggle the pin
    *timer1_pin_port ^= timer1_pin_mask;

    if (timer1_toggle_count > 0)
      timer1_toggle_count--;
  }
  else
  {
    disableTimer(1);
    *timer1_pin_port &= ~(timer1_pin_mask);  // keep pin low after stop
  }
}
In questo caso viene usato il timer 1. Il timer usato cambia a seconda del microcontrollore ma il codice è identico.
Ora quello che succede è che se durante l'esecuzione di questa routine capita l'interrupt al pin di conteggio, questa routine si interrompe e viene eseguito l'altro interrupt perché a priorità più alta. Finito l'altro interrupt l'esecuzione torna a questo codice nel punto in cui si era interrotto. Io mi chiedo se è possibile che al crescere degli interrupt al pin il rallentamento di questa funzione diventa significativo e si alteri il tempo totale.
Datman tu mi hai suggerito una possibile prova. Faccio emettere un tono all'arduino e contemporaneamente fornisco una onda quadra al piedino del conteggio. Devo trovare una sorgente di onde quadre (un altro arduino) e un modo economico per misurare la frequenza di tone visto che non ho una strumentazione adatta ma un counter comprato in kit su eBay.




Rispondi

Torna a “Strumenti Autocostruiti”