Reklama
#8130424 15.11.2023 11:51:15
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
#8130426 15.11.2023 11:57:14
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
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.
#8130430 15.11.2023 12:03:16
[quote=sp9ds]
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...
ante1000 pisze:
Raczej tak, ale to zależy od tego co w tym kodzie napisałeś.
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...
#8130432 15.11.2023 12:17:56
[quote=ante1000]
No to te „komendy” to właśnie to co będziesz musiał dostosować do nowego procesora.
sp9ds pisze:
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...
ante1000 pisze:
Raczej tak, ale to zależy od tego co w tym kodzie napisałeś.
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.
#8130436 15.11.2023 12:20:07
sp9ds pisze:
No to te „komendy” to właśnie to co będziesz musiał dostosować do nowego procesora.
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 ?
wpis edytowany 15.11.2023 12:21:26
#8130445 15.11.2023 12:28:43
ante1000 pisze:
Ale co by podeszło w miejsce Nano ?
sp9ds pisze:
No to te „komendy” to właśnie to co będziesz musiał dostosować do nowego procesora.
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ą.
#8130448 15.11.2023 12:34:29
sp9ds pisze:
Jakaś płytka, która ma ten sam pinout.
Jakaś płytka, która ma ten sam pinout.
Tyle to sam wiem
#8130449 15.11.2023 12:37:01
ante1000 pisze:
Ale co by podeszło w miejsce Nano ?
sp9ds pisze:
No to te „komendy” to właśnie to co będziesz musiał dostosować do nowego procesora.
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.
#8130452 15.11.2023 12:42:17
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.
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.
wpis edytowany 15.11.2023 12:44:58
#8130453 15.11.2023 12:49:57
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.
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ę?
Reklama
#8130456 15.11.2023 12:53:35
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.
#8130460 15.11.2023 13:22:56
sp9ds pisze:
przy końcu skali to liczenie jest mniej precyzyjne
przy końcu skali to liczenie jest mniej precyzyjne
sp9ds pisze:
reszta procesora musi się wyrobić pomiędzy przerwaniami timera
reszta procesora musi się wyrobić pomiędzy przerwaniami timera
sp9ds pisze:
Pozostaje ten nieszczęsny licznik - może do tego też znajdzie jakąś bibliotekę?
Pozostaje ten nieszczęsny licznik - może do tego też znajdzie jakąś bibliotekę?
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).
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).
#8130466 15.11.2023 13:36:03
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ę)
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ć.
#8130470 15.11.2023 14:06:24
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ć.
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ć.
wpis edytowany 15.11.2023 14:06:46
#8130488 15.11.2023 14:35:07
djbpm pisze:
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 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ć.
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ć.
Czekaj, to Ty robisz licznik częstotliwości w przerwaniu dodając +1 zamiast wykorzystując dedykowany licznik ,)
#8130499 15.11.2023 14:55:46
sp9ds pisze:
Czekaj, to Ty robisz licznik częstotliwości w przerwaniu dodając +1 zamiast wykorzystując dedykowany licznik ,)
Czekaj, to Ty robisz licznik częstotliwości w przerwaniu dodając +1 zamiast wykorzystując dedykowany licznik ,)
#8130554 15.11.2023 18:07:38
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 ?
wpis edytowany 15.11.2023 18:13:04
#8130774 16.11.2023 13:44:14
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 ?
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
wpis edytowany 16.11.2023 13:56:47
#8130822 16.11.2023 15:49:59
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ść.
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ść.
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
AVR to już trochę pieśń przeszłości. Polecam nauczyć się np. STMów
#8130824 16.11.2023 16:07:51
djbpm pisze:
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: Na pewno zaprocentuje to w przyszłości.
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ść.
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ść.
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
AVR to już trochę pieśń przeszłości. Polecam nauczyć się np. STMów
Tylko jeden z timerów może pracować z zegarem z zewnątrz i jest to Timer2. Reszta jest synchronizowana do zegara clkIO.
Reklama