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

programowanie cc1000pp przez spi z prockiem aduc841

Sentinel18 06 Lut 2005 21:14 2318 12
  • #1 1204728
    Sentinel18
    Poziom 17  
    Posty: 283
    Pomógł: 11
    Ocena: 7
    Witam
    mam watpliwosci co do ustawienia fazy(nadawanie na zobczu opadajacym czy narastajacym sclk) i polaryzacji(sclk jesli bezczynny to 1 czy 0) przy komunikacji z cc1000, wyprobowywalem rozne kombinacje(4) , programn dziala w ten sposob ze zapisuje do cc1000 rejest MAIN 2 razy a potem odczytuje go(wartosc odczytana jest w sfr-SPIDAT)
    i efekty sa takie :
    jesli przesylanie na / i sclk w bezczynnosci na 1 to po wykonaniu programu w spidat mam 00H
    tak samo sie dzieje jesli przesylanie na \ i bezczynnosc na 0
    w innych ch przypadkach w spidat mam FFH

    jesli zmienie SCON(tam sa powyzsze ustawienia) w przed rozkazem ustawienia PALE NA 1 podczas podprogramu READ_REGISTER to w SPIDAT nic sie nie zmienia i wszystko jest tak jakbym tego nie zmienil....
    nie wiem co jest grane:/ a oto program:

    POMOCY!!!! :(


    #include <aduc841.h>
    ;***************************************************************************************
    ; KONFIGURACJA CC1000 NADAJNIK
    ;***************************************************************************************
    ;20 KOMORKA PAMIECI REJESTR FLAGOWY
    ;20.0-CZY SPI WYSYLALO DANE(USTAWIANY PODCZAS PRZERWANIA OD SPI
    ;P0.0-PALE






    ;*****************************PRZERWANIE OD SPI
    ORG 03BH
    SETB 20H.0
    RETI
    ;***********************************************



    ORG 00H
    LJMP MAIN
    ORG 100H

    MAIN:
    ORL CFG841,#00100010B ;PRZENIESIENIE MOSI,MISO, SCLK NA P3.3, P3.4 P3.5 ODPOWIEDNIO
    MOV SPICON,#00111100B ;KONFIGURACJA SPI JAKO MASTER PREDKOSC 2.5MHz ZBOCZE OPADAJACE
    ;*****ZEBY NA SLAVE: "CLR SPIM"****..........sprawdzic zbocza
    SETB EA ;WLACZENIE PRZERWAN
    ORL IEIP2,#00000001B ;WLACZENIE PRZERWAN OD SPI I I2C
    MOV 20H,#00
    LCALL CONFIGURE_CC1000
    MOV A,00H
    LCALL READ_REGISTER
    KONIEC:

    LJMP $

    CONFIGURE_CC1000:
    ;PUSH PSW
    ;PUSH ACC
    ;PUSH 01H
    ;PUSH 07H
    ;KONFIGURACJA REJESTRU MAIN*****************************************
    MOV A,#00H ;ADRES REJESTRU ( TU MAIN)
    LCALL WRITE_WADRESS
    MOV A,#11000000B ;DANA DO REJESTRU
    LCALL WRITE_DATA
    MOV A,#00H ;POWTORNA KONFIGURACJA (USTAWIENIE RESETA NA 1)
    LCALL WRITE_WADRESS
    MOV A,#11000001B
    LCALL WRITE_DATA
    RET
    ;*****************



    ;ODBIERANIE DANYCH REJESTROW Z CC1000****************************************************
    READ_REGISTER:
    LCALL WRITE_RADRESS
    NOP
    SETB P0.0
    NOP
    MOV SPIDAT,#00H ;ZAPISUJE DO SPI UDAWANY BAJT ZEBY ODEBRAC(POTRZEBNE TO?, CZY SPI SAMO WIDZI ZE DANE NA LINI SIE ZNIENIAJA I ZAPISAUJE DO SPIDAT?? A POTEM ROBI PRZERWANIE?
    LCALL CZEKASPI
    MOV A,SPIDAT
    RET
    ;*********************

    ;*********************WYSYLA ADRES DO CC1000 POD KTORY BEDZIE ZAPISYWAL DANE**************
    WRITE_WADRESS:

    CLR P0.0 ;PALE NA 0 -WPISYWANIE ADRESU
    SETB C ;DECYZJA CZY ZAPISZ(1-SETB) CZY ODCZYTAJ(CLR-0) BAJT Z WYSYLANEGO ADRESU
    RLC A ;WPISANIE JAKO LSB DO WYSYLANEGO BAJTU ADRESOWEGO INFORMACJI CZY ZAPIS CZY ODCZYT
    MOV SPIDAT,A ;WYSYLA NA SPI TO CO W A
    LCALL CZEKASPI
    SETB P0.0
    RET
    ;**************
    ;*********************WYSYLA ADRES DO CC1000 POD KTORY BEDZIE ZAPISYWAL DANE**************
    WRITE_RADRESS:

    CLR P0.0 ;PALE NA 0 -WPISYWANIE ADRESU
    CLR C ;DECYZJA CZY ZAPISZ(1-SETB) CZY ODCZYTAJ(CLR-0) BAJT Z WYSYLANEGO ADRESU
    RLC A ;WPISANIE JAKO LSB DO WYSYLANEGO BAJTU ADRESOWEGO INFORMACJI CZY ZAPIS CZY ODCZYT
    MOV SPIDAT,A ;WYSYLA NA SPI TO CO W A
    LCALL CZEKASPI
    SETB P0.0
    RET
    ;**************
    ;***********************************PODPROGRAM WYSYLA DANE NA WYSLANY ADRSES(ADRES MUSI BYC WYSLANY W POPRZEDNIM POLECENIU******
    WRITE_DATA:
    SETB P0.0 ;PALE NA 1= WYSYLANIE DANYCH DO WPISANEGO WCXZESNIEJ ADRESU
    MOV SPIDAT,A ; WYSYLA TO CO W A NA SPI
    LCALL CZEKASPI ;CZEKA AZ SPI WYSLE
    RET
    ;**************





    ;***********************CZEKA AZ SPI WYSLE BAJT************
    CZEKASPI:
    JNB 20H.0,CZEKASPI ;CZEKA AZ SPI WYSLE
    CLR 20H.0
    RET
    ;**************
  • #2 1205027
    al555
    Poziom 20  
    Posty: 485
    Pomógł: 32
    Ocena: 8
    Widze że programujesz w asemblerze ale na stronach Chipcona jest przykład w C ( są opracowane wszystkie funkcje ).
    Tu jest link: http://www.chipcon.com/files/AN_009_source_code_3_3.zip

    Na temat SPI nie będę się wymądrzał ale w nocie katalogowej AN009 http://www.chipcon.com/files/AN_009_CC1000_MCU_Interfacing_3_0.pdf piszą w rozdziale "Data interface"
    że podczas nadawania przerwanie ma być wyzwalane opadającym zboczem DCLK, i odwrotnie przy odbiorze.
    To działało u mnie.

    Nie wiem w jaki sposób wysyłasz dane ale na początku każdej paczki danych powinna być wysłana preambuła ( 010101.. lub 00110011.. w zależności od rodzaju kodowania ) a potem dane.
    Nie wspomne tu już o ustawianiu rejestrów. Sporo tego.

    Jeśli podporogram "CONFIGURE_CC1000:" jest jedyną częścią programu który konfiguruje CC1000 to jest to zdecydowanie za mało!! Jest kilkadziesiąt rejestrów do skonfigurowania . Skorzystaj z programu SmartRF. Też na stronach chipcona.

    Polecam chyba jednak nie korzystanie z SPI ( przynajmniej na pocztku ) jest wiedcej przykladow programowania CC1000 bez SPI.

    Poszukaj na Elektrodzie haseł: "CC1000" i "chipcon" - było tego troche.

    Pozdrawiam...
  • #3 1205302
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Moja rada:
    Daj sobie spokuj z SPI!
    Miałem podobne problemy z hardware'owym SPI w ATmega8, w końcu wkurzyłem się, napisałem program wysyłający i odbierający w asemblerze, bez urzycia SPI i od razu ruszyło!

    Dane są zatrzaskiwane w cc1000 przy OPADAJĄCYM zboczu PCLK, przy odczycie jest tak samo, a gdy nic nie jest wysyłane PCLK powinno być w stanie WYSOKIM.

    A z innej beczki, nie wpisuj do main'a 11000000! Bo w Chipconie się wszystko chrzani! wpisz 00111010, a potem 00111011, w twoim wydaniu odpaliłeś wszystkie bloki CC, jednocześnie go resetując :) Może dlatego się chrzaniło ?

    Pozdro600 :)
  • #4 1205525
    Sentinel18
    Poziom 17  
    Posty: 283
    Pomógł: 11
    Ocena: 7
    al555---> to jest narazie interfejs konfigurujacy i tylko kawalek pocztku:) nie martw sie:)

    a z tym spi chyba naprawde dam sobie spokoj:/ i zrobie na bitach

    ps jak robicie dopasowanie napiecia na liniach pclk dio dclk itd???
  • #5 1205534
    al555
    Poziom 20  
    Posty: 485
    Pomógł: 32
    Ocena: 8
    W elektronice praktycznej 2/04 i 3/04 opisany był projekt gdzie uzywali procesora zasilanaego 5V i układów sprzgających 3,3/5V. Ale ja zrezygnowałem z '51 i użyłem ATMEga8L zasilanego też 3V i wtedy podpina się bezpośrednio. ADuC841 też można zasilić 3V. Jeśli chcesz korzystać z 5V procesora to odsyłam do EP, ew. w nocie katalogowej AN_021_Voltage_Level_Conversion_1_1.pdf ( jakbyś nie mógł znaleźć to poszperam ja.)
    Na liniach jednkierunkowych mozna uzyc dzielnikow rezystorowych, na liniach dwukierunkowych przydalyby sie jakies przelaczane bufory.

    Pozdrawiam
  • #6 1205817
    ZlyDotyk
    Poziom 19  
    Posty: 169
    Pomógł: 40
    Ocena: 1
    ewentualnie mozna jeszcze uzyc gotowych ukladow dopasowujacych jak naprzyklad 74LVC4245AD. Napisalem kiedys pelna obsluge do tych modolow pod AVR w asm. Jesli chcesz moge je udostepnic.
    Pozdrawiam
  • #7 1206834
    Sentinel18
    Poziom 17  
    Posty: 283
    Pomógł: 11
    Ocena: 7
    a zenery 3V?? widzialem takie rozwiazanie przy jakims atmleku i cc1000,
    bedzie to mialo jakis wplyw na maxymalna szybkosc transmisji?

    Dodano po 4 [godziny] 18 [minuty]:

    al555----> mam juz procki 5v takze nie da rady zasilic 3V, robie to pod 8052 takze dziekuje za avr, kurde podlaczylem to zenerami do masy ale jakos z 3V zrobilo sie 1.9 po pdlaczeniu do cc1000 wiec musialem zasilic cc1000 z 2.5V bo 1 logiczna to minimum vcc*0.7 , dalem, sobie spokoj z spi i napisalem programik normalnie bitowy, niestety nici z tego:/ tzn zapisuje do rejestru main najpierw 11000001 (wlaczam bez reseta) potrem 11000000 (RESET) i potem 11000001(dokonczenie reseta) i chce odczytac rejest main ale zwraca mi wartosc 00h :/ zamiast 1100000B

    dorzucam kod prosze niech ktos luknie bo trace nerwy:/
    ps kwarc 11MHz

    #include <aduc841.h>
    ;***************************************************************************************
    ; KONFIGURACJA CC1000 NADAJNIK
    ;***************************************************************************************
    ;20 KOMORKA PAMIECI REJESTR FLAGOWY
    ;P2.7-PALE
    ;P3.4-PDATA
    ;P3.7-PCLK

    PA EQU P2.7
    PD EQU P3.4
    PCLK EQU P3.7
    ORG 00H
    LJMP MAIN
    ORG 100H

    MAIN:
    ORL CFG841,#00100010B ;PRZENIESIENIE MOSI,MISO, SCLK NA P3.3, P3.4 P3.5 ODPOWIEDNIO
    LCALL CONFIGURE_CC1000
    MOV A,00H ;jaki rejestr do odczytania
    LCALL READ_REGISTER
    MOV P2,A
    KONIEC:

    LJMP $

    CONFIGURE_CC1000:
    ;PUSH PSW
    ;PUSH ACC
    ;PUSH 01H
    ;PUSH 07H
    ;KONFIGURACJA REJESTRU MAIN*****************************************
    MOV A,#00H ;ADRES REJESTRU ( TU MAIN)
    LCALL WRITE_WADRESS
    MOV A,#11000001B ;DANA DO REJESTRU
    LCALL WRITE_DATA
    MOV A,#00H ;POWTORNA KONFIGURACJA (USTAWIENIE RESETA NA 0(wlaczenie reseta)
    LCALL WRITE_WADRESS
    MOV A,#11000001B
    LCALL WRITE_DATA
    MOV A,#00H ;ADRES REJESTRU ( TU MAIN)
    LCALL WRITE_WADRESS
    MOV A,#11000001B ;DANA DO REJESTRU
    LCALL WRITE_DATA
    RET
    ;*****************



    ;ODBIERANIE DANYCH REJESTROW Z CC1000****************************************************
    READ_REGISTER:
    LCALL WRITE_RADRESS
    SETB PA
    LCALL READ_A_CC1000 ;CZYTA Z CC1000 BAJT DANYCH I ZAPSUJE W A
    RET
    ;*********************

    ;*********************WYSYLA ADRES DO CC1000 POD KTORY BEDZIE ZAPISYWAL DANE**************
    WRITE_WADRESS:

    CLR PA ;PALE NA 0 -WPISYWANIE ADRESU
    SETB C ;DECYZJA CZY ZAPISZ(1-SETB) CZY ODCZYTAJ(CLR-0) BAJT Z WYSYLANEGO ADRESU
    RLC A ;WPISANIE JAKO LSB DO WYSYLANEGO BAJTU ADRESOWEGO INFORMACJI CZY ZAPIS CZY ODCZYT
    LCALL SEND_A_CC1000 ;WYSYLA NA CC1000 TO CO W A
    SETB PA
    RET
    ;**************
    ;*********************WYSYLA ADRES DO CC1000 POD KTORY BEDZIE ZAPISYWAL DANE**************
    WRITE_RADRESS:

    CLR PA ;PALE NA 0 -WPISYWANIE ADRESU
    CLR C ;DECYZJA CZY ZAPISZ(1-SETB) CZY ODCZYTAJ(CLR-0) BAJT Z WYSYLANEGO ADRESU
    RLC A ;WPISANIE JAKO LSB DO WYSYLANEGO BAJTU ADRESOWEGO INFORMACJI CZY ZAPIS CZY ODCZYT
    LCALL SEND_A_CC1000 ;WYSYLA NA SPI TO CO W A
    SETB PA
    RET
    ;**************
    ;***********************************PODPROGRAM WYSYLA DANE NA WYSLANY ADRSES(ADRES MUSI BYC WYSLANY W POPRZEDNIM POLECENIU******
    WRITE_DATA:
    SETB PA ;PALE NA 1= WYSYLANIE DANYCH DO WPISANEGO WCXZESNIEJ ADRESU
    LCALL SEND_A_CC1000 ; WYSYLA TO CO W A NA SPI
    RET
    ;**************
    ;***********WYSYLANIE A NA CC1000**************************************
    SEND_A_CC1000:
    MOV B,#08H
    L01:
    RLC A
    MOV PD,C
    CLR PCLK
    NOP
    SETB PCLK
    DJNZ B,L01
    RET
    ;*********************
    ;CZYTA BAJT DANYCH Z CC1000 I ZAPISUJE W A**************
    READ_A_CC1000:
    MOV B,#08H
    SETB PD
    L02:
    CLR PCLK
    NOP
    MOV C,PD
    RLC A
    SETB PCLK
    DJNZ B,L02
    RET

    END
  • #8 1209237
    ZlyDotyk
    Poziom 19  
    Posty: 169
    Pomógł: 40
    Ocena: 1
    z tego co tu wynika to teraz wysylasz 3 razy to samo ($C1)
    umnie procedura inicjalizacji wyglada tak(przetlumaczona z przykladowej aplikacji ChipCona):
    do rejestru MAIN <- $3F - power down
    dalej rejestr $0B (output power) na 0
    teraz odczytuje rejestr MAIN, kasuje najmlodszy bit (RESET) nastepnie zapis, potem ustawiam bit reset i ponowny zapis.
    Dalej po kolei wypelniam wszystkie rejestry wg tego co mi wyplulo SmartRF Studio.
    Zaraz po wlaczeniu zasilania wiekszosc rejestrow ma jakas wartosc (MAIN napewno) wiec mozesz na poczatek odczytac ten rejestr i zobaczyc czy nie jest zerem
  • #9 1210060
    Sentinel18
    Poziom 17  
    Posty: 283
    Pomógł: 11
    Ocena: 7
    oki juz mi siei udalo odczytac z niego dzieki tu jednemu koledze z forum, po prosty wlaczalem go na tx i tszystko odrazu a trzeba bylo pokoleji wlaczac poszczegolne bloki
  • #10 1668215
    Witoldinho
    Poziom 15  
    Posty: 111
    Pomógł: 2
    Ocena: 17
    ja uzylem uP aduc814 i do zaprogrowania uzylem jezyka C (keil C 2KB) lub Raisonace c [4kB]
    a do konfiguracji uzylem tzw bit banging i bez problemu skobfigurowalem
    natomiast mam problem z z odbiornikiem bo lapie tylko smieci ,nawet przy zwartej antenie
  • #11 1802255
    Witoldinho
    Poziom 15  
    Posty: 111
    Pomógł: 2
    Ocena: 17
    udalo mnie sie tez zlapac sygnal uklady sie widza ,natomiast mysle jak zsynchronizowac i zeby lapal poprawnie dane
  • #12 1802325
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    W cc1000 do synchronizacji służy "preambuła"
  • #13 1802664
    lbugiera
    Poziom 21  
    Posty: 348
    Pomógł: 45
    Ocena: 5
    
    ; **** zapisz/odczytaj rejestr ****
    ; Funkcje zapisz i odczytaj rejestru CC1000. Adres rejestru powinien przed
    ; wywołaniem znaleźć się w rejestrze adres, oraz dane powinny się znaleźć lub
    ; znajdą się w rejestrze dane. 
    ; UWAGA ; 
    ; funkcja nie zabezpiecza sreg
    ; adres jest w 7 dolnych bitach rejestru adres
    ; zakłada także, że pale jest Hi przed wywołaniem
    ; na końcu ustawia pclk i pale na HI i pdata jako wejście
    ; przyjmuje jako pierwszy argument numer bitu w rejestrze 
    
    .macro zaladuj_bit_adresu 	; makro wykonujące operacje związane z załadowaniem bitu adresu
    sbi port_pdata,pin_pdata	; dane muszą być ustalone podczas przejścia zegar pclk 1->0, ustawienie pdata=1
    sbi port_pclk,pin_pclk		; pclk 0->1 
    sbrs adres,@0				; jesli bit adresu =1 to przeskocz następną instrukcje
    cbi port_pdata,pin_pdata	; ustawiająca pdata=0 , wczesniej zostało ustwione pdata=1
    cbi port_pclk,pin_pclk		; pclk 0->1, na tym zboczu bit adresu jest samplowany przez CC1000PP
    .endmacro
    
    .macro zaladuj_bit_danych	; te same operacje co powyżej, ale na bitach z rejestru dane
    sbi port_pdata,pin_pdata
    
    sbi port_pclk,pin_pclk
    sbrs dane,@0
    cbi port_pdata,pin_pdata
    cbi port_pclk,pin_pclk
    .endmacro
    
    .macro odczytaj_bit_danych	; makro odczytujące dane wystawiane przez CC1000 podczas odczytu
    sbr dane,1<<@0				; odczytana wartośc bedzie w rej. dane, ustawienie przetwarzanego obecnie bitu
    cbi port_pclk,pin_pclk		; pclk 1->0 na tym zboczu dane wystawione przez CC1000 sa juz ustalone
    sbis port_pdata-2,pin_pdata	; jesli cc wystawilo "1" przeskocz nast. instrukcje
    cbr dane,1<<@0				; ustawiajaca bit w rej dane na "0"
    sbi port_pclk,pin_pclk		; pclk 0->1 na tym zboczu CC1000 zmienia dane wyjściowe
    .endmacro
    
    
    odczytaj_rejestr:			; czas wykonywania : 89 cykli 
    cli
    sbi port_pdata-1,pin_pdata	; kierunek pdata - wyjście
    cbi port_pale,pin_pale 		; pale w dół
    zaladuj_bit_adresu 6
    zaladuj_bit_adresu 5
    zaladuj_bit_adresu 4
    zaladuj_bit_adresu 3
    zaladuj_bit_adresu 2
    zaladuj_bit_adresu 1
    zaladuj_bit_adresu 0
    cbi port_pdata,pin_pdata	; bit r/w
    sbi port_pclk,pin_pclk		; zegar w góre
    cbi port_pclk,pin_pclk		; bit r/w wysłany
    cbi port_pdata-1,pin_pdata  ; pdata jako wejscie
    sbi port_pclk,pin_pclk		; zegar w góre
    sbi port_pale,pin_pale		; pale w góre
    odczytaj_bit_danych 7
    odczytaj_bit_danych 6
    odczytaj_bit_danych 5
    odczytaj_bit_danych 4
    odczytaj_bit_danych 3
    odczytaj_bit_danych 2
    odczytaj_bit_danych 1
    odczytaj_bit_danych 0
    sei
    ret
    
    zapisz_rejestr:				; czas wykonania : 91 cykli
    cli
    sbi port_pdata-1,pin_pdata	; kierunek pdata - wyjście
    cbi port_pale,pin_pale 		; pale w dół
    zaladuj_bit_adresu 6
    zaladuj_bit_adresu 5
    zaladuj_bit_adresu 4
    zaladuj_bit_adresu 3
    zaladuj_bit_adresu 2
    zaladuj_bit_adresu 1
    zaladuj_bit_adresu 0
    sbi port_pdata,pin_pdata	; bit r/w
    sbi port_pclk,pin_pclk		; zegar w góre
    cbi port_pclk,pin_pclk		; bit r/w wysłany
    sbi port_pclk,pin_pclk		; zegar w góre
    sbi port_pale,pin_pale		; pale w góre
    zaladuj_bit_danych 7
    zaladuj_bit_danych 6
    zaladuj_bit_danych 5
    zaladuj_bit_danych 4
    zaladuj_bit_danych 3
    zaladuj_bit_danych 2
    zaladuj_bit_danych 1
    zaladuj_bit_danych 0
    cbi port_pdata-1,pin_pdata	; ustawienie pdata jako wejście
    sbi port_pclk,pin_pclk		; ustawienie pclk "1"
    sei
    ret
    


    Tu masz kod w asemblerze, który działa. stale port_pclk, pin_pclk itd muszą byc zdefiniowane. Przykładowo
    .equ port_pclk=portc
    .equ pin_pclk=0
    ustawia pclk pod pc0. Pamiętaj aby ustawic te porty jako wyjścia. Oraz zdefiniwać rejestry dane i adres.
    Z tego co pamietam to dopóki nie zrobisz main resetu po włączeniu, to żaden zapis rejestru i jego ponowny odczyt się nie uda. (bedzie FF). Ten kod potrzebuje 5 cykli na jeden bit. Więc przy 10 mhz masz 2Mbit/s. SPI bardziej się nadaje do obsługi dclk i dio niż interfejsu programującego.
    Co do dopasowania napięć, ja używałem dzielnika rezystorowego 2k i 3,3k. Takie dzielniki spkojnie wystarczaja aby osiągnac prędkość 2,2Mbit/s (kwarc 11,0592 mhz). Ale kwarc 8 mhz wystarczy aby zrobić bardzo duzo na avr'ach (szczególnie pisząc w asemblerze), więc ATMega8L będzie lepszy :)

    Powodzenia
    Boogie

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemów z programowaniem układu CC1000PP przez interfejs SPI z mikrokontrolerem ADuC841 (8052). Główne wątpliwości dotyczą ustawienia fazy i polaryzacji sygnału SCLK podczas komunikacji SPI oraz prawidłowego odczytu i zapisu rejestrów CC1000. Zalecane jest nadawanie danych na opadającym zboczu zegara PCLK, przy czym linia PCLK powinna być w stanie wysokim, gdy nie jest aktywna transmisja. Wskazano, że konfiguracja CC1000 wymaga ustawienia wielu rejestrów, a nie tylko pojedynczych, i warto skorzystać z narzędzia SmartRF Studio do wygenerowania poprawnych wartości. W przypadku problemów z hardware’owym SPI sugerowano implementację transmisji bit-banging, czyli ręczne sterowanie liniami danych i zegara. Poruszono także kwestie dopasowania poziomów napięć między mikrokontrolerem 5V a CC1000 3,3V, rekomendując użycie dzielników rezystorowych, układów buforujących lub specjalizowanych konwerterów poziomów, np. 74LVC4245AD. Zastosowanie zenerów 3V do obniżania napięcia może powodować spadki napięcia i problemy z logiką. Przykładowe fragmenty kodu asemblerowego pokazują implementację bit-banging do zapisu i odczytu rejestrów CC1000. Synchronizacja odbioru wymaga wysyłania preambuły. Ostatecznie poprawna kolejność inicjalizacji i konfiguracji rejestrów CC1000 pozwoliła na odczyt i działanie układu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA