Mikrokontrolörler, günlük kullandığımız sayısız elektronik cihazın arkasındaki görünmez beyinlerdir, mikrodalga fırınlardan ve uzaktan kontrollerden otomotiv sistemlerine ve tıbbi gadget'lara kadar kontroller sunar.Mevcut birçok mikro kontrolel aile arasında, PIC (Peripheral Interface Controller) mikro kontroller, mikropişmanlar, basitlik teknolojisi tarafından geliştirilen ve gömülü sistemler için uygun mikro denetim modelleri sunar.
Bir PIC Microkontrolü nedir?
Bir PIC mikrokontrolü, merkezi bir işleme birimini (CPU) entegre eden tek bir bilgisayardır (RAM, ROM/Flash), ve programlanabilir giriş / çevreler tek bir entegre devrede. PICs Harvard mimarlık cihazlarının anlamı ve veri anıları ayrıdır, bu da aynı anda erişim ve uygulama hızını arttırır. Microchip, PIC12), orta ölçekli (PIC10, PIC12) ve genişleyen bir şekilde tasarlanmıştır.
C CPC Programlama ile Başlayın
C'deki PIC mikrokontrolörler bir gelişim ortamı gerektirir, bir derleyici, bir programcı / tekniğe ve bazı temel donanıma sahiptir. C dili tercih edilir, çünkü doğrudan kayıt manipülasyonu ve verimli kod nesline izin verirken, bu adımları takip eder.
1. MPLAB X IDE
MPLAB X IDE Microchip'un resmi entegre edilmiş geliştirme ortamıdır. NetBeans platformuna dayanmaktadır ve proje yönetimi, kod düzenleme, debugging ve simülasyon araçları sağlar.ETHFLT:0)Download MPLAB X IDE).
2. XC8 Compiler
XC8 derr, C kodunu PIC mikrokontroller için makine koduna çevirir.Eski HI-TECH C derr.ETHFLT:0) İndir XC8) ve yüklemesi için, Microchip, ücretsiz bir sürüm sunar.
3. Bir Programcı alın
Bilgisayarınızdan PIC mikrokontrolöre transfer etmek için, bir donanım programına ihtiyacınız var. En yaygın seçimler PICkit 4, PICkit 5 veya MPLAB Snap. Bu cihazlar USB üzerinden bağlanır ve PIC'nin programlama pinlerine bağlanır (genellikle ICSP – In-Circuit Seri Programlama).
4. Bir Breadboard Devresi Oluştur
Klasik ilk proje için - bir LED'i kırın - bir PIC mikrokontrole ihtiyacınız var, bir ekmek dolabı, bir LED, mevcut bir dayanıklılık direnç (tipik olarak 220ULLAH'a 470ULL) ve bir 5V güç kaynağı (veya bir gerilim düzenleyicisi kullanarak) ve 20MHz kristal veya iç osilatöre (en modern PIC'lerin hepsinin LED'e ve bir GPIO pin (e.g., RB0) ve zemine bağlan.
Cebinizde İlk PIC Programınızı Yazmak
Klasik ve alıntı;blink" program, 8 MHz'de iç osilatör kullanarak tam bir örnektir.
Tamam Blink Kodu Örnek
// PIC16F88 Blink LED Example using Internal Oscillator
#define _XTAL_FREQ 8000000 // Define oscillator frequency for delay macros
#include <xc.h> // XC8 header file
// Configuration bits: internal oscillator, no watchdog, power-up timer enabled
#pragma config FOSC = INTOSCIO // Internal oscillator with I/O on RA6
#pragma config WDTE = OFF // Watchdog Timer disabled
#pragma config PWRTE = ON // Power-up Timer enabled
#pragma config MCLRE = OFF // RA5/MCLR as digital I/O
#pragma config BOREN = OFF // Brown-out reset disabled
#pragma config LVP = OFF // Low-voltage programming disabled
#pragma config CPD = OFF // Data EEPROM code protection off
#pragma config CP = OFF // Flash program memory code protection off
void main(void) {
TRISB = 0x00; // Set all Port B pins as outputs
PORTB = 0x00; // Clear Port B outputs
while(1) {
RB0 = 1; // Turn LED on (connect LED to RB0)
__delay_ms(500); // Delay 500 ms
RB0 = 0; // Turn LED off
__delay_ms(500); // Delay 500 ms
}
}
MakroFLEN 1: XC8 tarafından sağlanır ve gerçek osilatör frekansına göre tanımlanmalıdır.TheDAND:3) hatları donanım yapılandırması bitleri - uygun işlem için gerekli. Bu örnekte, iç oscillator kullanılır, bu nedenle dışsal olmayanlar için LED gerekir.
Anahtar Kavramları PIC Programlamada Anlamak
Bir LED'in ötesinde hareket etmek için, C programlamayı PICs için tanımlayan birkaç temel kavramı kavramanız gerekir. Bu kavramlar daha karmaşık projeler için bina bloklarıdır.
Kayıtlar ve Bit Manipulation
Her periferik ve bir PIC özelliği, özel bir işlev kayıtlarında veya açık bir şekilde kontrol edilir (örneğin, CENGT: 4), Port B pins yönünde yapılandırılır.Bir giriş yapmak için biraz ayarlanır; bunu bir çıkış yapar; bireysel olarak değiştirmek için C.D.P.'ye göre biraz daha fazla makro kodlar verir.
TRISBbits.TRISB0 = 0; // Alternative using bitfield structure
PORTBbits.RB0 = 1; // Set pin RB0 high
Her zaman doğru kayıt isimlerini ve biraz pozisyonlarını bulmak için mikrokontrolleyicinin veri tablosuna atıfta bulunun.
Giriş/Output Ports
PIC mikrokontroller birkaç I/O portuna sahiptir (PORTA, PORTB, PORTC, vs.). Her port, yön için ilgili kayıtlardan kaçınır: 03.03.2012,00 $ 1.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.
Interrupts
Interrupts, mikro kontrolcülerin olaylara cevap vermelerine izin verir (örneğin, XC8'de bir düğme basını, zamanlayıcı aşırı yükleme veya seri veri resepsiyonu) sürekli olarak anket yapmadan.Bir kesinti gerçekleştiğinde, CPU ana programına son verir, bir ISR'yi bir LED'e sokmak için yürütebilir.
Örnek: RB0'da Dış Yol
void __interrupt() ISR(void) {
if(INTF) { // Check if external interrupt flag is set
LATB ^= 0x01; // Toggle RB0 (LED)
INTF = 0; // Clear interrupt flag
}
}
void main(void) {
TRISB = 0x00; // All outputs
PORTB = 0x00;
OPTION_REG &= 0xBF; // Clear INTEDG to interrupt on falling edge
INTCON |= 0x90; // Enable GIE and INTE
while(1); // Infinite loop, wait for interrupt
}
Interrupts verimli gerçek zamanlı sistemler için önemlidir, ancak paylaşılan değişkenlerin dikkatli bir şekilde işlenmesini gerektirir (muhtemelen kritik bölümler sırasında kesintiye uğramaları gerekir).
Zamanlayıcılar
Zamanlayıcılar gecikmeler üretebilecek donanım sayacı, giriş sinyali frekansı veya PWM dalgaformları üretebilecektir. Çoğu PICs birden fazla zamanlayıcı modüle sahiptir (Timer0, Timer1, Timer2, vs.) farklı yeteneklere sahip olmak için. Timer0, 8bit zamanlayıcıdır; Timer1 16 bittir ve bir erkanık olarak çalışabilir; Timer2, PWM için genellikle kullanılır.
// Example: Configure Timer0 to interrupt every 10 ms at 8 MHz internal clock
// Prescaler = 256; TMR0 load value = 0xF0 (240 decimal)
// Timer0 tick = 4 / 8MHz = 0.5 µs * 256 = 128 µs per increment
// 240 * 128 µs = 30.72 ms (adjust for desired period)
TMR0 = 0xF0;
OPTION_REG = 0x07; // Prescaler 1:256 assigned to Timer0, internal clock
INTCONbits.TMR0IE = 1; // Enable Timer0 interrupt
INTCONbits.GIE = 1;
Zamanlayıcıları doğru zaman üsleri oluşturmak için gereklidir, PWM motor kontrolü için sinyalleri veya giriş pul genişliğini yakalamak için gereklidir.
Analog-to- Digital Converter (ADC)
Birçok PICs, analog bir gerilim (0 VDD) bir dijital değere dönüştüren bir ADC modülü içerir. ADC örnek ve en azimasyon kaydı (SAR) mimarisi.Bir analog sensör okumak için, kanalı yapılandırın, tamamlanma zamanı, başlangıç dönüştürmeye başlayın, sonuç kaydı okuyun (ADRESH, ADRESL). Örnek: Örnek:
ADCON0 = 0x01; // Select channel AN0, turn ADC on
__delay_us(10); // Wait for acquisition time
GO_nDONE = 1; // Start conversion
while(GO_nDONE); // Wait for conversion to finish
int analogValue = ((ADRESH << 8) + ADRESL); // 10-bit result
ADC okumaları sıcaklık algılaması, ışık yoğunluğu, güçlüometreler ve diğer birçok analog giriş için kullanılabilir.
Peripheral İletişim Protokolü
PICs ortak seri protokolleri destekliyor: UART (asynchronous seri), SPI (senkron), ve I2C (iki-tel arayüzü) Bu, sensörler, ekranlar, diğer mikro kontroller ve modüller ile iletişim sağlar.
- [FONT=0)UART[[DÜT:1): RS-232 için kullanılır, seri konsollar, GPS modülleri, Bluetooth modülleri. Configure baud rate, enable iletim/receive, and use TXREG/RCREG records.
- [FONT:0)SPI[[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜŞÜNÜDÜSÜŞÜNÜ: 0 ), SCI [DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜŞÜNÜŞÜNÜDÜŞÜNÜSÜŞÜNÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜSÜŞÜNÜSÜSÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
- [FONT:0)I2C[DÜT:1]: İki-tel otobüsle, sensörler ve EEPROMs gibi birçok yavaş cihazı bağlantı kurmak için uygun.
Her protokol saat oranı, veri formatının dikkatli bir şekilde başlangıçlandırılması ve engellenme modunda kullanılmaması gerekir.
Memory Organizasyon ve Programlama
PIC mikrokontroller ayrı program hafızasına sahiptir (Flash), veri hafızasını (RAM) ve bazen EEPROM. Program hafızasını depolar; veri hafıza değişkenleri ve kayıtları; EEPROM, C programlamada yalnızca 256 tane RAM'a kadar veri depoları kullanabilirsiniz.
Data EEPROM kullanımı
Birçok PIC, derleyici tarafından sağlanan rutinlerle iç EEPROM içerir. Örnek:
#include <xc.h>
void write_eeprom(unsigned char addr, unsigned char data) {
while(WR); // Wait for previous write to finish
EEADR = addr;
EEDATA = data;
EECON1bits.EEPGD = 0; // Point to EEPROM
EECON1bits.WREN = 1; // Enable write
INTCONbits.GIE = 0; // Disable interrupts
EECON2 = 0x55; // Required sequence
EECON2 = 0xAA;
EECON1bits.WR = 1; // Start write
INTCONbits.GIE = 1; // Re-enable interrupts
EECON1bits.WREN = 0; // Disable write after completion
}
Debugging ve Optimizasyon İpuçları
Debugging gömülü kodu zor olabilir çünkü UART üzerinde geleneksel bir debugger kullanamazsınız?—?Bu, PICkit 4 ışık gibi bir serçeleme (istLAB X IDE molası, değişken saatler ve tek adım) iletebilirsiniz. ancak basit bir debugging için bir LED'i takip edebilir veya UART'ta bir ekran görüntüsü gönderirsiniz.
Optimizasyon ipuçları: Mümkün olduğunda yerel değişkenleri kullanın (GPR'lerde ikamet ederler). XC8'deki enable derleyici optimizasyon (özgür sürüm teklifleri -O0; ücretli sürüm -O1, -O2, -Os).Inline küçük fonksiyonlar için kayıt kullanın. zamanlama-kritik döngüler için, yoğun beklenen gecikmelerden ziyade bir zaman kesmeyi düşünün.
Sürekli Öğrenme Kaynakları
En iyi öğrenme kaynağı, uygulama notları, kod örnekleri ve aktif bir şekilde kullanılabilir:2Mikrotim Formu[Döneticileri ve XC8" Armstrong Subero tarafından pratik projeler sunar.Daha ileri konular için, [[Göneticiler için, ADZEFLT:2MikroTest forum.)
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
C'deki PIC mikrokontrolörler bir gömülü sistem yaratımı dünyasını açıyor, basit LED diskerlerden sofistike sensör ağlarına ve motor kontrolörlerine kadar. MPLAB X IDE ve XC8 derleyicisi kurarak, kayıtların temellerini anlamak, I/O, kesme örneklerini, zamanlayıcıları ve periferikları kesmek ve çok sayıda belge ve topluluk kaynaklarını kullanarak, geliştiriciye sadık olarak ilerlemenizi sağlayabilirsiniz.