#include <xc.h> // Konfigürasyon bitleri (derleyiciye göre ayarlanabilir) #pragma config FOSC = HS // Yüksek hızlı osilatör #pragma config WDT = OFF // Watchdog Timer devre dışı #pragma config LVP = OFF // Düşük Voltajlı Programlama devre dışı // ADC ve Kontaktör Çıkış Pin Tanımlamaları #define ADC_CURRENT_CHANNEL 0 // Akım kanalı (AN0) #define ADC_VOLTAGE_CHANNEL 1 // Gerilim kanalı (AN1) #define NUM_STEPS 16 // 16 adım int contactor_pins[NUM_STEPS] = {PORTBbits.RB0, PORTBbits.RB1, ..., PORTBbits.RB15}; // Örnek tanım void ADC_Init() { // ADC yapılandırması ADCON1 = 0x0E; // AN0 ve AN1 analog giriş ADCON2 = 0xA9; // ADC hız ve yapılandırma ADCON0bits.ADON = 1; // ADC modülünü aktif et } unsigned int ADC_Read(unsigned char channel) { ADCON0 &= 0xC5; // Kanalı temizle ADCON0 |= (channel << 3); // Seçilen kanalı ayarla __delay_us(30); // ADC örnekleme süresi ADCON0bits.GO_nDONE = 1; // ADC dönüştürmeyi başlat while (ADCON0bits.GO_nDONE); // Dönüşüm bitene kadar bekle return ((ADRESH << 8) + ADRESL); // 10-bit ADC sonucu } void Contactor_Control(int step) { for (int i = 0; i < NUM_STEPS; i++) { if (i == step) { contactor_pins[i] = 1; // Kontaktörü çek } else { contactor_pins[i] = 0; // Kontaktörü bırak } } } void main() { ADC_Init(); // ADC başlat while (1) { unsigned int voltage = ADC_Read(ADC_VOLTAGE_CHANNEL); // Güç faktörü hesaplamasını buraya ekle // Örnek: float powerFactor = calculatePowerFactor(current, voltage); // Kontrol algoritmasını çağır // int step = determineStep(powerFactor); // Contactor_Control(step); } }
Standard input is empty
#include <xc.h> // Konfigürasyon bitleri (derleyiciye göre ayarlanabilir) #pragma config FOSC = HS // Yüksek hızlı osilatör #pragma config WDT = OFF // Watchdog Timer devre dışı #pragma config LVP = OFF // Düşük Voltajlı Programlama devre dışı // ADC ve Kontaktör Çıkış Pin Tanımlamaları #define ADC_CURRENT_CHANNEL 0 // Akım kanalı (AN0) #define ADC_VOLTAGE_CHANNEL 1 // Gerilim kanalı (AN1) #define NUM_STEPS 16 // 16 adım int contactor_pins[NUM_STEPS] = {PORTBbits.RB0, PORTBbits.RB1, ..., PORTBbits.RB15}; // Örnek tanım void ADC_Init() { // ADC yapılandırması ADCON1 = 0x0E; // AN0 ve AN1 analog giriş ADCON2 = 0xA9; // ADC hız ve yapılandırma ADCON0bits.ADON = 1; // ADC modülünü aktif et } unsigned int ADC_Read(unsigned char channel) { ADCON0 &= 0xC5; // Kanalı temizle ADCON0 |= (channel << 3); // Seçilen kanalı ayarla __delay_us(30); // ADC örnekleme süresi ADCON0bits.GO_nDONE = 1; // ADC dönüştürmeyi başlat while (ADCON0bits.GO_nDONE); // Dönüşüm bitene kadar bekle return ((ADRESH << 8) + ADRESL); // 10-bit ADC sonucu } void Contactor_Control(int step) { for (int i = 0; i < NUM_STEPS; i++) { if (i == step) { contactor_pins[i] = 1; // Kontaktörü çek } else { contactor_pins[i] = 0; // Kontaktörü bırak } } } void main() { ADC_Init(); // ADC başlat while (1) { unsigned int current = ADC_Read(ADC_CURRENT_CHANNEL); unsigned int voltage = ADC_Read(ADC_VOLTAGE_CHANNEL); // Güç faktörü hesaplamasını buraya ekle // Örnek: float powerFactor = calculatePowerFactor(current, voltage); // Kontrol algoritmasını çağır // int step = determineStep(powerFactor); // Contactor_Control(step); } }