• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wielowątkowość - aplikacja inteligentny dom
#10
(09-03-2021, 21:23)Jarewa0606 napisał(a): "Przerwanie trwałoby 1/10 sekundy"

Jak dobrze napisany program to nawet poniżej 10us.... razy nawet 30 to i tak daje 300us.... No ale tu trzeba pomyśleć czy to nie był by sabotaż że nagle 30 przycisków aktywnych...


A moze trochę przesadziłem akurat tego co potrzebujesz, digitalread trwa około 4us  jak masz przerwanie PCINT to musisz sprawdzić który pin wiec 8x4= 32us będzie na to by odczytać który pin, a potem daje te 6us na przepisanie flagi to i tak za dużo mimo wszystko w 1ms powinieneś się wyrobić.  Wiec to nie jest 1/10s lecz 1/1000 sekundy....

No nie do końca się zgodzę - dziś zrobiłem testy. Teoria jedno , a życie co innego Smile  Muszę w jakiś sposób wykluczyć zjawiska drgania styków. Podczas załączania obwodów takie przerwania nie wywołuje się raz, tylko nawet kilka razy.  Są to wartości losowe.   Zrobiłem test mikroswichem na Arduino UNO.   Włączenie przycisku sprawia, że włączenie diody odbywało się po kilka razy - całkowicie losowe zjawisko.    Przerwania wykonywały się po kilka razy.  Czasami nawet 8 razy na jedno wciśnięcie przycisku.   Dlatego aby tego uniknąć musiałem brać pod uwagę impulsy o czasie 350 milisekundy - czyli jest to około 1/3 sekundy.  Mógłbym zrobić 1/10 ale wówczas  większość prób kończyłaby się tym, że dioda zapalałaby się, a potem mogła by się znowu zapalić i zgasnąć...

No i skoro to już mamy ustalone. To można byłoby zrobić jakiś układ kształtowania impulsów przy każdym włączniku, ale to nie gwarantuje, że będą pojawiać się takie zjawiska same z siebie przy większych odległościach kabli itp. 

Co do PCINT to tak jak już wspomniałem nie da się na wszystkich Pinach ich używać.   Zwróć uwagę, że na Controlino Mega jest wyprowadzonych 16 wejść analogowych.   Wszystkie są mi potrzebne.    Do tego udało mi się za pomocą przedniego panelu w rejestrach zmieniać wyjścia 2A na wejścia.    Tak więc mam do dyspozycji mniej więcej po tyle samo wejść i wyjść. 



Kod:
// na płytkę ARDUINO UNO

const int buttonPin = 2 ;
volatile bool ledState = LOW;


void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(2),toggleLedISR, HIGH);
 
}

void loop() {
// sztuczne opóźnienie
delay(500) ;
}


void toggleLedISR (){
  static unsigned long lastTime;
  unsigned long timeNow = millis();
 
    unsigned long por = timeNow - lastTime;

  if (por > 350) {// drganie styków -  nie reaguje na załączenie poniżej 50 ms
   
      ledState =! ledState ;
   digitalWrite(LED_BUILTIN,  ledState);
  
   }
  
  lastTime = timeNow ;
 
}
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Wielowątkowość - aplikacja inteligentny dom - przez kamil2234 - 10-03-2021, 00:40

Skocz do:


Przeglądający: 1 gości