Wesprzyj nas i przeglądaj Hejto bez reklam

Zostań Patronem
Czy da się za pomocą któregoś pinu Raspberry pi 4 wygenerować sygnał zegarowy z zakresu 1 ... 20 MHz? Potrzebuję go do taktowania układu ADC. Nie musi być idealny co do wartości, może być z "ogonkiem" typu 2,137 MHz.
Z tego co widziałem na pinout.xyz można użyć GPCLK, ale poszukiwania jak to zrobić (najlepiej systemowo) nie pomogły. Wolę używać C zamiast pythona, ale przeportować dam radę.

Najwygodniej będzie korzystać z WiringPi?

#raspberrypi #programowanie #macmajster
15

Komentarze (15)

@LondoMollari tylko tu gościu chce wygenerować 20 kHz, a ja potrzebuję ~20 MHz. Trzy rzędy wielkości różnicy. Gdzieś czytałem, że przy 1 MHz system już nie będzie wyrabiał i mogą zdarzyć się problemy ze stabilnością sygnału na pinie.


Wynalazłem w dokumentacji ADC informację, że na pokładzie jest wewnętrzny oscylator RC. Jeszcze tylko znaleźć sposób na przełączenie go i może uda się bez bólu 😃

@macgajster Ślepy jestem, Twój post przeczytałem 20kHz i pomyślałem, że styknie idealnie.


Z tego co widzę, podobno zegar hardwareowy PWMa ma 19.2 MHz, czyli na chłopski rozum dasz radę zrobić clock signal z połowy z tego - not great, not terrible.


https://forums.raspberrypi.com/viewtopic.php?t=33669

@macgajster pin 7 GPIO spokojnie wypluje 20MHz, pod linuxem używasz dtoverlay

Żebyś rozumiał ocb - pin 7 to output hardware'owego generatora zegarowego o dużej precyzji.


i żeby wyklarować jeszcze bardziej, fizycznie jest to pin 7, a GPIO pin 4.

@macgajster Musi być bezpośrednio na raspberry? Jak nie to może SI5351? Skoro wspominasz o pythonie, to pewnie robisz to pod Linuxem. Nie wiem, czy na systemie, który nie działa w czasie rzeczywistym wyciągniesz tak wysoką, stabilną częstotliwość.

@6502 nie chce mi się już dodawać zewnętrznych modułów, bo tak naprawdę mógłbym dodrutować kynarem jakiś kwarc do ADC. Tylko kwarcu nie mam, a rozwiązanie wyjściem z RPi byłoby czyste, jeden dodatkowy przewód, wszystko hula 😉

Tu chyba tylko sprzętowo dałoby się coś osiągnąć. Zwykły OS mógłby dostać przynajmniej lekkiej czkawki, a pakowanie się w RTOS to też trochę armata na komara. Dlatego sprzętowe rozwiązanie sprzętowego problemu byłoby fajne.

@macgajster libka o nazwie wiringPi pozwoli Ci wszystko spokojnie skonfigurować.

@groman43 tak, ale nie do końca.

Jej obsługa SPI polega na nadaniu tego samego bufora jako nadawczego i odbiorczego. Funkcje biblioteczne mam podzielone na nadawanie i odbieranie. Do tego dane nadawane są uint8, a odbierane uint32. Duuuużo zbędnej roboty 😃 poszedłem w kierunku natywnej linuxowej biblioteki SPI, a zegar mam nadzieję wygenerować lokalnie w ADC 😉

@macgajster Zaraz, zaraz - dlaczego nagle mówimy o SPI? Myślałem, że potrzebujesz tylko zwykłego clocka.

@groman43 tak, potrzebuję żeby nim taktować ADC. Jednakowoż skoro wspomniałeś o wiringpi, to warto by było nie korzystać z kilku bibliotek w jednym projekcie, a tu dochodzi komunikacja SPI. W wiringpi jest po prostu słaba 😃

@macgajster Zaraz, czyli ten clock ma być SCLK? Czy dodatkowy?

@groman43 dodatkowy, do taktowania przy próbkowaniu.

Mam już jako taką komunikację SPI, ale zawartość rejestrów wyrzuca losową za każdym odczytem, więc something is no yes ( ͡° ͜ʖ ͡°) może za następnym posiedzeniem będzie lepiej.

@macgajster Szczerze, jeśli nie chcesz brać dodatkowej libki, to na Twoim miejscu wyłupałbym kawałek odpowiedzialny za GPCLK z wiringPi i wrzuciłbym go do tego co już masz.

@groman43 koniec końców stwierdziłem, że prymitywny zegar wewnątrz samego ADC da radę i na nim jadę 😉 Może nie jest powtarzalny w każdej sztuce co do herca, ale robię prototyp, więc nie musi być idealnej powtarzalności. Jednocześnie wybierając zegar wewnętrzny nie bujam się z zegarem z maliny i jego wyprowadzeniem.

Także ten, wiringpi może kiedyś wykorzystam, ale nie tym razem 😃

Zaloguj się aby komentować