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

sterowanie saa1057

marcin-k 13 Kwi 2007 03:12 6438 32
  • #1 13 Kwi 2007 03:12
    marcin-k
    Poziom 15  

    koledzy czy ktoś może mi wytłumaczyć łopatologicznie jak sterować tą syntezą chcę zrobić sobie trx-a na ukf z krokiem 12,5khz jak ją mam sterować program mogę sobie napisać sam ale nic nie wiem jak ją ustawić co mam pierwsze wysłać jakie czasy mają być przy wysyłaniu jakie stany na pinach programujących w czasie wysyłania danych i w ogóle wszystko co tyczy się tej syntezy pdfa z syntezą ściągłem sobie ale niestety jest po angielsku a ten język znam śladowo.

    0 29
  • Sklep HeluKabel
  • #3 13 Kwi 2007 12:19
    M. S.
    Poziom 34  

    Program ten jest rozbudowany i nadaje się bardziej do doświadczeń. Sterowanie tą syntezą wymaga podania konfiguracji a póżniej częstotliwości. Trzeba sięgnąć do noty katalogowej aby "sformułować" dane do konfiguracji.

    U mnie synteza "zasilana" jest czymś takim:

    Code:
    $regfile = "ATtiny2313.DAT"
    
    $crystal = 1000000
    Dim X As Byte
    Dim Wpis As Word

    Config Portb.7 = 1
    Config Portb.6 = 1
    Config Portb.5 = 1
    Config Pinb.3 = 0 : Portb.3 = 1
    Config Pinb.4 = 0 : Portb.4 = 1

    Dat Alias Portb.7
    Ena Alias Portb.6
    Clk Alias Portb.5
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0
    Cursor Off


    Wpis = &B1000000111000101     '33221 To jest konfiguracja syntezy (AM) krok 1kHz
    Cls : Lcd Wpis : Wait 1
    Gosub Saa
    Wpis = 27180                  'To jest początkowa watrość częstotliwości 27,18MHz
    Cls : Lcd Wpis
    Gosub Saa

    Do

    Debounce Pinb.4 , 0 , Zwieksz , Sub
    Debounce Pinb.3 , 0 , Zmniejsz , Sub
    Loop

    End

    Zwieksz:
    Wpis = Wpis + 10
    Cls : Lcd Wpis
    Gosub Saa
    Return

    Zmniejsz:
    Wpis = Wpis - 10
    Cls : Lcd Wpis
    Gosub Saa
    Return

    Saa:
    Dat = 0
    Ena = 0
    Clk = 0
    Waitms 5
    Ena = 1
    Waitms 5
    Clk = 1
    Waitms 5
    Clk = 0
    Waitms 5
    For X = 15 To 0 Step -1

       Dat = Wpis.x               'Tu wartość Wpis wysyłamy do syntezy bit po bicie.

       Waitms 5
       Clk = 1
       Waitms 5
       Clk = 0
       Waitms 5
    Next X

    Ena = 0
    Waitms 5
    Clk = 1
    Waitms 5
    Clk = 0
    Waitms 5
    Ena = 1
    Waitms 5
    Dat = 1
    Clk = 1
    Waitms 100

    Return


    Dla kroku 12,5kHz trzeba zmienić konfigurację. Czyli to
    Code:
    Wpis = &B1000000111000101     '33221 To jest konfiguracja syntezy 

    0
  • #4 13 Kwi 2007 22:54
    marcin-k
    Poziom 15  

    może jeszcze jakieś linki z opisem tej syntezy

    0
  • #5 14 Kwi 2007 00:15
    161MDS01
    Poziom 24  

    marcin-k napisał:
    może jeszcze jakieś linki z opisem tej syntezy

    Ale jakie linki przecież wszystko masz w programie...
    PS.do M.S. gdy kompiluje program wyskakuje błąd error1 dla lini 26, 27 czyli dla polecenia DEBOUNCE- czyli program informuje że nie rozpoznaje polecenia...POZDRAWIAM




    Daniel

    0
  • Sklep HeluKabel
  • #6 14 Kwi 2007 09:07
    sq6ade
    Poziom 40  

    Jako fan ASM i '51 proponuje prosty programik jednorazowo ładujący zadeklarowane w programie dane:

    Code:


    ;Ładowanie SAA1057

    sjmp go

    ; Porty

    dlen   equ   097h   ;p1.7
    clb   equ   096h   ;p1.6
    data   equ   095h   ;p1.5

    ; stałe > tu trzeba wpisać dane słowa A i B

    word_a_lsb   equ   00000000b ;młodsze 8 bitów słowa A
    word_a_msb   equ   00000000b ;starsze 8 bitów słowa A   

    word_b_lsb   equ   00000000b ;młodsze 8 bitów słowa B   
    word_b_msb   equ   10000000b ;starsze 8 bitów słowa B (najstarszy bit musi być 1 ! )


    go:   clr dlen
       setb clb
       clr data
       nop
       nop
       nop
       nop
       nop
       ;   
       setb dlen
       nop
       nop
       clr clb   
       mov a,#word_a_lsb
       acall load_8
       mov a,#word_a_msb
       acall load_8
       nop
       nop
       nop
       clr dlen
       nop
       setb clb
       ;
       nop
       nop
       nop
       nop
       nop
       ;
       setb dlen
       nop
       nop
       clr clb   
       mov a,#word_b_lsb
       acall load_8
       mov a,#word_b_msb
       acall load_8
       nop
       nop
       nop
       clr dlen
       ;
       sjmp $      ;koniec


    load_8:      mov r7,#8
    next:      rrc a
          mov data,c
          acall takt
          djnz r7,next
                       ret

    takt:         ;takt zegara
       setb clb
       nop
       nop
       nop
       nop
       clr clb
       ret
    END   


    Asemblacji i testów można dokonać za pomocą EMU8051.exe z tego linka:
    http://mediaallin.com/air/download/download_p..._semestr/podstawy_techniki_cyfrowej/emu51.zip

    0
  • #7 14 Kwi 2007 10:32
    M. S.
    Poziom 34  

    No tak.

    Program pierwotnie powstał na 8051 i w AVR porty sie nie zgadzają.
    Tak to jest jak grzebie się w starych zasobach.

    Poprawnie będzie tak:

    Code:
    Debounce Pinb.4 , 0 , Zwieksz , Sub
    
    Debounce Pinb.3 , 0 , Zmniejsz , Sub


    Dołożyć zatem trzeba na początku konfigurację końcówek wejściowych (inaczej nie będą podciągnięte do Vcc):

    Code:
    Config Pinb.3 = 0 : Portb.3 = 1
    
    Config Pinb.4 = 0 : Portb.4 = 1


    Przepraszam.

    PS Powyższy program poprawiłem.

    0
  • #8 14 Kwi 2007 14:10
    androot
    VIP Zasłużony dla elektroda

    Ja w swoim napisalem tak:

    ; ****************************************
    ; Obsluga magistrali 3-wire A, B, R0, R1
    ; ****************************************

    wyslij:

    ; Zapis konfiguracji

    clr P1.4 ; DLEN = 0
    clr P1.5 ; CLB = 0
    clr P1.6 ; DATA = 0

    acall opz0
    setb P1.4 ; DLEN = 1
    acall opz0
    acall CLK

    mov A, #11000101b ; Data_word, FM, REFH, CP3, CP2, CP1, CP0, SB2
    acall wrbajt
    mov A, #01000101b ; SLA, PDM1, PDM0, BRM, T3, T2, T1, T0
    acall wrbajt

    acall opz0
    clr P1.4 ; DLEN = 0
    acall CLK

    acall opz1 ; 1ms

    ; Zapis czestotliwosci podzialu

    clr P1.4 ; DLEN = 0
    clr P1.5 ; CLB = 0
    clr P1.6 ; DATA = 0

    acall opz0
    setb P1.4 ; DLEN = 1
    acall opz0
    acall CLK

    mov A, R0 ; R0 = DPH
    acall wrbajt
    mov A, R1 ; R1 = DPL
    acall wrbajt

    acall opz0
    clr P1.4 ; DLEN = 0
    acall CLK
    acall opz1 ; 1ms

    mov DPH, R0
    mov DPL, R1

    ret

    wrbajt:
    mov B, #08h

    wrbajt1:
    rlc A
    mov P1.6, C ; DATA
    acall CLK
    djnz B, wrbajt1
    ret

    CLK:
    acall opz0
    setb P1.5 ; CLB = 1
    acall opz0 ; ___/~~~\
    clr P1.5 ; CLB = 0
    nop
    ret



    opz0 to petla kilka µs

    0
  • #9 18 Kwi 2007 17:00
    marcin-k
    Poziom 15  

    Koledzy a jak bym chciał tak czy to będzie działać np. ustawiam syntezę na AM od 512 KHz do 32 MHz wybieram krok 1.25 KHz buduję generator od 15,07 MHZ do 16,07 MHz ten sygnał będę powielał X 10 wyjdzie mi przy pośredniej 10,7 MHz zakres od 140-150 MHz krok powinien wtedy wyjść 12,5 KHz i moje pytanie to w jakiej kolejności i co mam wysłać do syntezy tak łopatologicznie

    0
  • #10 18 Kwi 2007 17:04
    sq6ade
    Poziom 40  

    Powielanie sygnału z syntezy to nie jest eleganckie rozwiązanie. Odradzam.

    0
  • #11 18 Kwi 2007 17:48
    161MDS01
    Poziom 24  

    sq6ade napisał:
    Powielanie sygnału z syntezy to nie jest eleganckie rozwiązanie. Odradzam.

    Dokładnie tak jak mówisz Krzysiu...Za dużo ptaszków a co za tym idze powielanie będzie razem z ptaszkami...POZDRAWIAM




    Daniel

    0
  • #12 18 Kwi 2007 19:17
    marcin-k
    Poziom 15  

    no to jak to inaczej zrobić ustawić na zakres fm od 70-120 MHz krok 12.5 khz tylko jak to wysłać krok po kroku jakie bity pierwsze i co potem

    0
  • #13 18 Kwi 2007 20:18
    sq6ade
    Poziom 40  

    Na stronie nr. 6 noty aplikacyjnej masz bardzo rzeczowe rysunki przebiegów. To powinno wystarczyć.

    0
  • #14 18 Kwi 2007 21:23
    M. S.
    Poziom 34  

    Ustaw syntezę na FM. Sygnał z generatora podaj na wejście FM. Krok ustaw na 12,5kHz i masz co potrzebujesz. Synteza katalogowo chodzi do ok. 120MHz. W praktyce podobno wyciąga więcej. Ewentualnie można spróbować z TSA6057.

    0
  • #15 20 Kwi 2007 22:53
    Andrzej L.
    Poziom 26  

    Jak widać standardowy problem :) Nie dogada się programista z kimś od cyfrówki ;) Jako, że nie umiem pisać programów kiedyś tam zacząłem się bawić w ręczne programowanie syntezy SAA 1057 i nawet się udało :)
    Podchodziłem do tego tematu ze 2 lata. Przy pierwszym podejściu odpuściłem. Wykonałem układ na isostatach i próbowałem programować tą kość wg protokołu rozpisanego w nocie do tej syntezki.
    Jednak wtedy nic mi nie wyszło z tego, bo nie wziąłem pod uwagę drgań styków przy przełączaniu, które to drgania powodowały, że zamiast jednego impulsu dostawałem ich całą paczkę. W efekcie tego synteza nie reagowała kompletnie na nic, bo całość danych które pojawiały się na linach była kompletnie niezgodna z protokołem dla SAA1057.
    W przypadku gdy słowo programujące zawiera choć jeden bit mniej lub więcej niż przewidziano dla SAA1057 wtedy nici z transmisji.
    Po mniej więcej rocznej przerwie zmuszony brakiem umiejętności pisania programów (póki co to mój kamień młyński u szyi) znowu odgrzebałem stary temat.
    Tym razem zacząłem od tego, że rozebrałem tuner diory z syntezą na SAA1057
    Istniejący tam kwarc (lub cewkę 7x7) - taktujący procesor programujący tą syntezę - wywaliłem, a w jego miejsce wstawiłem wielką indukcyjność złożoną z wszelakich dławików jakie znalazłem na stanie :) Zebrało się tego z jakieś 200mH, obstawiłem kondenstarami, które jeszcze nie powodowały zrywania drgań.
    Spowodowało to, że taktowanie procesora spadło z mniej więcej 4MHz do jakiś 300Hz.
    Przy takim taktowaniu cały proces postawienia syntezy na zadanej częstotliwości od momentu włączenia zasilania tunera trwał jakieś 5-10 minut.
    Dzięki temu zapięty diodami świecącymi na linie DLEN, DATA, CLOCK mogłem spokojnie zaobserwować co tam sobie procesor wysyła do syntezy :D
    Na linię danych wpiąłem sobie switcha i zacząłem kombinować i zwierać do maszy pojedyncze bity (jak była wystawiana "1" to ją ściągałem do "0") w słowie programującym podział wewnętrznego dzielnika syntezy.
    Dzięki temu przestawiałem syntezę na inne częstotliwości - wynikłe z przestawionego podziału moimi wstawionymi na siłę w słowie "0".

    Idąc tym tropem dodałem w końcu do mojego "ręcznego" programatora bramki schmitta z ukłądem RC niwelujące dragania styków.
    Na linii DLEN zostawiłem sobie isostata, który po wciśnięciu generował mi potrzebny do transmisji bitów słowa wg protokołu stan "H" a linię DATA i CLOCK obsadziłem switchami. Wszystko oczywiście odkłócone od drgań styków.
    Tak skombinowanym układem przy dojściu do wprawy postawienie syntezy na dowolnej częstotliwości (z ustalonych przez twórców tej kostki zakresów), z krokiem 1kHz, 1,25 kHz lub 10kHz, 12,5kHz z wyborem wzmocnienia pętli, itd. Zajmowało mi to od włączenia zasilania jakieś 40sekund. W te 40 sekund wliczona jest transmisja dwóch słów. Słowa kontrolnego ustawiającego czy AM czy FM, krok, wzmocnienie pętli i słowa drugiego o podziale programowalnego dzielnika.





    Jak chcesz to Ci mogę zeskanować moje wypociny z tamtego okresu.
    Na tej podstawie może łatwiej będzie Ci napisać sobie program.
    W czasie testów "ręcznych" stwierdziłem, że jest kilka zależności czasowych, których wcale nie trzeba przestrzegać przy programowaniu syntezki.
    Z protokołu jasno wynikało, że stan stabilny na linii danych musi być już zanim wystąpi impuls zegarowy na linii CLOCK.
    Z moich doświadczeń wyniknęło, że wystarczy aby tylko przed opadającym zboczem tego zegarowego impulsu był na na linii danych stabilny stan logiczny. A częstotliwość taktu zegara może być nieskonczenie niska. Jeden impuls zegarowy może trwać i 10 minut :D
    Czyli można dojść w programowaniu do połowy słowa, wyjść na miasto, wrócić po kilku godzinach i dokonczyć przesyłanie słowa :D

    Na tej podstawie wykombinowałem sobie później układ ręcznego programowania syntezy TSA6057 po linii I2C
    Bez problemu też się to programuje :)
    Jednak dla mnie SAA1057 rządzi, gdyż umożliwia większy zakres wszelakich ustawień. TSA6057 jest torchę okrojony.

    SAA1057 wyrabiał mi do około 150MHz i powyżej padał.
    Można więc celem ominięcia ograniczenia odpalić sobie zakres AM w syntezie z krokiem 1,25kHz.
    Zapiąc sobie tam przeskaler przez 10 i teoretycznie do tych 320MHz (nie sprawdzałem do ilu wyrabia w praktyce AM) powinno to śmigać jak nam tylko preskaler wyrabia.
    Będzie piękny krok 12,5kHz
    Gdyby chodziło o krok 10kHz to odpalamy AM z krokiem 1,25kHz, wstawiamy preskaler przez 8 (kosta LB3500) i do tych 270MHz spokojnie śmigamy.

    0
  • #16 20 Kwi 2007 23:57
    sq6ade
    Poziom 40  

    Andrzej L. napisał:
    Jak widać standardowy problem :) Nie dogada się programista z kimś od cyfrówki ;)

    To jest tak blisko siebie że zlewa się w całość :D
    Andrzej L. napisał:

    Jako, że nie umiem pisać programów kiedyś tam zacząłem się bawić w ręczne programowanie syntezy SAA 1057 i nawet się udało :)

    Czytając twój post dziwię się że programowanie wisi Tobie u szyi jak kamień :D

    0
  • #17 21 Kwi 2007 07:26
    M. S.
    Poziom 34  

    Cenna jest uwaga dorycząca zastosowania preskalera w celu zwiększenia możliwości kostki 1057.
    Co do opisanego sposobu ręcznego porozumiewania się z syntezą to można stwierdzić, że chyba szybciej można się nauczyć programować uC. Polecam zatem to forum - dział mikrokontrolery. Myślę, że tak zdeterminowanej osobie koledzy chętnie pomogą w szybkim osiągnięciu celu. Wtedy stosowanie syntezy będzie bardzo proste i szybkie, szczególnie, że oprogramowanie już istnieje. Wystarczy zatem kupić uC, złożyć za kilka złotych programator (lub kupić gotowy), podłączyć to do komputera wyposażonego w kompilator języka programowania uC.
    Jako, że kolega nie siedzi w temacie proponuję uC Atmela (np. ATMEGA8), kompilator najprostszego języka świata - BASIC'a (do pobrania na stronie http://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54
    - Bascom Demo v. 1.11.8.3 i zaopatrzenie się w programator STK200/300.
    Świat zmieni się nie do poznania!

    P.S. Sam tak zaczynałem 2,5 roku temu.

    0
  • #18 21 Kwi 2007 09:18
    androot
    VIP Zasłużony dla elektroda

    SAA1057 nie nadaje sie do pracy z preskalerem, poniewaz nie ma wyjscia do sterowania podzialem preskalera (np. /64 /65) dodatkowo krok przestrajania zwiekszy sie o krotnosc podzialu.

    Co do "recznego" sterowania SAA przez ISOSTATY, to ja majac tyle czasu na bawienie sie w podpinanie przelacznikow i dokladanie bramek schmitta wolalbym siegnac po mikrokontroler za 3zl i jakis poradnik w PDF jak zaczac pisac w assemblerze...

    0
  • #19 21 Kwi 2007 11:01
    M. S.
    Poziom 34  

    Cytat:
    SAA1057 nie nadaje sie do pracy z preskalerem, poniewaz nie ma wyjscia do sterowania podzialem preskalera (np. /64 /65) dodatkowo krok przestrajania zwiekszy sie o krotnosc podzialu.


    W niczym to nie przeszkadza.
    Po pierwsze podział będzie stały wg schematu generator - preskaler - synteza, czyli przełączanie nie wchodzi w grę.
    Po drugie - stopień podziału oczywiście się zmieni, lecz stosując preskaler dzielący przez 10 i krok syntezy 1,25kHz otrzymamy krok 12,5kHz - czyli zakładany.
    Swoją drogą SAA1057 posiada preskaler dzielący przez 10, który niestety nie wyrabia się przy bardzo dużych częstotliwościach.
    Bez preskalera na AM'ie max. częstotliwość wynosi 32MHz. Z preskalerem / 10 osiągnie zatem ok. 320MHz.

    0
  • #20 21 Kwi 2007 19:17
    marcin-k
    Poziom 15  

    Koledzy wracając do wątku głównego to proszę o podanie łopatologicznie co wysłać jako pierwsze , drugie itd. Np. jeśli chcę ustawić syntezę na zakres Am krok 1 k wzmocnienie pętli na zakres średni to co wysyłam binarnie jako pierwsze drugie itd. lub gdy chcę zmienić na krok 1,25khz co wysyłam ,albo wybrać zakres Fm krok 12.5 khz zakres pętli średni co binarnie i w jakiej kolejności wysyłam tylko tyle resztę sobie sam wykombinuje a jak się uda to wsad wrzucę na forum chciałbym w ten sposób
    (1) 01110101….wysyłam rozkas 1
    (2) 01110000… wysyłam zakres Am
    (3) 10000001….wysyłam krok jakiś tam
    (4) 0000111…..i jeszcze coś
    Mniej więcej w takiej formie skrótowo z góry dziękuję

    0
  • #21 21 Kwi 2007 20:35
    sq6ade
    Poziom 40  

    Nie jest ważne które słowo wysyłasz pierwsze. Po wysłaniu 2 właściwie ułożonych słów 16bitowych synteza powina zadziałać.A później jednorazowo możesz też wysyłać tylko jedno słowo jeśli będzie potrzebna zmiana jakiegoś parametru.

    0
  • #22 21 Kwi 2007 20:41
    marcin-k
    Poziom 15  

    ale jak chodzi mi głównie o znaczenie poszczególnych bitów np,
    0001011111 (pierwsze zero lub 1 to np krok następne 0 lub 1 to wzmocnienie pętli następne am-fm itd... jeśli wysyłam całe słowo to co konkretnie za co odpowiada od najstarszego do najmłodszego lub odwrotnie

    0
  • #23 21 Kwi 2007 21:03
    sq6ade
    Poziom 40  

    Rekordy binarne są zwykle tak przedstawiane że z lewej strony są bardziej znaczące bity a z prawej mniej znaczące. W aplikacji saa też tak jest. Na rejestr syntezera najpierw wchodzą najbardziej znaczące bity.

    0
  • #24 21 Kwi 2007 21:31
    marcin-k
    Poziom 15  

    to wiem ale co znaczą w sensie dosłownym poszczególne bity jak wysyłam słowo 00111.... to patrząc od lewej 1-wsze zero to np.am-a 1 to fm 2-gie 0 to np krok 1khz a 1 to krok 1.25khz 3-cia jedynka to coś tam i tak dalej. oto mi głównie chodzi

    0
  • #25 22 Kwi 2007 08:36
    M. S.
    Poziom 34  

    Cytat:
    1000000111000101 '33221 To jest konfiguracja syntezy (AM) krok 1kHz


    Teraz zobacz do noty katalogowej i pozamieniaj odpowiednie bity.
    Ustawienia są podane tabelarycznie więc angielskiego nie trzeba wiele umieć, a dwa lub trzy słowa można zanleść w słowniku. Bity, których nie zidentyfikujesz pozostaw niezmienione.
    Napisz co ci wyszło to się to sprawdzi. Pamiętaj, że słowo konfiguracyjne zaczyna się od "1" a słowo z częstotliwością od "0" więc synteza ich nie pomyli.

    0
  • #26 23 Kwi 2007 09:49
    marcin-k
    Poziom 15  

    czyli mam pierwsze słowo 1000000111000101 '33221 To jest konfiguracja syntezy (AM) krok 1kHz
    a jak będę chciał krok 1.25 to co mam wysłać i to samo przy fm-ie z krokami 10 i 12 khz jakie słowo wysłać chodzi mi o podanie wszystkich kombinacji słów do ustawiania tej syntezy

    0
  • #27 23 Kwi 2007 12:23
    M. S.
    Poziom 34  

    Dobre. Odliczając 1 bit pozostaje 15 czyli liczba kombinacji to 32768.
    Jak już tak ciężko idzie ci z tą notą to mapisz jakie ustawienie potrzebujesz.

    0
  • #28 24 Kwi 2007 06:16
    marcin-k
    Poziom 15  

    interesuje mnie 4-ry ustawienia am 1khz , am 1.25khz
    fm 10khz fm 12.5khz i w wszystkich ustawieniach średnie wzmocnienie pętli

    0
  • #29 24 Kwi 2007 22:17
    M. S.
    Poziom 34  

    FM 10 kHz - 1100010010000101
    FM 12,5kHz - 1110010010000101
    AM 1 kHz - 1000010010000101
    AM 1,25kHz - 1010010010000101

    Mam nadzieję, że ręka mi się nie omskła na klawiaturze.
    Prąd syntezy czasem trzeba korygować. Są to 4 bity po pierwszych trzech.
    Pierwszy bit jest zawsze 1
    Drugi 1-FM, 0-AM
    Trzeci - krok 0- 1kHz lub 10kHz; 1 - 1,25kHz lub 12,5kHz
    Reszta to inne ustawienia, które też być może będzie trzeba zmienić.

    0
  • #30 25 Kwi 2007 06:04
    marcin-k
    Poziom 15  

    bardzo dziękuję właśnie o to mi chodziło

    0