Bagaimana Cara Memasang Mikrokontroler PIC?


8

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:

Sirkuit

(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!


3
Silakan gunakan Fritzing . Ini gratis, apakah 90% dari pekerjaan untuk Anda, dan membantu diagram skematis Anda lebih mudah dibaca ..
Ignacio Vazquez-Abrams


7
Saya pikir memiliki akun selama 10 hari dan ini menjadi pertanyaan pertama Shahmeer adalah alasan untuk "membuang sampah seperti ini pada kita". Tentu saja pendekatan Ignacio dalam meminta dengan baik lebih mungkin untuk mendapatkan respons positif daripada memarahi orang baru itu ... kecuali jika tujuan Anda adalah mencegah orang-orang baru untuk tetap tinggal.
ajs410

5
@ ajs410 - kita semua tahu ini adalah kesal hewan peliharaan Olin, dan sementara saya tidak selalu setuju dengan kata-katanya, saya setuju dengan prinsipnya. Fakta bahwa OP meminta maaf atas "skematik" yang menghebohkan (artinya sendiri) berarti bahwa ia tahu betul bahwa itu tidak apa-apa. Lalu mengapa dia masih memposting hal ini? Bagi saya itu tidak harus dibuat EDA, saya pikir saya lebih suka melihat gambar pad-and-pencil.
stevenvh

2
Dia baru, seperti banyak anggota baru lainnya di sini (termasuk saya). Beri dia istirahat. Shahmeer, cobalah Fritzing. Ini bagus dan mudah digunakan, dan akan membantu Anda menjelaskan pertanyaan Anda dengan lebih baik. Pada catatan lain, saya sangat menentang pilihan kata-kata Ignacio.
capcom

Jawaban:


11
  1. 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.

  2. 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:

    Koneksi paralel dan seri

  3. 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.

  4. 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)

  5. Pastikan bahwa Anda memiliki LED yang benar.

  6. 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)


Terima kasih banyak atas komentarnya, mereka sangat membantu. Namun, selain itu, haruskah saya menghubungkan PIC dengan cara lain atau apakah Anda telah menambahkan semua yang saya butuhkan?
Shahmeer Navid

2
Satu hal lain adalah bahwa Anda mungkin perlu resistor pull-down pada pin tombol Anda, untuk memastikan pin pada logika rendah ketika tombol tidak ditekan (kecuali jika Anda memiliki internal pull-down aktif, tapi saya pikir PIC hanya akan memiliki pullup tersedia) Ini sulit untuk memastikan hal-hal dengan skema seperti itu (mis. simbol non standar, tidak ada nomor pin / nama, dll) Saya akan mendapatkan beberapa perangkat lunak menangkap PCB / skema (mis. Eagle [populer / gratis untuk non komersial], Kicad [populer / gratis], Diptrace [murah], Altium [£ £ £ $$$, dll) dan menggunakannya di masa depan.
Oli Glaser

1
6. Jangan lupa resistor pull-up pada pin MCLR. Atau atur bit konfigurasi yang menggunakan pull-up internal, jika tersedia.
ajs410

2

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.


2
  1. 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

  2. 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

  3. 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.


2

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


1

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

  • ambil kata-kataku untuk itu,
  • baca tentang masalah "baca-modifikasi-tulis", atau
  • menderita akibatnya
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.