Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino zliaczenie impulsów z kilku źródeł

JokoPS 20 Kwi 2017 07:26 489 8
  • #1 20 Kwi 2017 07:26
    JokoPS
    Poziom 15  

    Witam.

    Mam pytanie czy za pomocą Arduino Uno/Nano można zliczać impulsy z więcej niż dwóch źródeł? Potrzebije odczytywać prędkość obrotową 4 wentylatorów. Wiem jak to zrobić dla jednego/dwóch stosując przerwania (Arduino Uno ma je tylko na pinie 2 i 3), ale jak rozwiązać kwestie odczytu obrotów z kilku wentylatorów?

    Z góry dzięki za podpowiedzi.

  • #3 20 Kwi 2017 13:40
    JokoPS
    Poziom 15  

    Dziękuje za odpowiedź czy jedyna różnics pomiędzy prawaniami INTx a PCINTx to to ze PCINT reguje tylko na zmiane stanu na wyjsciu?

    Czy przewania PCINT wywoluje się tak samo jak INTx?

    I jak rozumiem by wszystko działało poprawnie to dla każdej odczytywanej prędkości wnetylatora muso być oddzielne przerwanie tak?

  • #4 20 Kwi 2017 14:14
    krzysiek_krm
    Poziom 26  

    Witam,
    przypuszczalnie te sygnały są na tyle wolne w porównaniu z szybkością działania procesora, że można to zrobić całkowicie programowo.
    Dla każdego z sygnałów trzeba pamiętać "poprzedni stan".
    Trzeba dostatecznie szybko "kręcić się" w nieskończonej pętli, sprawdzając zmianę poziomu sygnału. W zależności od potrzeby, można wykrywać każdą zmianę, ewentualnie tylko zmianę niski - wysoki albo odwrotnie. Czas pomiędzy zmianami można mierzyć funkcją, o ile dobrze pamiętam, "micros".

    Pozdrawiam

  • #5 20 Kwi 2017 14:30
    dondu
    Moderator Mikrokontrolery Projektowanie

    Są 3 przerwania PCINT - spróbuj przeczytać rozdziały:
    16. Interrupts
    17. EXINT - External Interrupts
    w dokumentacji mikrokontrolera.

    Korzystaj z nich, bo po to właśnie są, a zaoszczędzisz moc obliczeniową mikrokontrolera w stosunku do sposobu, który opisał kol. krzysiek_krm.

  • #6 20 Kwi 2017 14:47
    krzysiek_krm
    Poziom 26  

    dondu napisał:
    Korzystaj z nich, bo po to właśnie są, a zaoszczędzisz moc obliczeniową mikrokontrolera

    wszystko fajnie, ale łatwe programowanie (IDE) pozwala na użycie tylko
    JokoPS napisał:
    Arduino Uno ma je tylko na pinie 2 i 3

    nawiasem mówiąc, w zależności od trybu, może reagować na poziom, jedno zbocze lub oba zbocza.
    Zagnieżdżenie kodu w innych przerwaniach wymaga zapewne kodowania "na własną rękę".

  • #7 20 Kwi 2017 14:50
    dondu
    Moderator Mikrokontrolery Projektowanie

    Należy rozwijać swoje umiejętności, by móc robić projekty jakie się chce, a nie jakie pozwala środowisko.

    @JokoPS
    Uzupełniając mój post za pomocą tych 3 przerwań możesz obsłużyć wszystkie piny PCINT jednocześnie.

  • #8 20 Kwi 2017 21:29
    JokoPS
    Poziom 15  

    krzysiek_krm napisał:
    przypuszczalnie te sygnały są na tyle wolne w porównaniu z szybkością działania procesora, że można to zrobić całkowicie programowo.

    Rozwiązanie programowe raczej nie wchodzi wgrę ponieważ oprócz wyświetlania obrotów program będzie zarządzał całym system chłodzenia wodnego komputera
    krzysiek_krm napisał:

    dondu napisał:
    Korzystaj z nich, bo po to właśnie są, a zaoszczędzisz moc obliczeniową mikrokontrolera

    wszystko fajnie, ale łatwe programowanie (IDE) pozwala na użycie tylko
    JokoPS napisał:
    Arduino Uno ma je tylko na pinie 2 i 3


    Czyli mam rozumieć że w środkowisku Arduino Ide nie można używać przerwać PCINTx?

    dondu napisał:
    Należy rozwijać swoje umiejętności, by móc robić projekty jakie się chce, a nie jakie pozwala środowisko.

    Jasne zgadzam się w 100%, na razie poznaje podstawy programowania itp.

  • #9 20 Kwi 2017 21:38
    tmf
    Moderator Mikrokontrolery Projektowanie

    @JokoPS A to zarządzanie systemem chłodzenia wodnego to wymaga mocy obliczeniowej, że hej... Nie szukaj problemów tam, gdzie ich nie ma. Wykorzystując przerwania możesz spokojnie zliczać impulsy sprzętowo (lini IRQ ci wystarczy), lub programowo, wykorzystując przerwanie timera, w którym będziesz sprawdzał stan sygnałów z wentylatorów. Do tego w pętli głównej programu sobie możesz zarządzać systemem i gwarantuję, że procesor będzie się nudził przez 90% czasu.
    Nawet w Arduino możesz korzystać z wszystkich możliwości procesora, jeśli czegoś nie ma wprost to przecież zawsze możesz programować bezpośrednio rejestry MCU lub stworzyć własną klasę obsługi potrzebnego układu.
    BTW, skoro poznajesz podstawy to może warto zastanowić się nad C i porzucić Arduino? Arduino jest dobre dla niedzielnego programisty, który chce zrobić jeden projekt na szybko.

Szybka odpowiedź lub zadaj pytanie
Dziękuję Ci. Ta wiadomość oczekuje na moderatora.
 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME