Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino sterujące syntezą - podstawy komunikacji z LM7001

ORMO_PL 21 Lut 2017 10:28 756 4
  • #1 21 Lut 2017 10:28
    ORMO_PL
    Poziom 19  

    Cześć.

    Chcę zbudować syntezę opartą o LM7001.

    http://labkit.ru/userfiles/file/documentation/Radio_doc/LM7001.pdf

    Wszelkie dostępne projekty wykorzystują BASCOM, ja uczę się programować na Arudino, więc bliżej C.


    Z noty katalogowej możemy wyczytać o protokole który rządzi kostką.
    Mamy zdefiniowane bity, i cały system przesyłu tych bitów.

    Podpierając się programami napisanymi w BASCOMIE (np SQ1FTB) nie potrafiłem jednak rozszyfrować sposobu przygotowywania i wysyłania tych danych.
    Musimy określić czas - "taktowanie" szyny, i w tym czasie wysyłać poszczególne bity na drugiej szynie. Trzecia 'włącza' transmisję, jak rozumiem. Szybkość taktowania szyny jest zdefiniowana w PDF i zależy ona od użytego kwarcu w syntezie (jak zrozumiałem)

    Moje pytania:

    1. Jak przygotować bity do wysłania? W jakiej mają być formie, i jakiego polecenia użyć?
    2. Jak najprościej rozwiązać 'taktowanie' szyny i czy warto w tym celu podeprzeć się watchdogiem?
    3. Jak sprawdzić, czy synteza rzeczywiście 'przyjęła' ustawienia? Czy diody na szynach wystarczą?

    Proszę wybaczyć ogólnikowość i brak profesjonalizmu, ale zmarnowałem wieczór próbują zrozumieć co się dzieje w kodzie od SQ1FTB i nie byłem w stanie tego pojąć.

    http://sq1ftb.n12.pl/projekty/lm7001/Synteza.pdf

    Bardzo proszę o pomoc, cały czas próbuję zdobyć umiejętności odnośnie programowania magistral. Udało mi się w weekend uruchomić MPU6050, ale tam korzystamy z gotowych bibliotek na I2C. Podobnie wyświetlacz od 5510, ale tam również korzystamy z gotowych komend służących przesyłaniu wartości do wyświetlacza. Tutaj obsługę trzeba napisać na piechotę, w związku z tym zwracam się do was o pomoc.

    Pozdrawiam.

    0 4
  • #2 22 Lut 2017 15:47
    Zielonka
    Poziom 20  

    Witam
    Wszystko jest w pliku od kolegi SQ1FTB. Funkcję Sub Synteza realizuje wysyłanie danych do LM7001. Dane dla częstotliwości wysyłane są bit po bicie ze zmiennej Fpom. Zapis Fpom.a oznacza, że pobierasz bity opisane zmienną a. Tak robisz dla bascom-a. W c taką operację zrealizujesz wykorzystując maskę bitową np. 00000001 mnożysz ją przez Fpom. Wyniku tego dekodujesz wartość pierwszego bitu. Następnie wysyłasz ja do portu. Potem przesuwasz Fpom o 1 bit w prawo i wykonujesz mnożenie maski i zmiennej. I tak 12 razy dla zmiennej Fpom.
    Pozdrawiam
    W.B.

    0
  • #3 23 Lut 2017 22:31
    ORMO_PL
    Poziom 19  

    Wybacz, że tak późno odpisuję, ale dopiero teraz znalazłem chwilę.
    Zapoznaję się oczywiście z pojęciami które mi podałeś, próbuję to zrozumieć, i w weekend usiądę do jakiegoś próbnego kodowania.


    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Rozumiem, że to jest podprogram odpowiadający za sterowanie 'magistralą'
    1. Jeśli Zegarek to funkcja taktująca szynę, to dlaczego jest ona wywoływana po każdym bicie, a nie przed wysyłaniem bitu? Przecież to jest warunek do poprawnego umiejscowienia bitu w bloku. <-- EDIT: Ja głupi. Przecież funkcja zegarek jest w pętli, i jest wywoływana razem z transmisją!
    2. Jak obliczona wcześniej częstotliwość w zmiennej Fpom jest tłumaczona na bity?
    3. Rozumiem, że w zmiennej 'sterowanie' są przechowywane bity konfiguracyjne krok syntezy, i po przesłaniu D13 bitu częstotliwości jest on 'doklejany' do transmisji?
    4. Jak w programie zrealizowane jest zwiększanie i zmniejszanie częstotliwości?


    EDIT.

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Złożyłem na szybkości układ syntezy, jednak nie chciała zmieniać napięcia na warikapie. Złożę na spokojnie poprawnie cały układ tak jak należy, i podzielę się spostrzeżeniami.

    0
  • #4 28 Lut 2017 15:11
    Zielonka
    Poziom 20  

    Witam
    ad. 1 Sygnał zegara zapisuje bit w PLL. Więc w pierwszej kolejności program wystawia dane, a następnie zatrzaskuje je w syntezie.
    ad. 2 Zmienna Fpom.a odpowiada za pobieranie poszczególnych bitów. W pętli masz zmienną A która pokazuje który bit sprawdzamy w zmiennej Fpom. Np Fpom.0 - bit0, Fpom.1 - bit1 itd. Analogicznie odwołujesz się do poszczególnych bitów portów. Proponuję zajrzeć do helpa BASCOMA tam wszystko jest opisane.
    ad. 3 tak
    ad. 4 Funkcja Getencoder: dekoduje impulsy z enkodera. W zależności od tego w, którą stronę obracasz enkoderem na jego wyjściach pojawiają się impulsy przesunięte fazowo. Dekodując który pojawił się pierwszy można określić kierunek obrotowy, a co za tym idzie zmniejszać lub zwiększać częstotliwość w programie.
    Pozdrawiam
    W.B.

    0
  • #5 28 Lut 2017 16:19
    ORMO_PL
    Poziom 19  

    Proszę zapoznać się z wpisem w znacznikach [code]. Tam jest najnowsza wersja programu.

    0