Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika macgajster w Raspberry Pi

Gruba ryba

w Raspberry Pi

11piorunów

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?

Komentarze (15)

Osobistość1piorunów

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

Gruba ryba2piorunów

@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 :smiley:

Osobistość1piorunów

@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.

Gruba ryba1piorunów

@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.

Osobistość1piorunów

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

Gruba ryba1piorunów

@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 :smiley:

Osobistość1piorunów

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

Gruba ryba1piorunów

@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 :smiley: poszedłem w kierunku natywnej linuxowej biblioteki SPI, a zegar mam nadzieję wygenerować lokalnie w ADC 😉

Autorytet1piorunów

@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ść.

Gruba ryba2piorunów

@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.

Osobistość2piorunów

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

Osobistość3piorunów

Ż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.

Fanatyk5piorunów

@macgajster Może po prostu jakiegoś pinu PWMowego użyj? https://forums.raspberrypi.com/viewtopic.php?t=275199

Just a moment...Raspberrypi
Gruba ryba3piorunów

@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 :smiley: