| Strona: 1 / 2>>> strony: [1]2 |
Licznik na Arduino Uno | |
| | ante1000 | 15.11.2023 11:51:16 |
Grupa: Użytkownik
QTH: Kraków
Posty: 342 #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 _________________
| | | Electra | 18.12.2024 10:52:49 |
|
| | | sp9ds | 15.11.2023 11:57:14 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #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 |
Grupa: Użytkownik
QTH: Kraków
Posty: 342 #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 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #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 |
Grupa: Użytkownik
QTH: Kraków
Posty: 342 #8130436 Od: 2016-1-20
Ilość edycji wpisu: 3 |
Ale co by podeszło w miejsce Nano ? _________________
| | | sp9ds | 15.11.2023 12:28:44 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #8130445 Od: 2022-5-27
| ante1000 pisze:
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 |
Grupa: Użytkownik
QTH: Kraków
Posty: 342 #8130448 Od: 2016-1-20
| sp9ds pisze:
Jakaś płytka, która ma ten sam pinout.
Tyle to sam wiem _________________
| | | sp9ds | 15.11.2023 12:37:02 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #8130449 Od: 2022-5-27
| ante1000 pisze:
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 |
Grupa: Użytkownik
Posty: 403 #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.
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 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #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.
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ą Pozostaje ten nieszczęsny licznik - może do tego też znajdzie jakąś bibliotekę? | | | SP5WWP | 15.11.2023 12:53:35 |
Grupa: Użytkownik
QTH: KO02IK
Posty: 183 #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. | | | Electra | 18.12.2024 10:52:49 |
|
| | | djbpm | 15.11.2023 13:22:56 |
Grupa: Użytkownik
Posty: 403 #8130460 Od: 2018-8-31
| W trybie asynchronicznym 12 MHz będzie daleko przed końcem skali. ale te przerwania od timera mogą być bardzo krótkie bo w funkcji obsługującej przerwanie dodajesz +1 do zmiennej i to wszystko. 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 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #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 |
Grupa: Użytkownik
Posty: 403 #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... | | | sp9ds | 15.11.2023 14:35:08 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #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...
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 |
Grupa: Użytkownik
Posty: 403 #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 |
Grupa: Użytkownik
QTH: Kraków
Posty: 342 #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 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #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 | | | djbpm | 16.11.2023 15:50:00 |
Grupa: Użytkownik
Posty: 403 #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 . 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 Na pewno zaprocentuje to w przyszłości. | | | sp9ds | 16.11.2023 16:07:51 |
Grupa: Użytkownik
QTH: Kraków
Posty: 269 #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 . 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 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. | | | Electra | 18.12.2024 10:52:49 |
|
|
| Strona: 1 / 2>>> strony: [1]2 |
Aby pisac na forum musisz sie zalogować !!! |
|