Jadymy dalej... skopiowałem kod z posta #117 i troche go dostosowałem do naszych potrzeb - zrobiłem z niego osobną funkcję która wysyła bajt do DDSa. Usunąłem też komentarze z kodu, żeby nie "zaśmiecały"
Kod:
void bajt_DDS(unsigned char bobo)
{
for(i=0; i<8; i+=1)
{
if(bobo&0b10000000)
{ PORTB = PORTB|0b00000010; }
else
{ PORTB = PORTB&(~0b00000010); }
PORTB = PORTB|0b00000001;
PORTB = PORTB&(~0b00000001);
bobo = bobo << 1;
}
}
Przypuścmy że wlutowaliśmy w płytkę DDSa generator kwarcowy 100MHz i chcemy żeby DDS chodził na częstotliwości nominalnej czyli 400MHz.
Aby zainicjować naszego DDSa musimy po podaniu napięcia/zresetowaniu
wysłać do niego 4 bajty:
1. 0b00000001
2. 0b00000000
3. 0b00000000
4. 0b00100100
Czynimy to za pomocą naszej funkcji bajt_DDS(tu_wpisujemy_wartość_bajtu)
Czyli w program trzebaby wpisać:
Kod:
bajt_DDS(0b00000001);
bajt_DDS(0b00000000);
bajt_DDS(0b00000000);
bajt_DDS(0b00100100);
KONIEC inicjacji !!
Najważniejsza z tego sprawa to czwarty bajt ... ustawia się nim mi ędzy innymi mnożnik dla taktowania DDSa.
5 najstarszych bitów tego bajtu za to odpowiada
czyli 0b
00100100
Jeśli chcecie przetaktować na 500 MHz - mając generator 100MHz mnoznik musi być 5x - będzie to wyglądać tak:
bajt_DDS(0b00100100);
Jesli zaś nie dysponujecie generatorem 100MHz, a posiadacie 50MHz lub 40 lub inny jakiś to tez da radę. Dla 50MHz trzeba ustawić mnożnik 8x bo 8x50=400MHz czyli
bajt_DDS(0b01000100);
Dla generatora 40MHz trzeba ustawić mnożnik 10x czyli
bajt_DDS(0b01010100);
Jutro dalsza część a mianowicie sklejanie obsługi DDSa do kupy a potem dodanie konfiguracji aby możnabyło wykorzystać dowolny PORT atmegi do sterowania DDSem wedle naszych potrzeb.