Saya benar-benar baru di dunia PIC Microcontrollers dan teknik elektro jadi tolong mudah :)
Bagaimanapun, saya berhasil memprogram PIC 16f627 saya untuk menyalakan tiga LED ketika tombol push (tombol pemicu) ditekan dan memulai urutan pematian (pada dasarnya setiap LED matikan satu demi satu dengan jeda 5 detik di antaranya) ketika tombol tekan lain dihidupkan. ditekan (tombol reset). Saya telah menguji ini pada K8048 PIC Programmer / papan Percobaan Velleman. PINs RA0 dan RA2 adalah input untuk masing-masing tombol pemicu dan reset, sementara pin RB0, RB1, dan RB2 adalah pin output untuk LED.
Bekerja dengan papan eksperimen hebat, tetapi saya ingin memindahkan ini ke sirkuit yang sebenarnya. Masalahnya adalah saya tidak tahu harus mulai dari mana. Saya telah membeli 3 LED (masing-masing 3,3 Volt), beberapa tombol, dan kawat dan saya telah membangun rangkaian berikut:
(maaf untuk skematik yang menghebohkan)
Di sirkuit yang saya bangun, saya pertama kali diuji untuk melihat apakah LED akan bekerja dengan 3 baterai AA 1,5 Volt dan mereka bekerja dengan baik sehingga saya pikir resistor tidak diperlukan.
Namun ini tidak berhasil, dan saya benar-benar bingung. Untuk referensi, berikut adalah kode saya untuk PIC. Ini ditulis dalam C menggunakan MikroC. Ini bekerja di papan eksperimen jadi saya tidak berpikir itu masalah
void main() {
TRISB.RB0 = 0;
TRISB.RB1 = 0;
TRISB.RB2 = 0;
PORTB.RB0 = 0;
PORTB.RB1 = 0;
PORTB.RB2 = 0;
CMCON = 0x07;
TRISA = 255;
for(;;){
if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == 1){
delay_ms(5000);
PORTB.RB0 = 0;
delay_ms(5000);
PORTB.RB1 = 0;
delay_ms(5000);
PORTB.RB2 = 0;
}
if(PORTA.RA2 == 1){
PORTB.RB0 = 1;
PORTB.RB1 = 1;
PORTB.RB2 = 1;
}
}
}
Bantuan apa pun akan sangat dihargai. Terima kasih!
sumber
Jawaban:
Pertama, Anda selalu memerlukan resistor seri dengan LED saat didorong dari sumber tegangan (mis. Baterai, pasokan DC, dll.)
Ini karena LED memiliki kurva IV non-linier, yang terlihat seperti impedansi tinggi hingga ambang tegangan dari LED kemudian naik sangat tajam, sehingga artinya dengan sedikit perubahan voltase, arus banyak berubah, sehingga hampir mustahil untuk mengatur arus ke nilai stabil dengan cara ini.
Dengan menggunakan resistor seri nilai yang benar, Anda memastikan arus tidak dapat naik cukup untuk merusak LED.
Untuk menghitung nilai resistor, Anda perlu mengetahui tegangan maju LED (Vf) kemudian kurangi Vf dari tegangan suplai dan bagi dengan arus yang diinginkan, mis. Untuk suplai 5V, 2V Vf, dan 15mA:
(5V - 2V) / 0,020A = 200Ω (Nilai standar 220Ω akan berlaku - jika Anda tidak memiliki ini maka bertujuan untuk apa pun antara 150Ω dan 600Ω untuk rentang 20mA hingga 5mA)
Ini dengan asumsi LED 5mm atau 3mm khas dari 20mA arus operasi maks.
Meskipun tertulis "3 x 1.5V Battery in Series" dalam skema Anda, baterainya terlihat seperti terhubung secara paralel. Untuk mengonfirmasi, baterai harus disambungkan ujung ke ujung seperti diagram bawah pada gambar ini:
Anda perlu menghadirkan kapasitor decoupling antara mikrokontroler Vdd dan ground. Saya tidak akan memerinci (cari di sini, ada banyak jawaban bagus tentang hal ini) tetapi pada dasarnya mereka menyediakan mikrokontroler dengan cadangan energi lokal impedansi rendah untuk permintaan arus frekuensi tinggi, yang tidak dapat direspon dengan cepat oleh catu daya. cukup.
Idealnya Anda harus menempatkan satu (100nF atau 1uF keramik cukup standar) di pin daya dan ground, sedekat mungkin dengan pin.
Pastikan Anda menggunakan osilator internal jika Anda tidak memiliki hadiah kristal. Kode Anda tidak menunjukkan pengaturan bit konfigurasi, jika Anda meninggalkannya, Anda perlu menambahkannya untuk memastikan mikrokontroler diatur dengan benar. Manual CCS harus memberi tahu Anda cara melakukan ini. Juga di bit konfigurasi, pastikan Timer Watchdog diatur ke mati, jika tidak mikro Anda akan terus me-reset (kecuali Anda memanggil perintah WDT jelas secara teratur)
Pastikan bahwa Anda memiliki LED yang benar.
Pastikan Anda memiliki pin MCLR yang diikat tinggi, jika tidak PIC Anda akan ditahan dalam pengaturan ulang (kecuali jika Anda mematikan MCLR dalam bit konfigurasi) Ini biasanya dilakukan dengan resistor ke Vdd, nilainya sekitar 10kΩ. Lembar data akan memiliki contoh ini di bagian reset. (Terima kasih kepada ajs410 untuk menyebutkan ini)
sumber
Saya sangat merekomendasikan buku seri O'Reilly "Merancang Sistem Tertanam" oleh John Catsoulis untuk seseorang di posisi Anda. Ada Bab "Elektronik 101" yang akan membawa Anda ke kecepatan fungsional dengan cukup cepat, dan lainnya pada konstruksi praktis.
sumber
Jangan melebihi 5V, PIC Anda bisa terbakar di atas level tegangan 5V. Anda dapat menggunakan baterai 9V atau adaptor AC / DC dengan regulator tegangan linier seperti LM7805 untuk menghasilkan 5V untuk sirkuit Anda. Cara mengirim:
http://stuff.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-using-78l05-7805.html
Seperti kebanyakan kata: Jangan lupa untuk memasok pin MCLR dengan resistor serial. Anda dapat menggunakan konfigurasi pull-up untuk mereset PIC Anda. Berikut tautan untuk skema: http://www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php
Selalu gunakan resistor serial sebelum led. Ini akan menghemat led dari terbakar dan mengurangi konsumsi daya. Untuk 3.3V leds 220 atau 330 ohm akan baik-baik saja.
sumber
Fungsi tombolnya sederhana. Saat kami menekan tombol, dua kontak digabungkan dan koneksi dibuat. Namun, itu tidak sesederhana itu. Masalahnya terletak pada sifat tegangan sebagai dimensi listrik, dan pada ketidaksempurnaan kontak mekanik. Artinya, sebelum kontak dibuat atau terputus, ada periode waktu singkat ketika getaran (osilasi) dapat terjadi sebagai akibat dari ketidakrataan kontak mekanis, atau sebagai akibat dari perbedaan kecepatan dalam menekan tombol (ini tergantung pada orang yang menekan tombol). Istilah yang diberikan untuk fenomena ini disebut SWITCH (CONTACT) DEBOUNCE. Jika ini diabaikan ketika program ditulis, kesalahan dapat terjadi, atau program dapat menghasilkan lebih dari satu pulsa output untuk satu tombol tekan. Untuk menghindari hal ini, kami dapat memperkenalkan penundaan kecil ketika kami mendeteksi penutupan kontak. Ini akan memastikan bahwa menekan tombol diartikan sebagai satu pulsa. Penundaan debounce diproduksi dalam perangkat lunak dan panjang penundaan tergantung pada tombol, dan tujuan tombol. Masalahnya sebagian dapat diselesaikan dengan menambahkan kapasitor di tombol, tetapi program yang dirancang dengan baik adalah jawaban yang jauh lebih baik. Program dapat disesuaikan sampai deteksi palsu dihilangkan sepenuhnya. Gambar di bawah ini menunjukkan apa yang sebenarnya terjadi ketika tombol ditekan. Program dapat disesuaikan sampai deteksi palsu dihilangkan sepenuhnya. Gambar di bawah ini menunjukkan apa yang sebenarnya terjadi ketika tombol ditekan. Program dapat disesuaikan sampai deteksi palsu dihilangkan sepenuhnya. Gambar di bawah ini menunjukkan apa yang sebenarnya terjadi ketika tombol ditekan.
Baca lebih lanjut: http://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR
sumber
Selain apa yang ditulis orang lain: jangan tetapkan ke pin output PIC individu, seperti misalnya "PORTB.RB0 = 1;". Sebagai gantinya, buat perubahan bit dalam variabel berukuran byte, dan kemudian tulis variabel itu ke port.
Anda juga bisa
sumber