Yıldız Teknik Üniversitesi
Bilgisayar Mühendisliği Bölümü
Gerçek Zaman Sistemleri Dönem Projesi
Ortamın Aydınlığının Mikro İşlemci
Kontrolüyle Belirlenmesi
Hazırlayan: Şadi Evren ŞEKER
Öğretim Görevlisi: Prof. Dr. Coşkun Sönmez
Bu projedeki amaç,gerçek zaman sistemleri dersinde görülmüş olan konuların bir uygulama üzerinde denenerek gerçekleştirilmesidir. Bir projenin bütün konuları kapsaması oldukça zor olduğu için konulardan en fazla kısmını kapsayacak olan bir proje düşünülmüş ve uygulanmıştır.
Projenin hedefi, ortamın aydınlık değerinin bulunarak hedeflenen aydınlık değerine getirilmesidir. Bu işlem için bir mikro işlemci, bir deney kiti, bir LDR elemanı, aydınlık kaynağı olarak bir LED ve iki adet dirençten oluşmaktadır.
İlgili elemanların dizilmesinden sonra LDR elemanından gelen bilgilerin kit üzerindeki çeviricilerle hesaplanması ve ADC ile okunmasından sonra, işlemci hedef aydınlığa göre LED’in aydınlığını değiştirmektedir.
Hedeflenen başarı, hedef değere tam oturan bir grafik elde etmektir. Uygulamada aydınlık değeri hedef aydınlık değerine gelene kadar LED ışık değeri arttırılmakta ancak bu değerden sonra artış kesilmektedir. Dolayısıyla artışın hedef değerini geçmesi mümkün değildir.
Hedef doğrultusunda bir donanım tasarımı yapılmış, donanıma kontrol elemanı olarak bir işlemci görevlendirilmiştir.
Işığın şiddeti doğrultusunda bazı maddelerin dirençleri değişmektedir. Bu değişkenlik eleman olarak kullanılmalarına izin vermektedir. Bu tip elemanlara LDR (Light Dependent Resistors) denilmektedir.
LDRlerin ışık şiddetleri ve direnç değerleri arasındaki bağlantı aşağıda verilmiştir.
R = AL -
Bu ilişkideki A ve değerleri sabit olup kullanılan malzemenin karakteristiğine göre değişmektedir. L değeri ise aydınlığı lux cinsinden vermektedir.
LDR elemanının davranışı
Yukarıdaki figür, ışık birimi olan lux ile dirneç birimi olan ohm arasındaki bağlantıyı göstermektedir.
Bu devrenin işlemci tarafından algılanabilmesi için analogdan dijitale çevirici bir ek devreye ihtiyaç vardır. Bu devre deney kitinin üzerinde hazır olarak sunulmuştur ancak okuduğu değer gerilim farkı olduğu için, gerilim farkını oluşturucu ikinci bir tasarım gerekmiştir.
Bu durumda LDR elemanının bir direnç ile birlikte aşağıdaki şekilde bağlanması gerilim farkının ADÇ ile başarılı bir şekilde okunmasını sağlamaktadır:
LDR üzerinden gerilim farkının okunması.
Figürde görüldüğü gibi, 5 Voltluk güç kaynağı 10 Kohm değerine kadar LDR’nin değer değiştirmesi durumunda ADC’ye bu gerilim farkını iletmektedir. 10Kohm değeri tamamen LDR ile yapılan ölçümler sonucunda öğrenilmiştir. ( Bulunabilen en aydınlık ortamda ve en karanlık ortamda LDR’nin verdiği direnç ölçülmüştür.) Gerilim farkı hesabı aşağıdaki figürde gösterilmiştir.
Gerilim farkının hesaplanması
Yukarıdaki figürde görüldüğü üzere iki direncin LDR örneğinde bağlanması gibi, ADC üzerinden okunan gerilim farkı R2* Vcc / (R1 + R2) olarak hesaplanmaktadır.
Bu direnç değeri aşağıdaki figürde gösterildiği gibi deney kitinin ADC ucuna bağlanmıştır:
LDR’nin ADC bağlantısı
Yukarıdaki figürde görüldüğü üzere, deney kiti üzerinde bulunan ADC girişlerinden 2. ve 4. ayaklar üzerine bağlantı yapılmış bu sayede tasarlanan LDR düzeneğindeki gerilim farkının sağlıklı bir şekilde okunması sağlanmıştır.
Işık kaynağı olarak herhangi bir aydınlatma elemanı kullanılabileceği gibi, sınırlı zamanın getirmiş olduğu limitlerden dolayı işlemci tarafından kontrol edilmesi en kolay eleman olan LED tercih edilmiştir. Bu sayede Dalga genişlik modüulasyonu sayesinde kolayca LED’in sağladığı aydınlık değeri değiştirilebilecektir.
LED’in ilgili port pinine bağlanması
LED yukarıda gösterildiği gibi, ilgili port pinine bir direnç vasıtası ile bağlanmıştır. Ve ışık değeri aşağıdaki figürde gösterildiği gibi değiştirilmektedir:
PWM, yardımı ile LED aydınlığının ayarlanması
Yukarıdaki figürde 3 ayrı dalganın farklı dalga genişlikleri ile gösterimi bulunmaktadır. İlk örnekte eşik değer ortada tutulmuş ve LED üzerine gelen akım (ve dolayısıyla gerilim farkı) ortalama bir değerde tutulmuştur. 2. örnekte eşik değer daha aşağılara alınarak dalga genişliği arttırılmış (dolayısıyla integrali ile bulunan (dalganın altında kalan alan) ) gerilim farkı maksimize edilmiştir. Son örnekte ise eşik değeri yükseltilmiş ve ancak çok az bir gerilim farkı uygulanmıştır.
İnsan gözü çok hızlı şekilde verilen bu dalgaları yakalayamamakta ancak aydınlık değerini değişmiş olarak görmektedir. Eşik değeri ayarlandıktan sonra bu dalgaların arka arkaya verilmesi ile LED’in aydınlık değeri ayarlanmış olmaktadır.
Bu projede ihtiyaç duyulan bir diğer eylem ise hedef bir aydınlık değerinin verilmesidir. Bunun için kullanıcı deney kiti üzerindeki tuşları kullanarak, yukarı veya aşağı yönde hedef aydınlığını değiştirmektedir. Hedef aydınlığı ve ortamın okunan aydınlığı ve LED üzerine verilen aydınlık çıkışı deney kitinin sunmuş olduğu LCD ekran üzerinde gösterilmektedir.
PIN basılmasını algılayan düzenek
Yukarıdaki örnekte görüldüğü üzere, PIN basılmadığı sürece, PIN üzerinden akım geçmekte, ancak PIN’e basılması durumunda PIN’in bulunduğu kol topraklanmakta dolayısıyla, deney kitine giden akım kesilmektedir. Deney kiti bu akım farklılıklarını Akım olduğu zaman binary 1 olmadığı zaman ise binary 0 olarak okumaktadır.
Bu bölüme kadar anlatılan 3 düzeneğin ( LDR, LED ve PIN düzenekleri) deney kitine bağlantı aşağıda gösterilmiştir.
Deney kiti şeması
ADC üzerinden okunan LDR bilgisi şemanın ADC ayaklarına girmekte ve işlemci üzerine 60. bacak olan ADC1/PF1 üzerinden bağlanmaktadır. PIN bağlantıları şemada B1 den B5’ e kadar gösterilen butonlar olup bu projede sadece 2 buton kullanılmıştır. Yukarı ve aşağı butonları olan bu butonlar ise işlemciye 47 ve 51. bacaklar olan B1 ve B5 ayaklarından girmektedir.
Son olarak LED bağlantısı için Buzzer üzerinden geçmekte olan OC3C / INT 5 / PE 5 bağlantısı olan 7. bacak kullanılmıştır.
Proje aşağıda görülen AVR-MT-128-A deney kiti ile aşağıdaki şekilde gerçeklenmiştir:
AVR-MT-128-A deney kiti görüntüsü (ön görüntü altta ve arka görüntü yukarıda)
Deney kitinin kullanılan LCD ve butonları ön yüzde görülmektedir. Deney kitinin besleme girişi, Emulator, RS 232 , ADC ve buzzer girşileri ise arka yüzde görülmektedir.
Çevre elemanları bağlandıktan sonra deney kiti aşağıdaki şekilde görülmektedir:
Çevre elemanları bağlanmış deney kiti
İşlemci kendine özgü bir takım komutları bulunmasına rağmen C dilinde programlanmaktadır. Proje kapsamında gereken akış diyagramı aşağıdaki şekilde verilmiştir:
İşlemci algoritmasının akış diyagramı
Yukarıdaki diyagramda görüldüğü üzere sayac sürekli olarak arttırılmaktadır, Pin’den değer gelemsi durumunda sayac Maksimum değere sahipse sayac 0 değerine getirilmekte benzer şekilde sayacın eşik değerini aşmasında da Pin 0 değerine getirilmektedir. Bu algoritmayı kapsayan kod parçası aşağıda verilmiştir:
interrupt [TIM0_OVF] void timer0_ovf_isr(void) |
{ |
// Reinitialize Timer 0 value |
TCNT0=256-5; |
// Place your code here |
sayac++; |
if (sayac>=sayac_esik) |
{ |
PORTE.5=1; |
if (sayac>=sayacmaks) |
{ |
sayac=0; |
} |
} |
else PORTE.5=0; |
|
if (sayac2) sayac2--; |
else |
{ |
sayac2=100; |
bayrak=1; |
} |
|
} |
Sayac işleyen kod parçası
Aşağıdaki kodun ilk 50 satırı, standart ekleme satırlarını içermektedir.120-140 satırları arasında ise önceki bölümde anlatılan akış diyagramı kodu bulunmaktadır.168-221 satırları arasında ise LCD programlaması da dahil olmak üzere kodun sonsuza kadar çalışmasını içeren ana blok bulunmaktadır. 228. satır sonrası ise standart düşük seviye prosedürleri içermektedir.
1 |
/***************************************************** |
2 |
This program was produced by the |
3 |
CodeWizardAVR V1.24.7f Standard |
4 |
Automatic Program Generator |
5 |
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. |
6 |
http://www.hpinfotech.com |
7 |
e-mail:office@hpinfotech.com |
8 |
|
9 |
Project : Gerçek Zamanda Kontrol |
10 |
Version : 1.00 |
11 |
Date : 07.06.2006 |
12 |
Author : Şadi Evren Şeker |
13 |
Comments: |
14 |
|
15 |
|
16 |
Chip type : ATmega128 |
17 |
Program type : Application |
18 |
Clock frequency : 16,000000 MHz |
19 |
Memory model : Small |
20 |
External SRAM size : 0 |
21 |
Data Stack size : 1024 |
22 |
*****************************************************/ |
23 |
|
24 |
#include <mega128.h> |
25 |
|
26 |
// Alphanumeric LCD Module functions |
27 |
#asm |
28 |
.equ __lcd_port=0x15 ;PORTC |
29 |
#endasm |
30 |
#include <lcd.h> |
31 |
#include <delay.h> |
32 |
#include <stdio.h> |
33 |
|
34 |
|
35 |
#define RXB8 1 |
36 |
#define TXB8 0 |
37 |
#define UPE 2 |
38 |
#define OVR 3 |
39 |
#define FE 4 |
40 |
#define UDRE 5 |
41 |
#define RXC 7 |
42 |
|
43 |
#define FRAMING_ERROR (1<<FE) |
44 |
#define PARITY_ERROR (1<<UPE) |
45 |
#define DATA_OVERRUN (1<<OVR) |
46 |
#define DATA_REGISTER_EMPTY (1<<UDRE) |
47 |
#define RX_COMPLETE (1<<RXC) |
48 |
|
49 |
#define sayacmaks 255 |
50 |
|
51 |
// Declare your global variables here |
52 |
char dizi1[20]; |
53 |
int LDR,LDRmaks,LDRmin; |
54 |
int LED,LEDmaks,LEDmin; |
55 |
int sayac=0,sayac_esik=0; |
56 |
int sayac2=100; |
57 |
char bayrak; |
58 |
|
59 |
//----- header işlevler --------- |
60 |
void baslat_mega128 (void); |
61 |
|
62 |
//------------------------------- |
63 |
|
64 |
// USART1 Receiver buffer |
65 |
#define RX_BUFFER_SIZE1 8 |
66 |
char rx_buffer1[RX_BUFFER_SIZE1]; |
67 |
|
68 |
#if RX_BUFFER_SIZE1<256 |
69 |
unsigned char rx_wr_index1,rx_rd_index1,rx_counter1; |
70 |
#else |
71 |
unsigned int rx_wr_index1,rx_rd_index1,rx_counter1; |
72 |
#endif |
73 |
|
74 |
// This flag is set on USART1 Receiver buffer overflow |
75 |
bit rx_buffer_overflow1; |
76 |
|
77 |
// USART1 Receiver interrupt service routine |
78 |
interrupt [USART1_RXC] void usart1_rx_isr(void) |
79 |
{ |
80 |
char status,data; |
81 |
status=UCSR1A; |
82 |
data=UDR1; |
83 |
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) |
84 |
{ |
85 |
rx_buffer1[rx_wr_index1]=data; |
86 |
if (++rx_wr_index1 == RX_BUFFER_SIZE1) rx_wr_index1=0; |
87 |
if (++rx_counter1 == RX_BUFFER_SIZE1) |
88 |
{ |
89 |
rx_counter1=0; |
90 |
rx_buffer_overflow1=1; |
91 |
}; |
92 |
}; |
93 |
} |
94 |
|
95 |
// Get a character from the USART1 Receiver buffer |
96 |
#pragma used+ |
97 |
char getchar1(void) |
98 |
{ |
99 |
char data; |
100 |
while (rx_counter1==0); |
101 |
data=rx_buffer1[rx_rd_index1]; |
102 |
if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0; |
103 |
#asm("cli") |
104 |
--rx_counter1; |
105 |
#asm("sei") |
106 |
return data; |
107 |
} |
108 |
#pragma used- |
109 |
// Write a character to the USART1 Transmitter |
110 |
#pragma used+ |
111 |
void putchar1(char c) |
112 |
{ |
113 |
while ((UCSR1A & DATA_REGISTER_EMPTY)==0); |
114 |
UDR1=c; |
115 |
} |
116 |
#pragma used- |
117 |
|
118 |
// Timer 0 overflow interrupt service routine |
119 |
interrupt [TIM0_OVF] void timer0_ovf_isr(void) |
120 |
{ |
121 |
// Reinitialize Timer 0 value |
122 |
TCNT0=256-5; |
123 |
// Place your code here |
124 |
sayac++; |
125 |
if (sayac>=sayac_esik) |
126 |
{ |
127 |
PORTE.5=1; |
128 |
if (sayac>=sayacmaks) |
129 |
{ |
130 |
sayac=0; |
131 |
} |
132 |
} |
133 |
else PORTE.5=0; |
134 |
|
135 |
if (sayac2) sayac2--; |
136 |
else |
137 |
{ |
138 |
sayac2=100; |
139 |
bayrak=1; |
140 |
} |
141 |
|
142 |
} |
143 |
|
144 |
#define ADC_VREF_TYPE 0x60 |
145 |
|
146 |
// Read the 8 most significant bits |
147 |
// of the AD conversion result |
148 |
unsigned char read_adc(unsigned char adc_input) |
149 |
{ |
150 |
ADMUX=adc_input|ADC_VREF_TYPE; |
151 |
// Start the AD conversion |
152 |
ADCSRA|=0x40; |
153 |
// Wait for the AD conversion to complete |
154 |
while ((ADCSRA & 0x10)==0); |
155 |
ADCSRA|=0x10; |
156 |
return ADCH; |
157 |
} |
158 |
|
159 |
void main(void) |
160 |
{ |
161 |
// Declare your local variables here |
162 |
|
163 |
int i,cikis=50,hedef=50; |
164 |
char tus1,tus5,tus1eski,tus5eski; |
165 |
|
166 |
baslat_mega128(); |
167 |
|
168 |
while (1) |
169 |
{ |
170 |
lcd_clear(); |
171 |
lcd_gotoxy(0,0); |
172 |
lcd_putsf("Gercek Zamanda Kontrol"); |
173 |
delay_ms(1000); |
174 |
lcd_clear(); |
175 |
lcd_gotoxy(0,0); |
176 |
lcd_putsf("Ayd=xxx Hdf=xxx"); |
177 |
lcd_gotoxy(0,1); |
178 |
lcd_putsf("Cik="); |
179 |
|
180 |
LDRmin=10; |
181 |
LDRmaks=90; |
182 |
|
183 |
while (1) |
184 |
{ |
185 |
if (bayrak) |
186 |
{ |
187 |
bayrak=0; |
188 |
|
189 |
i=read_adc(1); // ADC ile LDR üzerindeki gerilimi (kanal1) oku |
190 |
LDR=(100*i)/256; // ADC değerini 0-100 arasına ayarla |
191 |
|
192 |
sprintf(dizi1,"%3d",LDR); // ekrana LDR nin ayarlanmış değerini yaz |
193 |
lcd_gotoxy(4,0); |
194 |
lcd_puts(dizi1); |
195 |
|
196 |
sprintf(dizi1,"%3d",hedef); |
197 |
lcd_gotoxy(12,0); |
198 |
lcd_puts(dizi1); |
199 |
|
200 |
sprintf(dizi1,"%3d",cikis); |
201 |
lcd_gotoxy(4,1); |
202 |
lcd_puts(dizi1); |
203 |
|
204 |
if ((LDR<hedef)&&(cikis<100)) cikis++; |
205 |
if ((LDR>hedef)&&(cikis>0)) cikis--; |
206 |
|
207 |
sayac_esik = (sayacmaks*cikis)/100; |
208 |
|
209 |
tus1=PINA.0; |
210 |
tus5=PINA.4; |
211 |
if ((tus1==0)&&(tus1eski==1)) |
212 |
{ |
213 |
if (hedef<100) hedef++; |
214 |
} |
215 |
if ((tus5==0)&&(tus5eski==1)) |
216 |
{ |
217 |
if (hedef>0) hedef--; |
218 |
} |
219 |
tus1eski=tus1; |
220 |
tus5eski=tus5; |
221 |
|
222 |
} |
223 |
} |
224 |
|
225 |
}; |
226 |
} |
227 |
|
228 |
void baslat_mega128 (void) |
229 |
{ |
230 |
|
231 |
// Input/Output Ports initialization |
232 |
// Port A initialization |
233 |
// Func7=In Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In |
234 |
// State7=P State6=0 State5=T State4=P State3=P State2=P State1=P State0=P |
235 |
PORTA=0x9F; |
236 |
DDRA=0x40; |
237 |
|
238 |
// Port B initialization |
239 |
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In |
240 |
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T |
241 |
PORTB=0x00; |
242 |
DDRB=0x00; |
243 |
|
244 |
// Port C initialization |
245 |
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out |
246 |
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 |
247 |
PORTC=0x00; |
248 |
DDRC=0xFF; |
249 |
|
250 |
// Port D initialization |
251 |
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In |
252 |
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T |
253 |
PORTD=0x00; |
254 |
DDRD=0x00; |
255 |
|
256 |
// Port E initialization |
257 |
// Func7=In Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In |
258 |
// State7=T State6=T State5=1 State4=T State3=T State2=T State1=T State0=T |
259 |
PORTE=0x20; |
260 |
DDRE=0x20; |
261 |
|
262 |
// Port F initialization |
263 |
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In |
264 |
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T |
265 |
PORTF=0x00; |
266 |
DDRF=0x00; |
267 |
|
268 |
// Port G initialization |
269 |
// Func4=In Func3=In Func2=In Func1=In Func0=In |
270 |
// State4=T State3=T State2=T State1=T State0=T |
271 |
PORTG=0x00; |
272 |
DDRG=0x00; |
273 |
|
274 |
// Timer/Counter 0 initialization |
275 |
// Clock source: System Clock |
276 |
// Clock value: 500,000 kHz |
277 |
// Mode: Normal top=FFh |
278 |
// OC0 output: Disconnected |
279 |
ASSR=0x00; |
280 |
TCCR0=0x03; |
281 |
TCNT0=0x00; |
282 |
OCR0=0x00; |
283 |
|
284 |
// Timer/Counter 1 initialization |
285 |
// Clock source: System Clock |
286 |
// Clock value: Timer 1 Stopped |
287 |
// Mode: Normal top=FFFFh |
288 |
// OC1A output: Discon. |
289 |
// OC1B output: Discon. |
290 |
// OC1C output: Discon. |
291 |
// Noise Canceler: Off |
292 |
// Input Capture on Falling Edge |
293 |
// Timer 1 Overflow Interrupt: Off |
294 |
// Input Capture Interrupt: Off |
295 |
// Compare A Match Interrupt: Off |
296 |
// Compare B Match Interrupt: Off |
297 |
// Compare C Match Interrupt: Off |
298 |
TCCR1A=0x00; |
299 |
TCCR1B=0x00; |
300 |
TCNT1H=0x00; |
301 |
TCNT1L=0x00; |
302 |
ICR1H=0x00; |
303 |
ICR1L=0x00; |
304 |
OCR1AH=0x00; |
305 |
OCR1AL=0x00; |
306 |
OCR1BH=0x00; |
307 |
OCR1BL=0x00; |
308 |
OCR1CH=0x00; |
309 |
OCR1CL=0x00; |
310 |
|
311 |
// Timer/Counter 2 initialization |
312 |
// Clock source: System Clock |
313 |
// Clock value: Timer 2 Stopped |
314 |
// Mode: Normal top=FFh |
315 |
// OC2 output: Disconnected |
316 |
TCCR2=0x00; |
317 |
TCNT2=0x00; |
318 |
OCR2=0x00; |
319 |
|
320 |
// Timer/Counter 3 initialization |
321 |
// Clock source: System Clock |
322 |
// Clock value: Timer 3 Stopped |
323 |
// Mode: Normal top=FFFFh |
324 |
// Noise Canceler: Off |
325 |
// Input Capture on Falling Edge |
326 |
// OC3A output: Discon. |
327 |
// OC3B output: Discon. |
328 |
// OC3C output: Discon. |
329 |
// Timer 3 Overflow Interrupt: Off |
330 |
// Input Capture Interrupt: Off |
331 |
// Compare A Match Interrupt: Off |
332 |
// Compare B Match Interrupt: Off |
333 |
// Compare C Match Interrupt: Off |
334 |
TCCR3A=0x00; |
335 |
TCCR3B=0x00; |
336 |
TCNT3H=0x00; |
337 |
TCNT3L=0x00; |
338 |
ICR3H=0x00; |
339 |
ICR3L=0x00; |
340 |
OCR3AH=0x00; |
341 |
OCR3AL=0x00; |
342 |
OCR3BH=0x00; |
343 |
OCR3BL=0x00; |
344 |
OCR3CH=0x00; |
345 |
OCR3CL=0x00; |
346 |
|
347 |
// External Interrupt(s) initialization |
348 |
// INT0: Off |
349 |
// INT1: Off |
350 |
// INT2: Off |
351 |
// INT3: Off |
352 |
// INT4: Off |
353 |
// INT5: Off |
354 |
// INT6: Off |
355 |
// INT7: Off |
356 |
EICRA=0x00; |
357 |
EICRB=0x00; |
358 |
EIMSK=0x00; |
359 |
|
360 |
// Timer(s)/Counter(s) Interrupt(s) initialization |
361 |
TIMSK=0x01; |
362 |
ETIMSK=0x00; |
363 |
|
364 |
// USART1 initialization |
365 |
// Communication Parameters: 8 Data, 1 Stop, No Parity |
366 |
// USART1 Receiver: On |
367 |
// USART1 Transmitter: On |
368 |
// USART1 Mode: Asynchronous |
369 |
// USART1 Baud rate: 19200 |
370 |
UCSR1A=0x00; |
371 |
UCSR1B=0x98; |
372 |
UCSR1C=0x06; |
373 |
UBRR1H=0x00; |
374 |
UBRR1L=0x33; |
375 |
|
376 |
// Analog Comparator initialization |
377 |
// Analog Comparator: Off |
378 |
// Analog Comparator Input Capture by Timer/Counter 1: Off |
379 |
ACSR=0x80; |
380 |
SFIOR=0x00; |
381 |
|
382 |
// ADC initialization |
383 |
// ADC Clock frequency: 125,000 kHz |
384 |
// ADC Voltage Reference: AVCC pin |
385 |
// Only the 8 most significant bits of |
386 |
// the AD conversion result are used |
387 |
ADMUX=ADC_VREF_TYPE; |
388 |
ADCSRA=0x87; |
389 |
|
390 |
// LCD module initialization |
391 |
lcd_init(16); |
392 |
|
393 |
// Global enable interrupts |
394 |
#asm("sei") |
395 |
} |
İçindekiler
2.1. Işık Şiddetini Ölçen Eleman (LDR) 2
2.2. LDR’nin düzeneğe bağlanması 3
2.3. Işık Kaynağı olarak LED 5
2.4. Deney Kitinden Düğme Hareketi Algılama 6
2.5. Tasarlanan Donanımın Deney Kiti Üzerindeki Bağlantıları: 7
3. Projenin Gerçekleştirilmesi 8
Figürlerin Listesi
Fig. 1LDR elemanının davranışı 3
Fig. 2LDR üzerinden gerilim farkının okunması. 3
Fig. 3Gerilim farkının hesaplanması 4
Fig. 4LDR’nin ADC bağlantısı 5
Fig. 5LED’in ilgili port pinine bağlanması 5
Fig. 6PWM, yardımı ile LED aydınlığının ayarlanması 6
Fig. 7PIN basılmasını algılayan düzenek 6
Fig. 8Deney kiti şeması 7
Fig. 9AVR-MT-128-A deney kiti görüntüsü (ön görüntü altta ve arka görüntü yukarıda) 8
Fig. 10Çevre elemanları bağlanmış deney kiti 9
Fig. 11İşlemci algoritmasının akış diyagramı 10
Fig. 12Sayac işleyen kod parçası 11