logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przykładowy kod w C dla 8051 do sterowania syntezą AD9835

sq1gpr 11 Sie 2019 16:23 1095 11
  • #1 18109340
    sq1gpr
    Poziom 13  
    Witam,

    poszukuję przykładowego programu napisanego w C na uC rodziny 8051 który pozwoli sterować syntezą AD9835.
  • #2 18112337
    Konto nie istnieje
    Poziom 1  
  • #3 18113056
    sq1gpr
    Poziom 13  
    Wiem że może być problem bo już od dawna nawet nie jest produkowany i poszedł w zapomnienie.
    Chodzi o istniejące urządzenie które ma taki procek już na pokładzie więc nie bardzo chcę to przerabiać. Typ uC to 89S8252.
    Znalazłem coś na AVR i Arduino i powoli patrzę żeby przerobić pod '51. Czasem jednak warto spytać może akurat ktoś coś ma sprawdzonego.
  • #4 18113089
    Konto nie istnieje
    Poziom 1  
  • #5 18113107
    excray
    Poziom 41  
    Atmega162 ma podobny pinout co 89s8252
  • #6 18113165
    tplewa
    Poziom 39  
    sq1gpr napisał:
    Witam,

    poszukuję przykładowego programu napisanego w C na uC rodziny 8051 który pozwoli sterować syntezą AD9835.


    A ja mam pytanie inne bo jak widzę zrób na Arduino czy na AVR to mnie krew zalewa ;)

    Po pierwsze czytałeś DS od AD9835 ? Tam masz opisaną komunikację, nawet jak ci napisze kod na coś z rdzeniem 8051 np. chińskie procki którymi ostatnio się bawię ( https://www.elektroda.pl/rtvforum/topic3544902.html ) - to i tak ten kod nie wiele ci da...

    Więc ogólnie mówiąc jak czegoś nie rozumiesz to nie ma sensu przerabiać czyjegoś kodu którego i tak najpewniej nie zrozumiesz. Przerabianie z innego procka nawet 8051 z innymi peryferiami które mogą być w kodzie użyte dlatego nie ma sensu - to np. dotyczy też AVR-ów.

    Jak zapewne zauważyłeś w DS układ ten posiada trochę nietypowy system sterowania i można tutaj np. użyć np. UART-u jak i SPI + dodatkowa linia z gpio dla FSYNC - w zależności jak dane peryferia można skonfigurować w konkretnym procesorze...

    Więc najlepiej napisz co jest dla ciebie niejasne w komunikacji z AD9835... lub jaki masz problem w rozwiązaniu czegoś w C.

    Z innej beczki nie ma tzw. cudownych sprawdzonych kodów w C ;) Często lepiej napisać samemu..
  • #7 18113342
    sq1gpr
    Poziom 13  
    tplewa napisał:
    sq1gpr napisał:
    Witam,

    poszukuję przykładowego programu napisanego w C na uC rodziny 8051 który pozwoli sterować syntezą AD9835.


    A ja mam pytanie inne bo jak widzę zrób na Arduino czy na AVR to mnie krew zalewa ;)

    Po pierwsze czytałeś DS od AD9835 ? Tam masz opisaną komunikację, nawet jak ci napisze kod na coś z rdzeniem 8051 np. chińskie procki którymi ostatnio się bawię ( https://www.elektroda.pl/rtvforum/topic3544902.html ) - to i tak ten kod nie wiele ci da...

    Więc ogólnie mówiąc jak czegoś nie rozumiesz to nie ma sensu przerabiać czyjegoś kodu którego i tak najpewniej nie zrozumiesz. Przerabianie z innego procka nawet 8051 z innymi peryferiami które mogą być w kodzie użyte dlatego nie ma sensu - to np. dotyczy też AVR-ów.

    Jak zapewne zauważyłeś w DS układ ten posiada trochę nietypowy system sterowania i można tutaj np. użyć np. UART-u jak i SPI + dodatkowa linia z gpio dla FSYNC - w zależności jak dane peryferia można skonfigurować w konkretnym procesorze...

    Więc najlepiej napisz co jest dla ciebie niejasne w komunikacji z AD9835... lub jaki masz problem w rozwiązaniu czegoś w C.

    Z innej beczki nie ma tzw. cudownych sprawdzonych kodów w C ;) Często lepiej napisać samemu..


    Przeglądałem DS tego układu, jest też dostępny dokument z przykładem co i w jakie rejestry zapisywać Link .
    W moim przypadku komunikacja jest po SPI.

    Zgadza się że nie zawsze można trafić idealne gotowe rozwiązanie, ale czasem łatwiej przeanalizować gotowy kod i na nim zrozumieć działanie, a następnie przerobić go pod własne potrzeby niż zaczynać od początku tym bardziej jeśli się nie jest biegłym w temacie.
    Na razie nie jestem jeszcze na etapie żeby zadać konkretne pytania bo dopiero zacząłem się przymierzać do tego i póki co zbieram materiały.
    Z AD9850 tak właśnie sobie poradziłem kiedyś - przeróbka jakiegoś gotowca funkcji chyba nawet Arduino tak żeby działało na 89C2051.

    Znalazłem w międzyczasie coś co może okazać się pomocne, są co prawda na AVR ale to już krótka droga do 8051:

    Link
    Link
  • #8 18113884
    rb401
    Poziom 39  
    Jeśli masz narzędzia czyli kompilator i programator, to jest to do zrobienia na 89S8252. Nie widzę racjonalnego powodu do wymiany kostki na inny typ (jak tu niektórzy proponują).
    Mam nawet pewien sentyment do tej kostki, bo swego czasu robiłem na niej duży projekt. Tyle że C okazał się zbyt rozrzutny jak chodzi o zużycie pamięci, tak że od pewnego momentu musiałem przejść całkowicie na czysty assembler a i tak wyszło ciasno.

    Co do obsługi AD9835 to widzę że są może dwa miejsca, które wymagają trochę większego wysiłku. Jedna kwestia to wysyłanie do AD9835. Moim zdaniem, jeśli nie potrzebujesz robić np. jakieś modulacji w czasie rzeczywistym tylko "statycznie" ustawiać częstotliwość, to wystarczy programowo na trzech dowolnych pinach zrobić te SPI. Robienie na sprzętowym porcie szeregowym, tak jak wspomniane jest w materiałach do AD9835, według mnie jest też nie do końca ładne bo trzeba i tak programowo "sztukować" sprzęt by wyszło poprawne szesnastobitowe SPI.

    Drugi kwestia to funkcja wyliczająca wartości rejestrów z częstotliwości w hercach w której akurat występuje dość duży zakres liczbowy (jak na klimaty 8051) choć same wyliczenia są proste.
    Tu jak widzę są trzy "szkoły". Obliczenia na zmiennym przecinku (float) z pogodzeniem się z drobną utratą precyzji, liczenie na liczbach całkowitych 64-bitowych, dokładniejsze, lub metody trikowe pozwalające wyliczyć z użyciem "zwyklejszych" typów liczbowych.
    Co do metody trikowej, na podobny procesor jak Twój, to tu coś próbowano:
    http://sp-hm.pl/thread-2860.html

    Co do inicjacji samej kostki to odpowiednie sekwencje są widoczne w bibliotekach, tak że nie ma nawet potrzeby dokładnie wnikać co to robi.

    Jeśli szukasz przykładów to polecam zajrzeć np. tu (plik C w zipie):
    https://pic-microcontroller.com/10mhz-dds-sin...enerator-based-on-the-ad9835-using-pic16f628/
    co prawda jest to na inny procesor i kod nie jest za bardzo profesjonalny (powtórzenia instrukcji zamiast pętli) ale za to może bardziej czytelny.
    I tak jak patrzę, to w funkcji wysyłającej do AD wystarczyło by zamienić tam makra typu SDATA_LOW, SDATA_HIGH, CLK_HIGH, FSYNC_HIGH itd. funkcjami lub sekwencjami instrukcji ustawiającymi/zerującymi określone piny w 89S8252, by część dotycząca bezpośrednio AD9835 na nim zadziałała. Atutem tego przykładu jest to że to jest praktycznie działające urządzenie.
  • #9 18114489
    tplewa
    Poziom 39  
    sq1gpr napisał:


    Zgadza się że nie zawsze można trafić idealne gotowe rozwiązanie, ale czasem łatwiej przeanalizować gotowy kod i na nim zrozumieć działanie, a następnie przerobić go pod własne potrzeby niż zaczynać od początku tym bardziej jeśli się nie jest biegłym w temacie.


    No właśnie IMHO to nie jest dobre podejście zwłaszcza jak nie jest się biegłym, bo niczego się nie nauczysz i zawsze będziesz szukał gotowego kodu (co widać po tym poście). Praktycznie zawsze wszystko co potrzeba masz w DS i notach aplikacyjnych i na tej podstawie robisz sobie rozpiskę co jak ma działać i potem piszesz kod który to realizuje. Wtedy jak masz problem z rozwiązaniem czegoś lub zrozumieniem można pytać i zapewne uzyskasz pomoc.
  • #10 18116780
    sq1gpr
    Poziom 13  
    rb401 napisał:
    Jeśli masz narzędzia czyli kompilator i programator, to jest to do zrobienia na 89S8252.


    Tak, posiadam wszystko co potrzeba. Zresztą już napisałem fragmenty programu do obsługi kilku innych funkcji i sprawdziłem działanie w układzie. Pozostała sprawa obsługi syntezy i jak już wszystko będzie działać to na koniec przyda się jeszcze możliwość zapisywania nastaw do pamięci nieulotnej.
    Póki co dziękuję wszystkim którzy się odezwali i zapewne jeszcze będę nie raz prosił o pomoc w tej sprawie :) .
  • #11 18124605
    tplewa
    Poziom 39  
    sq1gpr napisał:
    rb401 napisał:
    Jeśli masz narzędzia czyli kompilator i programator, to jest to do zrobienia na 89S8252.


    Tak, posiadam wszystko co potrzeba. Zresztą już napisałem fragmenty programu do obsługi kilku innych funkcji i sprawdziłem działanie w układzie. Pozostała sprawa obsługi syntezy i jak już wszystko będzie działać to na koniec przyda się jeszcze możliwość zapisywania nastaw do pamięci nieulotnej.
    Póki co dziękuję wszystkim którzy się odezwali i zapewne jeszcze będę nie raz prosił o pomoc w tej sprawie :) .


    Powiedzmy sobie tak. Tak jak mówiłem - nie ma się co łamać że jest się początkującym. Tutaj masz tą zaletę że inne osoby są w stanie pomóc coś zrozumieć. Jak będziesz miał rozpisane co trzeba zrobić i będziesz miał problem pisz. Zapewne ktoś pomoże. Ja dawno na 8051 nie pisałem, ostatnio jak wspomniałem pewien powrót głownie w środowisku Keil dla Chińskich uC... ale coś tam jeszcze pamiętam by nawet na kartce w ASM napisać ;)

    Pozdrawiam
    Tomek SP6VGX ;)
  • #12 18242933
    rysel
    Poziom 13  
    Witam

    Jeśli masz dostęp do byłego czasopisma Nowy Elektronik, pażdziernik/listopad 2004 r. był opisywany kod w bascom do tego dds'a w oparciu o 89C4051.

    pozdrawiam, ryszard
REKLAMA