PIC16F84A etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
PIC16F84A etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Ekim 2019 Perşembe

PIC16F84 Mikrodenetleyicili Şifreli Kilit Devre Şeması ve Çalışması


Mikrodenetleyicili şifreli kilit devre şeması

PIC16F84 kullanılarak gerçekleştirilen bu uygulamada, 4 haneli bir şifre, önceden belirlenmiş ve tuş takımından bu şifre girildiğinde röleye bağlı bir yükün çalıştırılması amaçlanmıştır.

Devrenin Çalışması :


İlk enerji verildiğinde kırmızı LED yanıktır ve röle kapalıdır. Doğru şifre girilinceye kadar devre bu durumda bekler. Tuştakımından doğru şifre rakamları sıra ile tuşlanıp "BA" butonu (AÇ butonu) tuşlandığında, röle çeker ve yeşil LED yanar. Bu durumun ardından herhangi bir tuşa basıldığında, röle tekrar kapanır ve kırmızı LED yanar. Devre için belirlenen şifre istenilen bir şifre ile değiştirilebilir.

30 Ağustos 2019 Cuma

PIC16F84A Mikrodenetleyici ile DC Motor Hız Kontrol ve Devir Yönü Değiştirme Uygulama Devresi ve Program Kodu



Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılan DC Motor Hız Kontrol ve Devir Yönü Değiştirme Uygulama Devresi görülmektedir.

Bu devrede Speed UP yazan butona basıldığında motor devri artarak hızlanmaktadır. Speed DOWN yazan butona basıldığında motor devri azalarak yavaşlamaktadır. Bu butonlara basarak motorun hızını istediğimiz gibi artırıp yavaşlatmak mümkündür. Motor maksimum hızına geldiğinde LED3 lambası yanmaktadır.

Direction1 ve Direction2 butonları devir yönünü değiştirmektedir. Değişen devir yönünde de Speed UP ve Speed DOWN butonları ile hız kontrolü yapılabilir. Devir yönüne göre LED1 ve LED2lambaları yanmaktadır.

PIC16F84A Mikrodenetleyici CCS C kodu

1  // DC motor speed and direction control using PIC16F84A CCS C code
2  // http://elektrikelektronikegitimi.blogspot.com
3  #include <16F84A.h>
4  #fuses HS,NOWDT,PUT,NOPROTECT
5  #use delay(clock = 8000000)
6  #use fast_io(B)
7  #use fast_io(A)
8  #use pwm(output = pin_a0, output = pin_a1, timer = 0, frequency= 500Hz, duty = 0)
9
10  unsigned int8 i = 1;
11  void main() {
12  port_b_pullups(TRUE); // Enable PORTB pull-ups
13  output_a(0); // PORTA initial state
14  set_tris_a(0); // All PORTA pins are configured as outputs
15  output_b(0); // PORTB initial state
16  set_tris_b(0x1F); // Configure RB0 to RB4 as inputs
17  pwm_off(); // Turn off all pwm outputs
18  while(TRUE) {
19  if(input(PIN_B0) == 0){ // If RB0 button pressed
20  i++; // Increment i by 1 (i = i + 1)
21  if(i > 99){
22  i = 100;
23  output_high(PIN_B7);} // RB7 LED ON
24  pwm_set_duty_percent(i * 10UL); // Duty cycle change in tenths %
25  delay_ms(100); } // Wait 100ms
26  if(input(PIN_B1) == 0){ // If RB1 button pressed
27  output_low(PIN_B7); // RB7 LED OFF
28  i--; // Decrement i by 1 (i = i - 1)
29  if(i < 1)
30  i = 1;
31  pwm_set_duty_percent(i * 10UL); // Duty cycle change in tenths %
32  delay_ms(100); } // Wait 100ms
33  if(input(PIN_B2) == 0){ // If RB2 button pressed
34  if(input(PIN_B5) == 0){
35  output_low(PIN_B6); // RB6 LED OFF
36  pwm_off(); // Turn off pwm for both outputs
37  output_a(0); // PORTA pins low
38  delay_ms(100); // Wait 100ms
39  pwm_on(PIN_A0); // Turn pwm on at RA0
40  output_high(PIN_B5); // RB5 LED ON
41  if(i > 99)
42  output_high(PIN_B7);}}
43  if(input(PIN_B3) == 0){ // If RB3 button pressed
44  if(input(PIN_B6) == 0){
45  output_low(PIN_B5); // RB5 LED OFF
46  pwm_off(); // Turn off pwm for both outputs
47  output_a(0); // PORTA pins low
48  delay_ms(100); // Wait 100ms
49  pwm_on(PIN_A1); // Turn PWM on at RA1
50  output_high(PIN_B6);
51  if(i > 99)
52  output_high(PIN_B7);}}
53  if(input(PIN_B4) == 0){ // If RB4 button pressed
54  pwm_off(); // Turn off pwm for both outputs
55  output_a(0); // PORTA pins low
56  output_b(0);} // PORTB pins low
57  }
58  }

PIC16F84A Mikrodenetleyici ile DC Motor Hız Kontrol Uygulama Devresi ve Program Kodu

Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış DC Motor Hız Kontrol Uygulama Devresi görülmektedir.


Bu devrede Speed UP yazan butona basıldığında motor devri artarak hızlanmaktadır. Speed DOWN yazan butona basıldığında motor devri azalarak yavaşlamaktadır. Butonlara basarak motorun hızını istediğimiz gibi artırıp yavaşlatmak mümkündür. Motor maksimum hızına geldiğinde LED yanmaktadır.

PIC16F84A Mikrodenetleyici CCS C kodu

1  // DC motor speed control using PIC16F84A CCS C code
2  // http://elektrikelektronikegitimi.blogspot.com
3  #include <16F84A.h>
4  #fuses HS,NOWDT,PUT,NOPROTECT
5  #use delay(clock = 8000000)
6  #use fast_io(B)
7  #use pwm(output = pin_a0, timer = 0, frequency= 500Hz, duty = 0)
8
9  unsigned int8 i;
10  void main() {
11  port_b_pullups(TRUE); // Enable PORTB pull-ups
12  output_b(0); // PORTB initial state
13  set_tris_b(3); // Configure RB0 & RB1 as inputs
14  while(TRUE) {
15  if(input(PIN_B0) == 0){ // If RB0 button pressed
16  i++; // Increment i by 1 (i = i + 1)
17  if(i > 100){
18  i = 100;
19  output_high(PIN_B2);} // Turn RB2 LED ON
20  pwm_set_duty_percent(i * 10UL); // Duty cycle change in tenths %
21  delay_ms(100); } // Wait 100ms
22  if(input(PIN_B1) == 0){ // If RB1 button pressed
23  output_low(PIN_B2); // Turn RB2 LED OFF
24  i--; // Decrement i by 1 (i = i - 1)
25  if(i < 1)
26  i = 1;
27  pwm_set_duty_percent(i * 10UL); // Duty cycle change in tenths %
28  delay_ms(100); } // Wait 100ms
29  }
30  }

PIC16F84A Mikrodenutonla 2 Lambanın Yakıp Söndürülmesi Uygulama Devresi ve Program Kodu


Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış 2 Lambanın Yakıp Söndürülmesi Uygulama Devresi görülmektedir.

Bu devrede bir butona basıldığında lambalardan birini yakmakta tekrar butona basıldığında aynı lambayı söndürmektedir. Diğer butona basıldığında diğer lambayı yakmakta tekrar basıldığında söndürmektedir.

PIC16F84A Mikrodenetleyici CCS C kodu

1  // PIC16F84A LED blink example
2  // http://elektrikelektronikegitimi.blogspot.com
3
4  #include <16F84A.h>;
5  #fuses HS,NOWDT,PUT,NOPROTECT
6  #use delay(crystal=8000000)
7
8  void main(){
9  while(TRUE){ // Endless loop
10  if(input(PIN_B0) == 0){ // If RB0 button is pressed
11  output_toggle(PIN_A0); // Toggle RA0 LED status
12  delay_ms(500); // Wait 500 ms
13  }
14  if(input(PIN_B1) == 0){ // If RB1 button is pressed
15  output_toggle(PIN_A1); // Toggle RA1 LED status
16  delay_ms(500); // Wait 500 ms
17  }
18  }
19  }

PIC16F84A Mikrodenetleyici ile 1 Butonla Lamba Yakıp Söndürme Uygulama Devresi ve Program Kodu


Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış 1 Butonla Lamba Yakıp Söndürme Uygulama Devresi görülmektedir.

Bu devrede butona basıldığında lamba yanmakta, tekrar basıldığında sönmektedir.

PIC16F84A Mikrodenetleyici CCS C kodu

1  // PIC16F84A external interrupt example
2  // https://simple-circuit.com/
3
4  #include <16F84A.h>
5  #fuses HS,NOWDT,PUT,NOPROTECT
6  #use delay(crystal=8000000)
7
8  #INT_EXT
9  void ext_isr(void)
10  {
11  output_toggle(PIN_A0);
12  }
13
14  void main()
15  {
16  output_low(PIN_A0);
17  ext_int_edge(H_TO_L); // Interrupt on falling edge of RB0/INT pin
18  clear_interrupt(INT_EXT); // Clear RB0/INT external interrupt flag bit
19  enable_interrupts(INT_EXT); // Enable RB0/INT external interrupt
20  enable_interrupts(GLOBAL); // Enable all unmasked interrupt
21 
22  while(TRUE) ; // Endless loop
23  }

PIC16F84A Mikrodenetleyici ile 4 Butonla Bir Lambanın Yakıp Söndürülmesi (4 Butonlu Vaviyen) Devresi


Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış 4 butonla bir lambanın yakıp söndürülmesi devresi görülmektedir.

Devre 4 botonlu vaviyen gibi çalışmaktadır. Herhangi bir butona basıldığında lamba yanmaktadır. Daha sonra aynı butona veya başka bir butona basıldığında lamba sönmektedir. 4 farklı butonla lamba istenildiği yakıp söndürülmektedir.

PIC16F84A Mikrodenetleyici CCS C kodu

1  // PIC16F84A PORTB interrupt on change example
2  // http://elektrikelektronikegitimi.blogspot.com
3
4  #include <16F84A.h>
5  #fuses HS,NOWDT,PUT,NOPROTECT
6  #use delay(crystal=8000000)
7
8  #INT_RB
9  void rb_isr(void)
10  {
11  clear_interrupt(INT_RB); // Clear RB port change interrupt flag bit
12  output_toggle(PIN_A0);
13  }
14
15  void main()
16  {
17  set_tris_b(0xF0);
18  clear_interrupt(INT_RB); // Clear RB port change interrupt flag bit
19  enable_interrupts(INT_RB); // Enable RB port change interrupt
20  enable_interrupts(GLOBAL); // Enable all unmasked interrupt
21  output_low(PIN_A0);
22 
23  while(TRUE) ; // Endless loop
24  }

PIC16F84A Mikrodenetleyici ile Ortak Katotlu 7 Segment Display Sayıcı Uygulama Devresi ve Program Kodu


Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış 4 haneli 7 Segment Display Sayıcı Uygulama Devresi görülmektedir.

Devrede ortak katotlu 7 segment display kullanılmıştır.

Rb7'ye bağlı olan butona basıldığında görüntülenen sayı değeri 1 artar.

PIC16F84A Mikrodenetleyici devresi +5V gerilim ile çalışmaktadır.

4 basamaklı 7 Segment Display Sayıcı PIC16F84A Mikrodenetleyici CCS C kodu

1 // 4-Digit digital counter using PIC16F84A (common cathode type)
2 // Common cathode 7-segment display
3 // http://elektrikelektronikegitimi.blogspot.com
4
5 #include <16F84A.h>
6 #fuses HS,NOWDT,PUT,NOPROTECT
7 #use delay(crystal=8000000)
8
9 short s; // Used to know button position
10 unsigned int digit, digit1, digit10, digit100,digit1000;
11 unsigned long i;
12 unsigned int seg(unsigned int num) {
13 switch (num) {
14 case 0 : return 0x3F;
15 case 1 : return 0x06;
16 case 2 : return 0x5B;
17 case 3 : return 0x4F;
18 case 4 : return 0x66;
19 case 5 : return 0x6D;
20 case 6 : return 0x7D;
21 case 7 : return 0x07;
22 case 8 : return 0x7F;
23 case 9 : return 0x6F;
24 }
25 }
26 void main() {
27 while(TRUE) {
28 if(input(PIN_B7) == 1)
29 s = 1;
30 if(s == 1) {
31 if(input(PIN_B7) == 0) {
32 s = 0;
33 i++;
34 if(i > 9999)
35 i = 0;
36 }
37 }
38 digit = i % 10;
39 digit1 = seg(digit);
40 output_a(0); // Turn off all displays
41 output_b(digit1); // Send ones digit
42 output_a(8); // Turn on display for ones
43 delay_ms(5);
44 digit = (i / 10) % 10;
45 digit10 = seg(digit);
46 output_a(0); // Turn off all displays
47 output_b(digit10); // Send tens digit
48 output_a(4); // Turn on display for tens
49 delay_ms(5);
50 digit = (i / 100) % 10;
51 digit100 = seg(digit);
52 output_a(0); // Turn off all displays
53 output_b(digit100); // Send hundreds digit
54 output_a(2); // Turn on display for hundreds
55 delay_ms(5);
56 digit = (i / 1000) % 10;
57 digit1000 = seg(digit);
58 output_a(0); // Turn off all displays
59 output_b(digit1000); // Send thousands digit
60 output_a(1); // Turn on display for thousands
61 delay_ms(5);
62 }
63 }

PIC16F84A Mikrodenetleyici ile Ortak Anotlu 7 Segment Display Sayıcı Uygulama Devresi ve Program Kodu



Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış 4 haneli 7 Segment Display Sayıcı Uygulama Devresi görülmektedir.

Devrede ortak anotlu 7 segment display kullanılmıştır.

Rb7'ye bağlı olan butona basıldığında görüntülenen sayı değeri 1 artar.

PIC16F84A Mikrodenetleyici devresi +5V gerilim ile çalışmaktadır.
4 basamaklı 7 Segment Display Sayıcı PIC16F84A Mikrodenetleyici CCS C kodu

1   // 4-Digit digital counter using PIC16F84A (common anode type)
2  // http://elektrikelektronikegitimi.blogspot.com
3
4  #include <16F84A.h>
5  #fuses HS,NOWDT,PUT,NOPROTECT
6  #use delay(crystal=8000000)
7
8  short s; // Used to know button position
9  unsigned int digit, digit1, digit10, digit100,digit1000;
10  unsigned long i;
11  unsigned int seg(unsigned int num) {
12  switch (num) {
13  case 0 : return 0xC0;
14  case 1 : return 0xF9;
15 case 2 : return 0xA4;
16  case 3 : return 0xB0;
17  case 4 : return 0x99;
18  case 5 : return 0x92;
19  case 6 : return 0x82;
20  case 7 : return 0xF8;
21  case 8 : return 0x80;
22  case 9 : return 0x90;
23  }
24  }
25  void main() {
26  while(TRUE) {
27  if(input(PIN_B7) == 1)
28  s = 1;
29  if(s == 1) {
30  if(input(PIN_B7) == 0) {
31  s = 0;
32  i++;
33  if(i > 9999)
34  i = 0;
35  }
36  }
37  digit = i % 10;
38  digit1 = seg(digit);
39  output_a(0x0F); // Turn off all displays
40  output_b(digit1); // Send ones digit
41  output_a(0x07); // Turn on display for ones
42  delay_ms(5);
43  digit = (i / 10) % 10;
44  digit10 = seg(digit);
45  output_a(0x0F); // Turn off all displays
46  output_b(digit10); // Send tens digit
47  output_a(0x0B); // Turn on display for tens
48  delay_ms(5);
49  digit = (i / 100) % 10;
50  digit100 = seg(digit);
51  output_a(0x0F); // Turn off all displays
52  output_b(digit100); // Send hundreds digit
53  output_a(0x0D); // Turn on display for hundreds
54  delay_ms(5);
55  digit = (i / 1000) % 10;
56  digit1000 = seg(digit);
57  output_a(0x0F); // Turn off all displays
58  output_b(digit1000); // Send thousands digit
59  output_a(0x0E); // Turn on display for thousands
60  delay_ms(5);
61  }
62  }

Postayla Gelen Deniz Kabuğu (Behiç Ak) Kitabının Özeti, Konusu ve Kitap Hakkında Bilgi

Kitabın Adı: Postayla Gelen Deniz Kabuğu Kitabın Yazarı:  Behiç Ak Kitap Hakkında Bilgi: Dijital dünyanın labirentlerinden çıkış mümkün mü?...