NOWE POSTY | NOWE TEMATY | POPULARNE | STAT | RSS | KONTAKT | REJESTRACJA | Login: Hasło: rss dla

HOME » TECHNIKA, KONSTRUKCJE AMATORSKIE » LICZNIK NA ARDUINO UNO

Przejdz do dołu stronyStrona: 1 / 2>>>    strony: [1]2

Licznik na Arduino Uno

  
ante1000
15.11.2023 11:51:16
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 312 #8130424
Od: 2016-1-20
Proszę o poradę, czy da się zastąpić (bez zmiany kodu lub z niewielkimi zmianami) moduł Arduino Nano innym modułem który będzie pasował do istniejącej płytki, ale jest trochę szybszy. U mnie moduł Nano jest w stanie zliczać częstotliwość do około 5-6MHz, a chciałbym do 10-12 MHz. Sygnał podany jest na wejście Timera 1 (TC1), gdzie zliczane są impulsy i overflowy. Dziękuję bardzo ! Aleks
_________________


  
Electra29.04.2024 09:24:44
poziom 5

oczka
  
sp9ds
15.11.2023 11:57:14
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130426
Od: 2022-5-27
    ante1000 pisze:

    Proszę o poradę, czy da się zastąpić (bez zmiany kodu lub z niewielkimi zmianami) moduł Arduino Nano innym modułem który będzie pasował do istniejącej płytki, ale jest trochę szybszy. U mnie moduł Nano jest w stanie zliczać częstotliwość do około 5-6MHz, a chciałbym do 10-12 MHz. Sygnał podany jest na wejście Timera 1 (TC1), gdzie zliczane są impulsy i overflowy. Dziękuję bardzo ! Aleks


Raczej tak, ale to zależy od tego co w tym kodzie napisałeś. Kod Arduino powinien z założenia być przenośny, między wszystkimi platformami, ale w momencie jak wychodzisz poza podstawowe funkcjonalności Arduino zaczynają się komplikacje. Skoro mówisz o Timerze 1, pewnie grzebałeś w rejestrach? To tu jest właśnie ta komplikacja.
  
ante1000
15.11.2023 12:03:16
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 312 #8130430
Od: 2016-1-20
[quote=sp9ds]
    ante1000 pisze:



    Raczej tak, ale to zależy od tego co w tym kodzie napisałeś.


Nie ma tam wielkiej filozofii. Reset licznika, start licznika , liczenie na zboczu rosnącym, zliczanie ilości przepełnień, stop licznika. Parę komend typu TNCT1 itp...

_________________


  
sp9ds
15.11.2023 12:17:56
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130432
Od: 2022-5-27
[quote=ante1000]
    sp9ds pisze:

      ante1000 pisze:



      Raczej tak, ale to zależy od tego co w tym kodzie napisałeś.


    Nie ma tam wielkiej filozofii. Reset licznika, start licznika , liczenie na zboczu rosnącym, zliczanie ilości przepełnień, stop licznika. Parę komend typu TNCT1 itp...


No to te „komendy” to właśnie to co będziesz musiał dostosować do nowego procesora.
  
ante1000
15.11.2023 12:20:07
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 312 #8130436
Od: 2016-1-20


Ilość edycji wpisu: 3
    sp9ds pisze:


    No to te „komendy” to właśnie to co będziesz musiał dostosować do nowego procesora.



Ale co by podeszło w miejsce Nano ?
_________________


  
sp9ds
15.11.2023 12:28:44
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130445
Od: 2022-5-27
    ante1000 pisze:

      sp9ds pisze:


      No to te „komendy” to właśnie to co będziesz musiał dostosować do nowego procesora.



    Ale co by podeszło w miejsce Nano ?


Jakaś płytka, która ma ten sam pinout. Chińczycy sporo takich rzeczy robią.
  
ante1000
15.11.2023 12:34:30
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 312 #8130448
Od: 2016-1-20
    sp9ds pisze:


    Jakaś płytka, która ma ten sam pinout.


Tyle to sam wiem wesoły
_________________


  
sp9ds
15.11.2023 12:37:02
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130449
Od: 2022-5-27
    ante1000 pisze:

      sp9ds pisze:


      No to te „komendy” to właśnie to co będziesz musiał dostosować do nowego procesora.



    Ale co by podeszło w miejsce Nano ?


Na przykład to:
https://sklep.msalamon.pl/produkt/stm32-nucleo-g431kb-nucleo-32-z-stm32g431kbt6-arm-cortex-m4/

To jest oryginalna płytka ST Electronics, nic chińskiego. Jedna ważna rzecz! STM32 (jak i w sumie chyba wszystko co jest szybsze od AVRów) pracuje z 3.3V. Z drugiej strony podają, że można włożyć zamiast Arduino Nano... No tak, datasheet mówi, że na GPIO można podać do 5V.
  
djbpm
15.11.2023 12:42:17
poziom 4

Grupa: Użytkownik

Posty: 367 #8130452
Od: 2018-8-31


Ilość edycji wpisu: 1
O ile pamiętam (a robiłem coś podobnego na AVR 18 lat temu, tak że mogłem coś pomieszać), to normalne wejście timera wyrobi się tylko do około 1/3 częstotliwości zegara, i to by się zgadzało z twoimi osiągnięciami. Zegar masz 16 MHz a / 3 = 5,3 MHz. Maksymalny zegar ATmega328 to 20 MHz tak że wiele nie przyspieszysz zmieniając zegar. Natomiast przypomina mi się, że można było to obejść poprzez tryb asynchroniczny timera, który umożliwiał taktowanie timera z zewnętrznego pinu i dzięki temu można było liczyć wyższe częstotliwości. Wtedy nie liczysz cykli na pinie, tylko liczysz cykle zegara tym timerem. Niby to samo a nie to samo. wesoły

Zmiana na STM32 by pewnie pomogła, natomiast to jest zupełnie inny procesor, z dużo bardziej rozbudowanymi peryferiami, i przeniesienie kodu może nie być takie łatwe.
  
sp9ds
15.11.2023 12:49:58
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130453
Od: 2022-5-27
    djbpm pisze:

    O ile pamiętam (a robiłem coś podobnego na AVR 18 lat temu, tak że mogłem coś pomieszać), to normalne wejście timera wyrobi się tylko do około 1/3 częstotliwości zegara, i to by się zgadzało z twoimi osiągnięciami. Zegar masz 16 MHz a / 3 = 5,3 MHz. Maksymalny zegar ATmega328 to 20 MHz tak że wiele nie przyspieszysz zmieniając zegar. Natomiast przypomina mi się, że można było to obejść poprzez tryb asynchroniczny timera, który umożliwiał taktowanie timera z zewnętrznego pinu i dzięki temu można było liczyć wyższe częstotliwości. Wtedy nie liczysz cykli na pinie, tylko liczysz cykle zegara tym timerem. Niby to samo a nie to samo. wesoły

    Zmiana na STM32 by pewnie pomogła, natomiast to jest zupełnie inny procesor, z dużo bardziej rozbudowanymi peryferiami, i przeniesienie kodu może nie być takie łatwe.


Może i uda mu się namówić tego AVRa do liczenia wyższych częstotliwości, ale też przy końcu skali to liczenie jest mniej precyzyjne oraz przecież reszta procesora musi się wyrobić pomiędzy przerwaniami timera - przecież nie liczy dla samego liczenia, nie? ,)

No tak, nikt nie mówił, że będzie łatwo. Natomiast jest absolutnie wykonalne. Jeżeli do obsługi wyświetlacza (czy cokolwiek robi z tą zmierzoną częstotliwością) używa bibliotek arduino to prawie na pewno na STMie też zadziałają wesoły
Pozostaje ten nieszczęsny licznik - może do tego też znajdzie jakąś bibliotekę?
  
SP5WWP
15.11.2023 12:53:35
poziom 3

Grupa: Użytkownik

QTH: KO02IK

Posty: 123 #8130456
Od: 2019-12-4
Z tego co wiem, to w AVRach timery mają synchronizator zbudowany z przerzutnika D na wejściu (i w ogóle na wejściach INTx). W PICach tego nie ma, dlatego PICem można mierzyć wyższe częstotliwości niezależnie od zegara.
  
Electra29.04.2024 09:24:44
poziom 5

oczka
  
djbpm
15.11.2023 13:22:56
poziom 4

Grupa: Użytkownik

Posty: 367 #8130460
Od: 2018-8-31
    sp9ds pisze:

    przy końcu skali to liczenie jest mniej precyzyjne
W trybie asynchronicznym 12 MHz będzie daleko przed końcem skali.
    sp9ds pisze:

    reszta procesora musi się wyrobić pomiędzy przerwaniami timera
ale te przerwania od timera mogą być bardzo krótkie bo w funkcji obsługującej przerwanie dodajesz +1 do zmiennej i to wszystko.
    sp9ds pisze:

    Pozostaje ten nieszczęsny licznik - może do tego też znajdzie jakąś bibliotekę?
No nie sądzę, bo inicjalizacja sprzętu w STM32 jest zupełnie inna niż w AVR. Być może biblioteki Arduino to ogarniają, nie wiem, nigdy nie używałem Arduino. Ale nie wydaje mi się, że da się napisać taką bibliotekę, która by była tak uniwersalna, żeby tak samo konfigurowała timer w STM32 jak w AVR, i udostępniała wszystkie funkcjonalności tych peryferiów. One się zupełnie różnią sposobem działania. To tak jakbyś miał jedną bibliotekę do wyświetlacza 7segmentowego i tą samą do wyświetlacza graficznego, bo przecież to wyświetlacz i to wyświetlacz. (no ale może są teraz takie cuda)
Ja byłem zwolennikiem pisania kodu z dokumentacją do danego mikrokontrolera, a nie używania bibliotek do konfiguracji timerów. (byłem, bo od wielu lat już się tym nie zajmuję)
    SP5WWP pisze:

    Z tego co wiem, to w AVRach timery mają synchronizator zbudowany z przerzutnika D na wejściu (i w ogóle na wejściach INTx).
Tak jest, i stąd to ograniczenie do około 1/3 (teoretycznie do 1/2) zegara. W trybie asynchronicznym przerzutnik jest pomijany. Cykle idą wprost na preskaler.
  
sp9ds
15.11.2023 13:36:03
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130466
Od: 2022-5-27
    djbpm pisze:

    No nie sądzę, bo inicjalizacja sprzętu w STM32 jest zupełnie inna niż w AVR. Być może biblioteki Arduino to ogarniają, nie wiem, nigdy nie używałem Arduino. Ale nie wydaje mi się, że da się napisać taką bibliotekę, która by była tak uniwersalna, żeby tak samo konfigurowała timer w STM32 jak w AVR, i udostępniała wszystkie funkcjonalności tych peryferiów. One się zupełnie różnią sposobem działania. To tak jakbyś miał jedną bibliotekę do wyświetlacza 7segmentowego i tą samą do wyświetlacza graficznego, bo przecież to wyświetlacz i to wyświetlacz. (no ale może są teraz takie cuda)
    Ja byłem zwolennikiem pisania kodu z dokumentacją do danego mikrokontrolera, a nie używania bibliotek do konfiguracji timerów. (byłem, bo od wielu lat już się tym nie zajmuję)


Przecież dana biblioteka nie musi obsługiwać wszystkich możliwych scenariuszy użycia peryferiów. Wystarczy, że jest ustalone co ma robić (liczyć impulsy czy wywoływać przerwanie co jakąś jednostkę czasu) i po prostu zaimplementować to na obu (a nawet więcej niż dwóch) procesorach. Czy taka biblioteka istnieje? Nie wiem. Natomiast nie widzę przeciwwskazań. Istnieją takie wielo-platformowe biblioteki do wielu peryferiów.

Co do "Ja byłem zwolennikiem pisania kodu z dokumentacją do danego mikrokontrolera, a nie używania bibliotek do konfiguracji timerów." - no cóż, można za każdym razem odkrywać koło na nowo, albo użyć tego, co napisał ktoś inny. Ja wolę skupić się na logice, a to, co można oddelegować do już napisanego kodu, oddelegować.
  
djbpm
15.11.2023 14:06:24
poziom 4

Grupa: Użytkownik

Posty: 367 #8130470
Od: 2018-8-31


Ilość edycji wpisu: 1
    sp9ds pisze:

    Przecież dana biblioteka nie musi obsługiwać wszystkich możliwych scenariuszy użycia peryferiów.(..) można za każdym razem odkrywać koło na nowo, albo użyć tego, co napisał ktoś inny. Ja wolę skupić się na logice, a to, co można oddelegować do już napisanego kodu, oddelegować.
Przez to, że nie zaglądnąłeś do datasheeta mikrokontrolera, to nie potrafisz wykorzystać jego funkcjonalności. Nie wiesz, że da się na nim zrobić dokładnie to, co chcesz osiągnąć, tylko trzeba to zrobić troszkę inną logiką niż pierwotnie sobie wymyśliłeś. Wiesz tylko tyle, ile biblioteka obsługuje. W efekcie wywalasz ten mikrokontroler i bierzesz inny, który się wyrobi po twojemu, bo raz wymyślona logika jest święta. Czy to się opłaca? Może czasami... wesoły
  
sp9ds
15.11.2023 14:35:08
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130488
Od: 2022-5-27
    djbpm pisze:

      sp9ds pisze:

      Przecież dana biblioteka nie musi obsługiwać wszystkich możliwych scenariuszy użycia peryferiów.(..) można za każdym razem odkrywać koło na nowo, albo użyć tego, co napisał ktoś inny. Ja wolę skupić się na logice, a to, co można oddelegować do już napisanego kodu, oddelegować.
    Przez to, że nie zaglądnąłeś do datasheeta mikrokontrolera, to nie potrafisz wykorzystać jego funkcjonalności. Nie wiesz, że da się na nim zrobić dokładnie to, co chcesz osiągnąć, tylko trzeba to zrobić troszkę inną logiką niż pierwotnie sobie wymyśliłeś. Wiesz tylko tyle, ile biblioteka obsługuje. W efekcie wywalasz ten mikrokontroler i bierzesz inny, który się wyrobi po twojemu, bo raz wymyślona logika jest święta. Czy to się opłaca? Może czasami... wesoły

Czekaj, to Ty robisz licznik częstotliwości w przerwaniu dodając +1 zamiast wykorzystując dedykowany licznik ,)
  
djbpm
15.11.2023 14:55:47
poziom 4

Grupa: Użytkownik

Posty: 367 #8130499
Od: 2018-8-31
    sp9ds pisze:

    Czekaj, to Ty robisz licznik częstotliwości w przerwaniu dodając +1 zamiast wykorzystując dedykowany licznik ,)
A skąd ten wniosek? W przerwaniu zliczam przepełnienia tego licznika impulsów. W AVR liczniki mają 8 lub 16 bitów, a więc mogą doliczyć do 255 lub 65535. Ew można użyć preskalera ale wtedy tracimy na rozdzielczości. Potrzebny jest jeszcze drugi licznik, który odlicza czas, np. co sekundę, i co ten czas następuje przeliczenie tego co zliczył licznik przepełnień i sam licznik na wynik.
  
ante1000
15.11.2023 18:07:38
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 312 #8130554
Od: 2016-1-20


Ilość edycji wpisu: 2
Czyli nie ma "szybszej wersji Nano" i bez przesiadania się na STM lub inną platformę i modyfikowania kodu, dużo więcej nie wyciśnie się z AVR ?
_________________


  
sp9ds
16.11.2023 13:44:15
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130774
Od: 2022-5-27


Ilość edycji wpisu: 2
    ante1000 pisze:

    Czyli nie ma "szybszej wersji Nano" i bez przesiadania się na STM lub inną platformę i modyfikowania kodu, dużo więcej nie wyciśnie się z AVR ?


No tak średnio. Najszybsze dostępne w tym momencie AVRy chodzą do 24MHz, czyli nadal dla Ciebie za wolno. ATmega328P (ta w Nano) chodzi do 16MHz. Wg datasheetu tylko 8-bitowy Timer2 może być zasilany zegarem z zewnątrz bez synchronizacji z clkIO, ale jego źródło zegara to pin TOSC1, czyli jeden z pinów na którym chcesz mieć kwarc. W związku z tym pomiar tego okresu np. 1 sek czy ile tam chcesz nie będzie precyzyjny i taki pomiar będzie miał badziewną jakość.

No i w sumie Microchip ubija AVRy, a w dobie tanich jak barszcz procków 32-bitowych, taktujących się zegarami niejednokrotnie po 100+ MHz, a przy tym wybitnie energooszczędnymi, AVR to już trochę pieśń przeszłości. Polecam nauczyć się np. STMów wesoły
  
djbpm
16.11.2023 15:50:00
poziom 4

Grupa: Użytkownik

Posty: 367 #8130822
Od: 2018-8-31
    sp9ds pisze:

    Wg datasheetu tylko 8-bitowy Timer2 może być zasilany zegarem z zewnątrz bez synchronizacji z clkIO, ale jego źródło zegara to pin TOSC1, czyli jeden z pinów na którym chcesz mieć kwarc. W związku z tym pomiar tego okresu np. 1 sek czy ile tam chcesz nie będzie precyzyjny i taki pomiar będzie miał badziewną jakość.
O widzę, że zaglądnąłeś do datasheet, to się chwali wesoły. Zamiast kwarcu lepiej jest użyć TXCO, i zliczać drugim timerem impulsy z TXCO i tym bramkować. A procek niech chodzi z oscylatora RC. Jedyny minus, to że RC ma chyba max 8MHz, więc się robi ciasno. Nie wiem ile biblioteka Arduino potrzebuje czasu na wejście i wyjście z przerwania, bo przerwanie z częstotliwością 100kHz może się okazać niemożliwe do wyrobienia przy 8 MHz zegara (czyli co 80 cykli przy 25,5 MHz częstotliwości mierzonej). Ja to robiłem w assemblerze, tam wejście w przerwanie, dodanie do licznika przepełnień wyjście i powrót się bez problemu wyrabiało.
Ale może faktycznie nie warto tracić czasu, bo:
    sp9ds pisze:

    AVR to już trochę pieśń przeszłości. Polecam nauczyć się np. STMów wesoły
Na pewno zaprocentuje to w przyszłości.
  
sp9ds
16.11.2023 16:07:51
poziom 4

Grupa: Użytkownik

QTH: Kraków

Posty: 210 #8130824
Od: 2022-5-27
    djbpm pisze:

      sp9ds pisze:

      Wg datasheetu tylko 8-bitowy Timer2 może być zasilany zegarem z zewnątrz bez synchronizacji z clkIO, ale jego źródło zegara to pin TOSC1, czyli jeden z pinów na którym chcesz mieć kwarc. W związku z tym pomiar tego okresu np. 1 sek czy ile tam chcesz nie będzie precyzyjny i taki pomiar będzie miał badziewną jakość.
    O widzę, że zaglądnąłeś do datasheet, to się chwali wesoły. Zamiast kwarcu lepiej jest użyć TXCO, i zliczać drugim timerem impulsy z TXCO i tym bramkować. A procek niech chodzi z oscylatora RC. Jedyny minus, to że RC ma chyba max 8MHz, więc się robi ciasno. Nie wiem ile biblioteka Arduino potrzebuje czasu na wejście i wyjście z przerwania, bo przerwanie z częstotliwością 100kHz może się okazać niemożliwe do wyrobienia przy 8 MHz zegara (czyli co 80 cykli przy 25,5 MHz częstotliwości mierzonej). Ja to robiłem w assemblerze, tam wejście w przerwanie, dodanie do licznika przepełnień wyjście i powrót się bez problemu wyrabiało.
    Ale może faktycznie nie warto tracić czasu, bo:
      sp9ds pisze:

      AVR to już trochę pieśń przeszłości. Polecam nauczyć się np. STMów wesoły
    Na pewno zaprocentuje to w przyszłości.


Tylko jeden z timerów może pracować z zegarem z zewnątrz i jest to Timer2. Reszta jest synchronizowana do zegara clkIO.
  
Electra29.04.2024 09:24:44
poziom 5

oczka

Przejdz do góry stronyStrona: 1 / 2>>>    strony: [1]2

  << Pierwsza      < Poprzednia      Następna >     Ostatnia >>  

HOME » TECHNIKA, KONSTRUKCJE AMATORSKIE » LICZNIK NA ARDUINO UNO

Aby pisac na forum musisz sie zalogować !!!

TestHub.pl - opinie, testy, oceny