Stránka 2 z 4

Re: Ošetření tlačítka v přerušení

Napsal: 04 bře 2020, 18:13
od kiRRow
dostatečně zmateně ...

... ideálně ... hoď sem kód (okomentovaný), schéma zapojení ... a i třeba video stím co to dělá/nedělá není marný ... takhle budem všichni jenom hádat a tipovat.

Re: Ošetření tlačítka v přerušení

Napsal: 04 bře 2020, 18:46
od Dene Elanik
// rel.: 4.3.2020
// vysílač/terč HasTim6

#include <SPI.h>
#include <RH_RF22.h>
#include <avr/interrupt.h>
byte TERC = 4;
volatile bool PreruseniBylo = false;

// Singleton instance of the radio
RH_RF22 rf22;

void setup() {
pinMode (TERC,INPUT);
//sei();
Serial.begin(9600);
if (!rf22.init())
Serial.println("RF22 init failed"); // Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36

attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
Serial.println("Start pgm");

}

void loop()
{
if (PreruseniBylo == true) {
if (digitalRead(TERC)==1)
{ //uint8_t data[] = "Terč shozen";
// rf22.send(data, sizeof(data));
Serial.println("Terč shozen");
}
if (digitalRead(TERC)==0)
{ //uint8_t data[] = "Terč nasazen";
// rf22.send(data, sizeof(data));
Serial.println("Terč nasazen");
}

}
PreruseniBylo = false;
attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
}

void TercNasazenShozen()
{
detachInterrupt(digitalPinToInterrupt(3));
PreruseniBylo = true;
}


Obrázek1.png

Re: Ošetření tlačítka v přerušení

Napsal: 04 bře 2020, 20:34
od ondraN
Nějak nepobírám to zapojení tlačítka. Proč jsou piny 3 a 4 spojené? V tom případě bude transmit generovat přerušení tlačítka. Asi je ale chyba ve schématu.

Re: Ošetření tlačítka v přerušení

Napsal: 04 bře 2020, 21:26
od Dene Elanik
Potřebuji rozlišit, zda je tlačítko sepnuté nebo rozepnuté, proto to dělám přes vstup 4

Re: Ošetření tlačítka v přerušení

Napsal: 04 bře 2020, 22:32
od RomanB
Špatně chápeš definici pinů a v tom případě to máš také špatně zapojené. Ty to připojuješ na fyzické čísla pinů čipu, pro tebe mají platit ty popisy pinů v rámečku desky UNA. Na Rx a Tx piny, neboli pin 0 a pin 1 nic nezapojuj, propojkou ti Tx pin vytváří ten interupt a na definovaném pinu 4 vlastně nemáš to tlačítko vůbec zapojené

Re: Ošetření tlačítka v přerušení

Napsal: 05 bře 2020, 08:25
od Dene Elanik
Omlouvám se, ve schematu je chyba, spoje mají být posunuté o dva piny.
V zapojení na desce je to ovšem správně, jinak by nefungovalo nic.

Re: Ošetření tlačítka v přerušení

Napsal: 05 bře 2020, 08:26
od Dene Elanik
Obrázek1.png

Re: Ošetření tlačítka v přerušení

Napsal: 05 bře 2020, 11:06
od ondraN
Dovolil jsem si ten kod dát do správného zobrazení

Kód: Vybrat vše

// rel.: 4.3.2020
// vysílač/terč HasTim6

#include <SPI.h>
#include <RH_RF22.h>
#include <avr/interrupt.h>
byte TERC = 4;
volatile bool PreruseniBylo = false;

// Singleton instance of the radio
RH_RF22 rf22;

void setup() { 
pinMode (TERC,INPUT);
//sei();
Serial.begin(9600);
if (!rf22.init())
Serial.println("RF22 init failed"); // Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36

attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE);
Serial.println("Start pgm");

}

void loop()
{
if (PreruseniBylo == true) {
if (digitalRead(TERC)==1) 
{ //uint8_t data[] = "Terč shozen";
// rf22.send(data, sizeof(data)); 
Serial.println("Terč shozen"); 
}
if (digitalRead(TERC)==0) 
{ //uint8_t data[] = "Terč nasazen"; 
// rf22.send(data, sizeof(data)); 
Serial.println("Terč nasazen");
}

}
PreruseniBylo = false;
attachInterrupt (digitalPinToInterrupt(3), TercNasazenShozen, CHANGE); 
}

void TercNasazenShozen() 
{ 
detachInterrupt(digitalPinToInterrupt(3));
PreruseniBylo = true;
}
Jaká je kapacita C2?

Re: Ošetření tlačítka v přerušení

Napsal: 05 bře 2020, 18:24
od Dene Elanik
1 mikro, při delších testech chybovost asi 5%.
Vzhledem k tomu, že se jedná o měření času v hasičských soutěžích, je třeba 100% spolehlivost.
Nevím, co by mi hasiči udělali, kdybych jim nezměřil čas.
Zkusím ještě spouštět magnetickým kontaktem, popř. použít KO s 40106

Re: Ošetření tlačítka v přerušení

Napsal: 05 bře 2020, 19:06
od ondraN
Mě se moc nepozdává to zapojení obvodu tlačítka. Při stisku natvrdo zkratuje C2, a ikdyž je to jen 1M, může to být docela problém. Zapojil bych rezistor cca 1k (max 2k) do série s tlačítkem. Časová konstanta při zapnutí bude 1ms (2ms), při vypnutí 10ms.
Nebo udělat opravdu bezzákmitové tlačítko s RS klopným obvodem, ale to pak musí mít přepínací kontakt.