Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.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ł

20 Kwi 2017 07:26 1113 8
  • 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.
  • Moderator Mikrokontrolery Projektowanie
    Zastosowany tam mikrokontroler ATmega328 ma przerwania "pin change (PCINT)" na każdym pinie .
    Czytaj dokumentację mikrokontrolera.
  • 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?
  • Poziom 37  
    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
  • 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.
  • Poziom 37  
    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ę".
  • 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.
  • 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.
  • 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.