Odpowiedz 
 
Ocena wątku:
  • 3 Głosów - 3.33 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie w języku C w środowisku AVR Studio4
SP4EJT Offline
Marcin
****

Liczba postów: 340
Dołączył: 06-05-2011
Post: #118
RE: Programowanie w języku C w środowisku AVR Studio4
"Jutro" przerodziło się w "za tydzień" za co przepraszam. Już nadrabiam zaległości ...
UWAGA ! Naprawiam swój błąd ! Napisałem Wam wcześniej tę funkcję
Kod:
for(i=0; i<32; i+=1)     // pętla wykonująca polecenia 32 razy - czyli tyle ile bitów ma "słowo częstotliwości"
{
   if(frequency&0b10000000000000000000000000000000)    
   { PORTB = PORTB|0b00000010; }  
   else        
   { PORTB = PORTB&(~0b00000010); }  
   PORTB = PORTB|0b00000001;  
   PORTB = PORTB&(~0b00000001);  
   if(i==15)   { PORTB = PORTB&(~0b00000100); }    // I/O UPDATE w stan niski
   if(i==31)   { PORTB = PORTB|0b00000100; }   // I/O UPDATE w stan wysoki
   frequency = frequency << 1;    
}
która wysyła wartość częstotliwości do DDSa, ale tak naprawdę trzeba do układu syntezy wysłać wyrażenie FTW (jest o nim mowa w pdf-ie od AD9951) - zatem funkcja jest ok tylko należy wywalić z niej zmienną frequency i wstawić FTW, wszystko wyjaśni się niżej...
Musze opisać co trzeba zrobić aby DDS zaczął wytwarzać pożądaną częstotliwość - taki prosty algorytm:
Jeśli dopiero włączyliśmy układ musimy zainicjować DDS, po zmianie częstotliwości poprzez naciskanie guzików, program ma obliczyć wyrażenie FTW, które trzeba wysłać do DDSa. KONIEC Smile
FTW to 32-bitowe słowo ustawiające częstotliwość. Jest ono zależne od częstotliwości taktowania naszego DDSa oraz częstotliwości przez nas żądanej czyli tej jaką ma wytworzyć AD9951.
FTW= częstotliwość * 4294967296 / zegar_DDSa - taki zapis będziemy wykorzystywać w programie.
należy więc dodać do naszego programu trzy linijki:
Kod:
unsigned long int FTW, fs;   // deklaracja zmiennej FTW i zmiennej fs
fs=400000000;         // fs to częstotliwość taktowania DDSa
...
...
FTW=4294967296*frequency/fs;
Ostatnia linijka musi być wstawiona w kod programu po obliczeniu nowej wartości częstotliwości.
Zrobię Wam gotowca a wy sobie zobaczcie gdzie to się znalazło.
Więc mamy obliczone FTW i teraz wystarczyłoby wysłać FTW do DDSa żeby wytwarzał chcianą częstotliwość.
tak na tym etapie wyglądałby plik obsługi DDS jakim jest układ AD9951:
.zip  AD9951-BEZ-KONF.zip (Rozmiar: 802 bajtów / Pobrań: 1061)
ale ... działa to narazie na porcie B - a my może nie chcemy na porcie B tylko na innym porcie, należy zatem dodać konfigurację i plik będzie wyglądał wtedy tak:
.zip  AD9951.zip (Rozmiar: 1.17 KB / Pobrań: 832)
A cały program macie gotowy poniżej:
.zip  nowy.zip (Rozmiar: 52.93 KB / Pobrań: 886)

EDIT: 1. Układ funkcjonuje z umasionym wyprowadzeniem CS układu AD9951. Odkryłem że RESET nie może być umasiony na stałe bo impuls RESET jest konieczny do uruchomienia układu. Więc na chwilkę będzie trzeba zapodać stan wysoki na wypr. RESET a potem cały czas ma być niski - kod poniżej - wstawiłem go do funkcji inicjującej DDSa
Kod:
DDS_PORT = DDS_PORT | (1<<DDS_RESET);     
    _delay_ms(10);
    DDS_PORT = DDS_PORT & ~(1<<DDS_RESET);
    _delay_ms(10);
no i zapomniałem o określieniu wyprowadzeń portu który ma obsługiwać DDSa jako wyjścia czyli:
Kod:
#define DDR_DDS      DDRC        // część konfiguracyjna
DDR_DDS = (1<<DDS_UPDATE)|(1<<DDS_SDIO)|(1<<DDS_SCLK)|(1<<DDS_RESET);    // to wstawię również do funkcji inicjującej DDS
Projekty płytek dostępne pod linkami (wybierzcie jeden i zróbcie sobie moduł z układem AD9951):
http://sp-hm.pl/thread-144-post-8775.html#pid8775
http://www.haukolor.de/projekte-neu/dds/ad9951
http://www.dl4jal.eu/avfo/avfo.html
http://myweb.tiscali.co.uk/radiokits/rad...daptor.htm
lub mój projekt - pliki dla programu eagle + plik partlist.txt aby wiedzieć co trzeba zakupić. Nie krytykujcie mnie za schemat bo wiem że jest nieczytelny Smile powstał w dziwnych okolicznosciach :
.zip  moduł-AD9951-jedna-masa.zip (Rozmiar: 49.52 KB / Pobrań: 837)

Program został sprawdzony - DZIAŁA ! - Nie zapomnijcie skonfigurować portów według swoich połaczeń i mnożnika częstotliwości taktowania DDSa oraz zmiennej fs czyli częstotliwości taktowania - w programie są moje ustawienia
Na dowód że działa filmik:
.zip  Wideo0107_001.zip (Rozmiar: 2.05 MB / Pobrań: 884)

Teraz pytanie do WAS :
Czy ulepszamy program syntezy częstotliwości aby miał ładne wyświetlanie i niezbędne do działania radia bajerki ... ?
Czy robimy inny projekt, np. obsługa pamięci EEprom lub przetwornika Analogowo-cyfrowego, który jest w Atmedze - można na nim zrobić prosty voltomierz np. napięcia akumulatora. Albo coś innego co napiszecie a ja będę w stanie ogarnąć swym umysłem.

Na koniec linki które polecam przeczytać - dużo wniosą do Waszego życia Smile ja o tym wszystkim nie pisałem bo już jest napisane a poza tym ten wątek miałby już setki stron Tongue :
http://hobby.abxyz.bplaced.net/index.php?pid=4&cid=1 - tu o programowaniu w C - polecam tę stronę
http://atmega32.republika.pl/ - o mikrokontrolerze Atmega32
(Ten post był ostatnio modyfikowany: 22-02-2012 23:42 przez SP4EJT.)
22-02-2012 23:10
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 22-02-2012 23:10

Skocz do:


Użytkownicy przeglądający ten wątek: 12 gości