Herkese iyi çalışmalar dilerim uydudoktoru ailesi!
Atölyede elimizdeki bir proje için ihtiyaç duyduğumuz, tamamen birbirinden bağımsız çalışan 2 kanallı toggle (durum değiştiren) tetik ve röle kontrol devresinin mikroC kodunu tamamladık.
Sistem kısaca şu mantıkla çalışıyor:
Projeyi yapacak arkadaşlara kolay gelsin, sorularınız olursa yorumlarda buluşalım!
Atölyede elimizdeki bir proje için ihtiyaç duyduğumuz, tamamen birbirinden bağımsız çalışan 2 kanallı toggle (durum değiştiren) tetik ve röle kontrol devresinin mikroC kodunu tamamladık.
Sistem kısaca şu mantıkla çalışıyor:
- 2 ayrı giriş pinine +V tetik sinyali geldiği anda (yükselen kenar mantığıyla) ilgili röle konum değiştirir (Açık kalır veya kapanır).
- İkinci bir tetik gelene kadar röle son konumunda kilitli kalır.
- Kanal 1 ve Kanal 2 tamamen birbirinden bağımsızdır.
- 16F628'in dahili modüllerinden kaynaklı sorun yaşanmaması için CMCON = 0x07 ile pinler tamamen dijital I/O konfigürasyonuna alınmıştır.
Donanım Bağlantı Şeması (PIC16F628):
- Pin 8 (RB2): 1. Tetik Girişi (+V Tetik)
- Pin 9 (RB3): 2. Tetik Girişi (+V Tetik)
- Pin 6 (RB0): 1. Röle Çıkışı
- Pin 7 (RB1): 2. Röle Çıkışı(Not: Giriş pinlerinin boşta parazit kapmaması için harici olarak 10k dirençle GND'ye çekilmesi tavsiye edilir.)
mikroC Kaynak Kodu:
Kod:
/*
* ============================================================================
* Proje Adı : 2 Kanal Bağımsız Tetik & Röle Kontrol (Toggle)
* MikroC : PIC16F628 İçin Uyarlanmıştır
* Geliştirici: Mehmet YILMAZ (uydudoktoru)
* Web Sitesi: https://www.uydudoktoru.com
* Tarih : Ekim 2026
*
* Donanım Bağlantı Şeması (PIC16F628):
* - Pin 8 (RB2) : 1. Tetik Girişi (+V)
* - Pin 9 (RB3) : 2. Tetik Girişi (+V)
* - Pin 6 (RB0) : 1. Röle Çıkışı
* - Pin 7 (RB1) : 2. Röle Çıkışı
* ============================================================================
*/
// uydudoktoru.com - Atölye Yazılım Künyesi
const char hazirlayan[] = "uydudoktoru.com - Mehmet YILMAZ";
void main() {
// ------------------------------------------------------------------------
// PORT VE ÇEVREBİRİM AYARLARI
// ------------------------------------------------------------------------
// 16F628 üzerindeki analog karşılaştırıcıları (CMCON) kapatıyoruz.
// Bu sayede PORTA ve PORTB pinleri tamamen dijital I/O olarak çalışır!
CMCON = 0x07;
// Pin Yönlendirmeleri (1 = Giriş, 0 = Çıkış)
// RB2 (Pin 8) ve RB3 (Pin 9) Giriş
// RB0 (Pin 6) ve RB1 (Pin 7) Çıkış
TRISB.F2 = 1; // 1. Tetik Girişi
TRISB.F3 = 2; // 2. Tetik Girişi
TRISB.F0 = 0; // 1. Röle Çıkışı
TRISB.F1 = 0; // 2. Röle Çıkışı
// İlk açılışta röle çıkışlarını güvenli olması için LOW (0V) yapıyoruz
PORTB.F0 = 0;
PORTB.F1 = 0;
// Hafıza ve Durum Değişkenleri
unsigned char eski_tetik1 = 0;
unsigned char eski_tetik2 = 0;
unsigned char durum1 = 0;
unsigned char durum2 = 0;
// ------------------------------------------------------------------------
// ANA DÖNGÜ (uydudoktoru.com Toggle Kontrol Mekanizması)
// ------------------------------------------------------------------------
while(1) {
// --- 1. KANAL (Pin 8 / RB2 Giriş -> Pin 6 / RB0 Çıkış) ---
unsigned char yeni_tetik1 = PORTB.F2;
// Yükselen kenar algılama (0V -> +V geçiş anı)
if (yeni_tetik1 && !eski_tetik1) {
durum1 = !durum1; // Durumu tersle (Toggle)
PORTB.F0 = durum1; // Röleye yansıt
Delay_ms(50); // Kontak sıçrama (debounce) gecikmesi
}
eski_tetik1 = yeni_tetik1;
// --- 2. KANAL (Pin 9 / RB3 Giriş -> Pin 7 / RB1 Çıkış) ---
unsigned char yeni_tetik2 = PORTB.F3;
// Yükselen kenar algılama (0V -> +V geçiş anı)
if (yeni_tetik2 && !eski_tetik2) {
durum2 = !durum2; // Durumu tersle (Toggle)
PORTB.F1 = durum2; // Röleye yansıt
Delay_ms(50); // Kontak sıçrama (debounce) gecikmesi
}
eski_tetik2 = yeni_tetik2;
} // while sonu
}