Elektronika     Programowany generator częstotliwości (ATmega48)        




Jest to prosty generator sygnału prostokątnego o wypełnieniu 50%, zasilany stabilizowanym napięciem
Vcc=4.75-5.25V. Umożliwia uzyskanie różnych częstotliwości wyjściowych z rezonatora kwarcowego X1,
w zależności od stopnia podziału wybranego zworkami J1-J7. Na pewno przyda się w pracowni każdego
elektronika-amatora, np. podczas testowania różnych prototypowych układów cyfrowych.
Sercem generatora jest popularny mikrokontroler ATmega48. Zamiast niego można użyć modeli
ATmega88/168/328, które różnią się jedynie większą ilością pamięci. Program sterujący napisałem
w asemblerze i jest on identyczny dla każdego z wymienionych mikrokontrolerów (zajmuje 2594 bajty
pamięci FLASH).
Mikrokontroler jest taktowany zewnętrznym rezonatorem kwarcowym X1 o dowolnej częstotliwości CLK,
ale nie przekraczającej 20 MHz (jest to maksymalna częstotliwość pracy mikrokontrolera). W zależności
od użytego rezonatora może być konieczna zmiana wartości kondensatorów C4 i C5 na takie, jakie są
podane przez producenta w jego nocie aplikacyjnej. W praktyce przy wartościach C4=C5=22pF każdy
rezonator działa, ale nie oznacza to że generuje on częstotliwość idealnie równą jego częstotliwości no-
minalnej. Niemniej jednak w zastosowaniach amatorskich, nie jest wymagane uzyskanie sygnału o tak
dużej dokładności.
Po włączeniu zasilania lub resecie mikrokontrolera przyciskiem S1, program sterujący konfiguruje pin
PB0 (nr 14) jako wyjście z niskim stanem logicznym (LOW), a wszystkie pozostałe piny jako wejścia z
wysokim stanem logicznym (pull-up - włączone wewnętrzne rezystory podciągające). Następnie mikro-
kontroler odczytuje stan zworek J1-J7, które są podłączone do pinów PD0-PD6. Jeśli wszystkie zworki
są rozwarte (OFF), to program przechodzi do wykonywania pustej pętli (tryb 0). Wtedy na wyjściu gene-
ratora (złącze CON1) ciągle panuje niski stan logiczny (LOW). Natomiast, jeśli na zworkach jest usta-
wiona jakaś wartość binarna X>0 (J1 - bit najmłodszy), to program skacze do odpowiadającej jej pętli
(tryb X), która jest wykonywana bez przerwy. W każdej takiej pętli znajdują się dwie instrukcje zmienia-
jące stan wyjścia PB0 na przeciwny, a pomiędzy nimi są instrukcje/pętle decydujące, po jakim czasie
(liczba cykli) następują te zmiany. Każda pętla ma ustawiony inny czas opóźnienia pomiędzy zmianami,
ale zawsze czas pomiędzy jedną i drugą zmianą jest równy. Dzięki temu na wyjściu generatora uzysku-
je się sygnał prostokątny o różnej częstotliwości, ale zawsze o wypełnieniu 50%.
Rezystor R2 i kondensator C1 tworzą filtr dolnoprzepustowy, tłumiący zakłócenia oraz niebezpieczne
dla pinu PC6 mikrokontrolera szpilki napięcia, które powstają podczas drgań styków przy włączaniu
przycisku S1. Jednocześnie rezystor R2 zabezpiecza styki samego przełącznika S1, które są narażone
na przepływ prądu podczas zwierania kondensatora C1 do masy. Tranzystory T1 i T2 połączone rów-
nolegle pracują jako bufor wyjściowy, o wydajności do 100 mA.
Jak można łatwo zauważyć w tym generatorze mikrokontroler pracuje jako programowany dzielnik czę-
stotliwości CLK, która pochodzi z rezonatora kwarcowego i taktuje pracę mikrokontrolera. Częstotliwość
Fout na wyjściu generatora, zależy od częstotliwości CLK rezonatora oraz od ustawionego zworkami J1-
J7 stopnia podziału DIV. Można ją obliczyć ze wzoru: Fout=CLK/DIV [Hz].
Wszystkie możliwe do ustawienia kombinacje zworek J1-J7 i odpowiadające im stopnie podziału, znaj-
dują się w poniższej tabeli. Minimalny stopień podziału przy zachowaniu wypełnienia sygnału 50%, wy-
nosi CLK/6. Zmieniając program można uzyskać dowolnie wysoki stopień podziału, ale z krokiem co 2
(6, 8, 10, 12...). Niestety nie da się uzyskać dzielnika nieparzystego (7, 9, 11, 13...).
Po wlutowaniu wszystkich elementów w typowej kolejności (najpierw zworki) i upewnieniu się o braku
zwarć, wkładamy mikrokontroler w podstawkę. Następnie włączamy zasilanie i programujemy go wsa-
dem przez złącze CON3, przy użyciu dowolnego programatora ISP (In-System Programming). Złącze
CON3 zawiera sygnały rozmieszczone w standardowy sposób zalecany przez firmę Atmel, a pokazany
na schemacie ideowym. Konieczne jest również ustawienie odpowiednich wartości fuse i lock bitów:
FL (Fuse Low): $F7, FH (Fuse High): $DF ($D9 dla ATmega328), FE (Fuse Extended): $F9 ($FF dla
ATmega48/328), LB (Lock Bits): $FF. Takie ustawienia powodują, że mikrokontroler korzysta z zew-
nętrznego rezonatora kwarcowego (bity CKSEL3-0=0111); wyłączony jest dzielnik częstotliwości przez
8, co powoduje taktowanie mikrokontrolera pełną częstotliwością rezonatora (CKDIV8=1); wydłużony
jest czas jego startu do ok. 65ms po włączeniu napięcia zasilania (SUT1-0=11); wyłączone jest genero-
wanie częstotliwości taktującej mikrokontroler na pinie PB0 (CKOUT=1); włączona jest możliwość jego
resetowania przez pin PC6 (RSTDISBL=1) oraz programowania przez interfejs szeregowy (SPIEN=0).
Należy bardzo uważać, aby nie dokonać zmian w fuse/lock bitach, które uniemożliwią dalsze progra-
mowanie mikrokontrolera.
Po prawidłowym zaprogramowaniu mikrokontrolera, odłączamy programator od generatora. Następnie
na zworkach J1-J7 ustawiamy kombinację, odpowiadającą wybranemu stopniowi podziału częstotliwości
i naciskamy przycisk S1. Na wyjściu generatora powinien pojawić się sygnał prostokątny, o określonej
częstotliwości i wypełnieniu 50%.
Jeśli planujemy korzystać z jednego zestawu częstotliwości wyjściowych, możliwych do uzyskania za po-
mocą zmiany dzielnika, to rezonator kwarcowy wlutowujemy w płytkę. Natomiast, aby móc łatwo i wygo-
dnie korzystać z różnych rezonatorów, w miejsce X1 można wlutować żeńskie goldpiny precyzyjne. Dzię-
ki nim wymiana rezonatora będzie polegała tylko na szybkim wyjęciu starego i włożeniu nowego o innej
częstotliwości, bez potrzeby lutowania.
Generator zmontowałem na płytce jednostronnej o wymiarach 50x50 mm (2 zworki). W rogach płytki
znajdują się otwory montażowe o średnicy 3 mm, które mogą służyć do jej przykręcenia do obudowy lub
zamocowania w nich specjalnych nóżek, na których płytka będzie stała. Jako małą ciekawostkę dodam,
że płytkę prototypową wykonałem bez trawienia (mini wiertarką z małym frezem).
Ten generator ma identyczną płytkę drukowaną, jak Programowany generator PWM. Oba projekty
różnią się jedynie częstotliwością rezonatora kwarcowego X1, która w tym wypadku może wynosić
1-20 MHz oraz programem sterującym.

UWAGA! Generator nie jest w żaden sposób zabezpieczony przed odwrotnym podłączeniem napięcia
zasilania Vcc. Pomylenie polaryzacji tego napięcia spowoduje uszkodzenie mikrokontrolera.

Wszystkie możliwe kombinacje zworek J1-J7 i odpowiadające im stopnie podziału:

J7...J1DIV
0000000---
00000016
00000108
000001112
000010016
000010124
000011032
000011148
000100064
000100196
0001010128
0001011192
0001100256
0001101384
0001110512
0001111768
00100001024
00100011536
00100102048
00100113072
00101004096
00101016144
00101108192
001011112288
001100016384
001100124576
001101032768
001101149152
001110065536
001110198304
0011110131072
0011111196608
J7...J1DIV
0100000262144
0100001393216
0100010524288
0100011786432
01001001048576
01001011572864
01001102097152
01001113145728
01010004194304
01010016291456
01010108388608
010101112582912
010110016777216
010110110
010111020
010111130
011000040
011000150
011001060
011001170
011010080
011010190
0110110100
0110111200
0111000300
0111001400
0111010500
0111011600
0111100700
0111101800
0111110900
01111111000
J7...J1DIV
10000002000
10000013000
10000104000
10000115000
10001006000
10001017000
10001108000
10001119000
100100010000
100100120000
100101030000
100101140000
100110050000
100110160000
100111070000
100111180000
101000090000
1010001100000
1010010200000
1010011300000
1010100400000
1010101500000
1010110600000
1010111700000
1011000800000
1011001900000
10110101000000
10110112000000
10111003000000
10111014000000
10111105000000
10111116000000
J7...J1DIV
11000007000000
11000018000000
11000109000000
110001110000000
110010011000000
110010112000000
110011013000000
110011114000000
110100015000000
110100116000000
110101017000000
110101118000000
110110019000000
110110120000000
110111022
1101111222
11100002222
111000122222
1110010222222
11100112222222
111010044
1110101444
11101104444
111011144444
1111000444444
11110014444444
111101066
1111011666
11111006666
111110166666
1111110666666
11111116666666

  0 - zworka rozwarta (OFF), 1 - zworka zwarta (ON).


SPIS ELEMENTÓW:

Rezystory:
R1 - 10k
R2 - 470

Kondensatory:
C1, C2 - 100n
C3 - 100u/10V
C4, C5 - 22p
Tranzystory:
T1 - BC547 (lub inny NPN)
T2 - BC557 (lub inny PNP)

Układy scalone:
U1 - ATmega48/88/168/328
Rezonatory:
X1 - kwarcowy 1-20 MHz

Przełączniki:
S1 - mikroprzełącznik

Złącza:
CON1, CON2 - goldpin 2x1 (męskie)
CON3 - goldpin 3x2 (męskie)

Inne:
U1 - podstawka DIP28 zwykła
J1-J7 - zworka 2x1