HomeMade

Pełna wersja: Synteza na układzie Si-570
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4 5 6 7 8 9 10
Wszystko się zgadza, Twój układ Si570 ma adres zgodny z numerem i kalkulatorem czyli 0x55 (0101 0101). Urządzenia I2C mają adresy 7 bitowe ale zapisywany z przesunięciem o jeden bit w lewo. Bit D0 w adresie to rozkaz RD/WR który ustawiamy programowo w zależności od tego czy mamy odczyt, czy zapis. Twoje adresy [170-WR], [171-RD] to dokładnie kombinacja (0x55) << 1 OR bit WR/RD. Nie wiem jakich adresów wymaga Bascom, ja zawsze używam adresów fizycznych [0x55<<1 OR 00000000], [0x55<<1 OR 00000001].

Na płytce modułu jest Si570, stabilizator 3v3, transformator wyjściowy na rdzeniu 2 otworowym oraz komparator DS90LV028. Komparator tak na zapas do prób, chciałem sprawdzić który układ da ładniejszy prostokąt. Schemat narysuję po uruchomieniu modułu, może coś trzeba będzie poprawić.
Faktycznie, uwzględniając co powiedziałeś wszystko jest jasne. Bit R/W można traktować jako najmłodszy bit adresu wtedy adresacja będzie 8 bitowa. Niemniej używając w przeszłości kilku urządzeń I2C zawsze miałem jasno podany adres zapisu i odczytu jako liczbę 8 bitową. i takiej właśnie używałem. Dla przykładu opis pamięci ATMEL 24C512 właśnie w taki sposób definiuje adresację:
pamięc 24C512
Generalnie biorąc dokumentacja do SI570 zawiera szereg takich 'skrótów' oraz miejsc gdzie można się potknąć. Na przykład przy sterowaniu należy poszczególne zmienne wpisywać łącznie do wspólnego rejestru co komplikuje algorytm sterowania. I na koniec dziwne przypisanie dzielników do liczb wpisywanych do rejestrów HS_DIV a także dzielnik N1, który musi być wpisywany o wartości o 1 mniejszej niż wyliczona z algorytmu. Dobrze chociaż, że to wszystko jednak działa ;-)
L.J.
Ważne, że układ identyfikuje adres i rozkaz RD/WR.
Innym problemem jest f_DCO, która wymaga 33bitów, RFREQ 38 bitów oraz algorytm poszukiwania dzielników dla nastawy częstotliwości. Najciekawsze jest to, że jest najczęściej kilka poprawnych kombinacji par do wyboru.
Ten udziwniony sposób konfiguracji układu jest również kłopotliwy w realizacji dodatkowych funkcji syntezy (RIT,XIT, VFOa, VFOb, pamięci).

Tak z ciekawości czy Bascom obsługuje formaty danych powyżej 4-ch bajtów?
W assemblerze to nie problem i tak trzeba napisać własną arytmetykę.
Niestety, Adamie BASCOM obsługuje (jak pozostałe znane mi języki) do 4 bajtowych formatów.

Oczywiście mamy też do dyspozycji arytmetykę i dane zmiennoprzecinkowe w formacie 32 bit a dla AVR jest dodatkowo w formacie 64 bit.

Oczywiście nic nie stoi na przeszkodzie, aby użyć dwóch 4 bajtowych zmiennych i pisząc własną arytmetykę tak poradzić sobie z problemem.

Może są jakieś modułu z dodatkowymi funkcjami do zaimplementowanie we własnych programach, ale ja się na takie nie natknąłem
(28-08-2010 22:30)sp5fcs napisał(a): [ -> ]W assemblerze to nie problem i tak trzeba napisać własną arytmetykę.
Właśnie z tego powodu piszę oprogramowanie w Bascomie bo nie chcę tracić energii na podstawowe procedury skupiając się raczej nad meritum problemu ;-)
Ale wracając do tematu 38 bitowej dokładności obliczeń to jak zrozumiałem z opisu układu to jeśli nie jest ona dostępna zaleca się oddzeilenie części całkowitej od części ułamkowej dzielnika oraz przemnożenie części ułamkowej przez czynnik 2^28 co miałoby poprawić dokładność. Taki właśnie algorytm wprowadziłem do obliczeń ale na razie nie sprawdziłem czy mogę z dokładnością zejść dowolnie nisko już to z powodu niewielkiej ilości prób jakie przeprowadziłem a już to z powodu małej dokładności miernika częstotliwości jaki posiadam. Zmiany częstotliwości obserwowałem pośrednio sprawdzając po ilu krokach impulsatora zmienia mi się ostatnia cyfra wyniku i wydaje się, że mam założoną dokładność co najmniej 10 Hz na poziomie 10MHz.
Ja zrobiłem do kontaktu z układem Si570 podprogram z jednym argumentem: częstotliwością pracy podaną jako XXX.XXXXXX MHz więc w ten sposób wszystkie zmiany częstotliwości wykonuję w sposób naturalny przez dodanie/odjęcie jakiejś wartości (kroku zmiany lub offset-u) lub przemnożenie przez stały czynnik (np. przy pracy z multiplkacją częstotliwości dla urządzeń DC). Algorytm sterowania zakłada, że niezależnie od wielkości zmiany jaką muszę wykonać przeprowadzam pełną procedurę obliczeń. Nie sprawdzałem czy i jaki będzie to miało wpływ np. odbiór sygnału w słuchawkach. Może sprawdzę to jeszcze dziś.
L.J.
Jestem po pierwszych próbach generatora z odbiornikiem
DC01
i niestety mam raczej niedobre wiadomości. Układ SI570 może zmieniać częstotliwość na 2 sposoby: pierwszy dotyczy niewielkich zmian częstotliwości , o ile pamiętam ok. +-3% wartości generatora odniesienia, co dopiero po przeliczeniach daje informacje w jakim zakresie zmienia się częstotliwość wyjściowa a drugi nie stawia żadnych ograniczeń co do wartości (oczywiście w zakresie pracy) ale za to trwa ok. 10ms i może mieć wpływ na urządzenia czułe na niestabilność częstotliwości i zmianę jej fazy. Wydaje sie, że mój transceiver ma właśnie tą cechę, że jest na to czuły bo każda zmiana częstotliwości to silny stukot w słuchawkach, niezależnie od skoku częstotliwości jaki wykonuję. Będę musiał sprawdzić jak to działa w trybie niewielkiej zmiany częstotliwości (ta zmiana może być wykonana ok. 100 krotnie szybciej i zajmuje chyba 100us). Na pocieszenie mam informację, że mój algorytm obsługi impulsatora pracuje poprawnie a zmiany są płynne i powtarzalne. Sprawdziłem również jaką mam rozdzielczość sterowania. Ze względu na kroki sterowania (1, 10, 100, 1000 itd.) sprawdzałem sterowanie z takim ziarnem. Do ok. 12MHz system reaguje na zmiany 1Hz, powyżej, do ok. 120MHz najmniejsza zmiana to 10Hz, powyżej to 100Hz. Prawdopodobnie pomiędzy 12 a 120MHz czułość sterowania spada płynnie od 1 do 10Hz. Wiąże się to ze skończoną dokładnością obliczeń Bascom-a. Niemniej, ponieważ i tak będę stosował podział częstotliwości co najmniej 2 krotnie to ziarno przestrajania jest dla mnie wystarczająco małe. Chyba czeka mnie sporo prób, szczególnie przy algorytmie strojenia. Być może trzeba będzie sterować zmianami w trybie uproszczonym z kontrolą wartości zmiany co skomplikuje algorytm. A może popełniłem jakiś błąd związany z zamrażaniem wartości rejestrów na czas obliczeń i da się ten efekt ograniczyć lub zminimalizować?. Czy ktoś z Was ma już jakieś doświadczenia z tym związane?
L.J.
(17-06-2010 13:33)sq4avs napisał(a): [ -> ]Kit zakupiłem przyszedł w poniedziałek to może chodzić do 900MHz. Parametry si570 są lepsze niż ad9951 i to wyraźnie., poza jednym stabilnością termiczną ...

Mam pytanie do Rafała, czy zaobserwował taki sam efekt na fabrycznym kicie. Może okazać się, że meczanizm "zamrażania generatora" na czas wpisywania nowej nastawy zawsze będzie dawał taki efekt i wtedy będzie problem, jako statyczny generator OK, ale przy strojeniu nie do przyjęcia. W SDR-ach kiedy mamy na ekranie pasmo 96KHZ nie musimy się tak często przestrajać a w normalnym radiu będzie problem.

Drugie pytanie, czy ktoś znalazł w necie projekt tradycyjnego radia z układem Si570 ?
U mnie radio nie reaguje żadnymi stukami, dla mnie dziesięć ms to w sumie nie tak dużo to nie skaner. Co do sposobu strojenia to potwierdzam występują dwa tryby. Podłączałem go do radia z przemianą z mieszaczem cyfrowym to żaden problem
Moje zniesmaczenie opisem układu Si 570 powiększa się :-(
Właśnie siedzę i modyfikuję kod sterowania układem i otrzymuję zadziwiający wynik bo jeśli stosuję się do reguł podanych na stronie 16 opisu (1. Freeze DCO..., 2. Write the new freq....., 3.Unfreze the DCO...., ) to uzyskuję stukanie podczas strojenia a kiedy pominę punkty 1 i 3 a w zasadzie wystarczy nie wykonywać punktu 1 to wszystko chodzi bardzo płynnie.
Po sprawdzeniu wielu kombinacji ustawień rejestrów 135 i 137 poddaję się ;-( Ograniczam algorytm sterowania do wpisania nowych wartości do rejestrów 7-12 oraz omijam szerokim łukiem bit 4 w rejestrze 137.
Na koniec dodam, że ze względu na ekstremalnie złą propagację na niższych pasmach próby wykonywałem w paśmie 14MHz co jest również sporym zaskoczeniem (dawno nie zagladałem na pasma a tu taka niespodzianka).
Ważne, że strojenie działa płynnie więc ma sens dalsze rozwijanie projektu ;-)
L.J.

Zrobiłem szybko nagranie przestrajania już po korekcie oprogramowania do sprawdzenia pod adresem:
strojenie 500/50/5Hz
Nagranie ma ok. 38 sek, pierwsza 1/3 nagrania to strojenie z krokiem 500Hz, część środkowa to przestrajanie z krokiem 50Hz a ostania 1/3 nagrania to strojenie z krokiem 5Hz.
Dla porównania nagranie ze stukami:
stuki podczas strojenia
Zmiany przestrajania ustawione były tym razem wyłącznie na 5Hz. Jak słychać każda zmiana częstotliwości to silny stuk co czyni odbiór nieznośnym.
L.J.
Wydaje się, że moje prace nad programowaniem układu SI570 dobiegają końca. Mam w zasadzie wszystko co chciałem zrobić zrobione a zajętość pamięci programu wynosi ... 99%.
Ale po kolei:

Generator ma następującą funkcjonalność:
- częstotliwość pracy od 3.5MHz do ok. 160 MHz (pomiar pośredni robiłem do ok. 100MHz)
- 4 pamięci częstotliwości pracy (F1-F4) w pamięci nieulotnej, pamięć F1 ładuje się po włączeniu układu automatycznie, zmiana (zapamiętanie lub załadowanie) pamięci odbywa się za pomocą klawisza cyklicznie F1->F2->F3->F4->F1 ..... a na ekranie widać częstotliwości każdej z pamięci
- strojenie z krokiem od 10Hz do 1MHz (z uwzględnieniem podzielnika D), krok można przewijać w górę i w dół, ze względu na duży krok maksymalny układ nie ma przełącznika pasm, zmianę kroku zapewniają dwa klawisze zarówno w górę jak i w dół
- generator wystawia dwa binarne sygnały do zmiany funkcji CW/USB/LSB, tryp pracy zmienia się klawiszem
- generator wystawia trzy binarne sygnały np. do zmiany pasma w układach zewnętrznych na granicy częstotliwości: 4MHz, 8MHz, 16MHz, 32MHz oraz 64MHz
- RIT uruchamiany oddzielnym klawiszem i skojarzony z nim binarny port wejściowy zapewniający zmianę częstotliwości przy przejściu z nadawania na odbiór i odwrotnie przy działającym RIT-cie
- korelację częstotliwości pracy F z podzielnikiem D (w zakresie 1-99) w taki sposób, że na ekranie pokazana jest częstotliwość F/D - to rozwiązanie będę używał w transceiverze DC01 z podzielnikiem D=4
- możliwość zaprogramowania podzielnika D
- możliwość zaprogramowania częstottliwości ofset-u Fof co powoduje, że dla generatora pracującego na częstotliwości F na ekranie widać (F+Fof)/D przy czym Fof może być dodatnie jak i ujemne, jeśli Fof jest mniejsze niż 0.4MHZ wtedy przyjmuje się, że Fof=0 a częstotliwość wyjściowa wynosi F/D
- możliwość precyzyjnego, programowego ustawienia częstotliwości wzorca Fxtal (ok. 114.2MHz)

Do zmiany ustawień częstotliwości wzorca Fxtal, podzielnika D oraz częstotliwości ofset-u Fof służy procedura SETUP do której można wejść podczas startu generatora. Ustawienie tych stałych odbywa się za pomocą impulsatora. Stałe te są zapamiętane w pamieci nieulotnej podobnie jak cztery częstotliwości pracy, które można zarówno zapamiętać jak i przywołać z pamięci.
Układ generatora nie posiada aktywnej stabilizacji termicznej. Zastanawiam się nad obudowaniem geneartora izolacją ze styropianu co spowoduje, że układ szybciej dojdzie do stanu równowagi termicznej.

Ostatnie prace dotyczące programowania to była prawdziwa bitwa o bity. Początkowo planowałem pięć pamięci częstotliwości ale ze względu na brak miejsca na kod programu stanęło na czterech.
W najbliższych kilku dniach opublikuję pełniejszy opis na mojej stronie, tamże będzie można pobrać kod programu w wersji heksadecymalnej.

Słabe strony rozwiązana zapewne odkryją krytycy w praktyce (jeśli ktoś zechce je powielić), ja natomiast za silną stronę generatora uważam niezawodne działanie impulsatora oraz możliwość programowego dostrojenia częstotliwości wzorca Fxtal co powoduje, że częstotliwość ta nie musi być kompilowana bezpośrednio w kod programu a zatem każdy budujący taki generator będzie mógł uzyskać maksymalną dokładność jego pracy.

W ten sposób uważam swoją pracę dotycząca generatora za prawie zakończoną ;-)
L.J.
Stron: 1 2 3 4 5 6 7 8 9 10
Przekierowanie