Skocz do zawartości
IGNORED

Bascom- czy ktoś może pomóc?


wojtekr

Rekomendowane odpowiedzi

Witam, forwałem jakiś artykuł dotyczący zastosowania generatora funkcji w sprzęcie audio. Chcę zrobić taki generator w oparciu o układ DDS AD9833 Analoga. Czy ktoś może mi pomóc w kwestii bascomowej składni przy wysyłaniu DDS Word'a. Potrafię obliczyć (chyba) niezbędne słowo DDS ale mam problem z wysyłaniem po SPI.

 

Pisałem na elektrodzie, Forum EP etc. Przejrzałem wszystkie linki z googl'a (nawet te gdzie 80% danych była po Chińsku) i nie znalazłem ostatecznego rozwiązania.

 

Jak mógłby sie ktoś odezwać kto potrafi obsługiwać transmisję SPI w bascomie to będę mógł sprecyzować mój problem.

 

dzięki i czekam na odpowiedź.

wojtekr

Ukryta Zawartość

    Zaloguj się, aby zobaczyć treść.
Zaloguj się, aby zobaczyć treść (możliwe logowanie za pomocą ) ->BASCOM Language Reference->SPIOUT oraz CONFIGSPI itd.

Zakładam że chodzi o AVR. Polecam też dokładnie przeczytać w pdf procesorka działanie transmisji SPI -jest bardzo proste, ale ważna jest polaryzacja zegara i LSB-MSB danych. Pozdr.

Ukryta Zawartość

    Zaloguj się, aby zobaczyć treść.
Zaloguj się, aby zobaczyć treść (możliwe logowanie za pomocą )

wojtekr, 23 Paź 2007, 20:33

 

>Witam, forwałem jakiś artykuł dotyczący zastosowania generatora funkcji w sprzęcie audio. Chcę

>zrobić taki generator w oparciu o układ DDS AD9833 Analoga. Czy ktoś może mi pomóc w kwestii

>bascomowej składni przy wysyłaniu DDS Word'a.

 

a jak masz zaprojektowany filtr dolnoprzepustowy na wyjsciu dds i jak jest f wejsciowa?

Sterowanie po SPI nie jest może banalne ale tez nic trudnego. Zrobiłem generator DDS na układdzie analoga (chyba AD9830 - juz nie pamietam). Steruje tym PIC18F, ale soft jest napisany w C. Pewna trudnośc moze sprawiać PCB, bo układ podobnie jak DAC- ma czesc cyfrowa i analogowa. Jezeli nie masz duzego doswiadczenia (z softem tez) to polecam dobry układ generatora MAX038. Dobre parametry i nie mpotrzebuje uC

CONFIG ETC.

...

 

dim f_out as word

dim vout as single

dim tmp as word

dim word_b(6) as byte

 

'control

word_b(1) = &b00100000

word_b(2) = &b00000000

 

f_out = 1000

vout = 20000000 / 268435456

vout = f_out / vout

tmp=round(vout)

tmp=tmp OR &B0100000000000000

 

word_b(3) = high(tmp)

word_b(4) = low(tmp)

 

gosub send

 

do

loop

End

 

send:

Reset cs

spiout word_b(1) , 4

set cs

return

 

 

------------------------------------------------------

 

koncepcja jest taka:

1. word_b(1) i word_b(2) ładujemy control register wymuszający konieczność załadowania osobno LSB I MSB, kształtu przebiegi etc.

2. obliczenie danych FREQ0

3. word_b(3) i word_b(4) zawierają 14 bitową liczbę zgodnie ze wzorem na F_OUT

4. zamiana na 1 drugiego bitu

5. wyslanie 4 bajtów zmiennej word_b

 

Objawy:

1. Układ generuje jakieś przebiegi ale bez większego związku ze zmienną f_out (ustalającą wartość częstotliwości wyjściowej). Często około 1MHz. Zmiana wartości i zaprogramowanie ponowne nie dają zmian- tylko odlączenie zasilania.

 

Główne pytania laika:

1. Czy koncepcja wysyłki jest OK?

2. W jakiej kolejności są wysyłane bity w SPIOUT?

3. HIGH()- funkca zwraca bity najstarsze danej zmiennej- to są te z prawej czy z lewej?

4. Czy SPIOUT() wymaga podwójnego wysyłania danych- czytałem gdzieś, że należy każdą operację wysyłania ponowić- jakiś błąd w bascomie.

 

Bardzo będę wdzięczny za jakąś pomoc. Zgodnie z podpowiedziami mogę ten układ testować i dawać na bierząco znać.

 

dzieki

w

tomek_j

 

zależy mi na wersji sterowanej uC. Generalnie udaje mi się zmusić całosć do generowania jakiś przebiegów i są one czyste- bez filtra. Jak dopracuję program i będę składał całość to oczywiście filtr wsadzę i masę poprawię. Ale na razie mam problem z podstawami sterowania. Ważne jest żeby to był bascom bo nie mam czasu uczyć się od podstaw C.

To co mogłem to już przeczytałem- teraz potrzebuje kilku wskazówek, które rozjaśnią mi w głowie rzeczy dla Was oczywiste. Ja jestem humanista z wykształcenia a DIY to hobby, które mnie pochłonęło.

Po SPI zrobiłem selektor z PGA2311 i działa ok więc jak skumam DDS'a w praktycznym aspekcie bascoma to dam sobie radę.

 

dzięki

w

>send:

> Reset cs

> spiout word_b(1) , 4

> set cs

>return

 

Sprawdz na symulatorze jakie wartości są tutaj przed wysłaniem w tablicy word_b, ew wpisz coś na sztywno i zobacz czy reaguje DDS. Masz na pewno poprawną inicjalizację? Może trzeba podciąganie na piny włączyć osobno? Popróbuj software i hardware SPI. Acha dalej nie napisałeś jaki procek.

 

>2. W jakiej kolejności są wysyłane bity w SPIOUT?

zależnie od konfiguracji, domyslnie: The default setting for hardware SPI when set from the Compiler, Options, SPI menu is MSB first, POLARITY = HIGH, MASTER = YES, PHASE = 0, CLOCKRATE = 4

>A jak powinna wyglądać poprawna inicjalizacja? I czy możesz napisać ja w bascomie?

 

 

a nie łaska spojrzeć do helpa?

 

Syntax for software SPI:

CONFIG SPI = SOFT, DIN = PIN, DOUT = PIN , SS = PIN|NONE, CLOCK = PIN

 

Syntax for hardware SPI:

CONFIG SPI = HARD, INTERRUPT=ON|OFF, DATA ORDER = LSB|MSB , MASTER = YES|NO , POLARITY = HIGH|LOW , PHASE = 0|1, CLOCKRATE = 4|16|64|128 , NOSS=1|0

 

Zależnie od potrzeb (od tego co wymaga DDS) wybierasz poszczególne opcje.

a potem

SPIINIT

i dane przez SPIOUT...

ale zacznij od napisania nowego krótkiego programu w stylu:

A(1)=cośtam, to co ma lecieć do DDS'a

...

A(4)=cośtam

Config SPI ....

SPIINIT

SPIOUT A , 4

i zobacz czy działa, bo jak masz dużo jakiś pierdół to może stos ci się przepełnia lub jakieś przerwanie przerywa transmisję itp, poza tym skonfiguruj oddzielnie jeszcze przed spiinit piny na których na pracować (przy software spi).

No i weź pod uwagę że Bascom to kiszka i faktycznie może nie działać za dobrze, ja się kiedyś męczyłem z RC5, w końcu przesiadłem się na C i jestem z tego niezmiernie szczęśliwy :)) -przynajmniej widać co się dzieje w procku, oraz zostaje dużo więcej pamięci...

  • 1 rok później...

Witam.

 

Potrzebuje pomocy przy programowaniu bascom, na scalaku atmega32. Mam częsciowo napisany program, nie wiem jak to dalej ruszyc.

 

Program ma przeliczać takie wartości jak prędkość, przyśpieszenie...

 

Zna się ktoś na bascomie tutaj?

 

pozdrawiam.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.



  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
  • Biuletyn

    Chcesz być na bieżąco ze wszystkimi naszymi najnowszymi wiadomościami i informacjami?
    Zapisz się
  • KONTO PREMIUM


  • Ostatnio dodane opinie o sprzęcie

    Ostatnio dodane opinie o albumach

  • Najnowsze wpisy na blogu

×
×
  • Dodaj nową pozycję...

                  wykrzyknik.png

Wykryto oprogramowanie blokujące typu AdBlock!
 

Nasza strona utrzymuje się dzięki wyświetlanym reklamom.
Reklamy są związane tematycznie ze stroną i nie są uciążliwe. 

 

Nie przeszkadzają podczas czytania oraz nie wymagają dodatkowych akcji aby je zamykać.

 

Prosimy wyłącz rozszerzenie AdBlock lub oprogramowanie blokujące, podczas przeglądania strony.

Zarejestrowani użytkownicy + mogą wyłączyć ten komunikat oraz na ukrycie połowy reklam wyświetlanych na forum.