Recent Posts

Cara membuat Timer di PSoC

 


PSoC berbeda dari prosesor lain, karena tidak seperti kita menggunakan prosesor lainnya seperti 8501, PIC, AVR Hal inilah yang  menyebabkan para pemula kesulitan dengan PSoC. Jadi hari ini saya membuat panduan Timer di hardware PSoC.

-Langkah 1: mulai program dan pengaturan antarmuka:

 + Langkah 2: Cari dan Masukkan  timer seperti berikut:

 
lingkaran merah di sebelah kiri itu adalah Jenis Modul User dan Pengguna Modul. Di sebelahnya pilih jenis modul seperti Timer, PWM ... pilih salah satu untuk digunakan. Sebagai contoh, di set dengan Timer 8 bit Timer, timer 16 bit, Timer 32. Anda pilih jenis timer (klik tanda +  untuk memilih jenis modul berikutnya)

+ Langkah 3: Tekan Timer seperti berikut:


Klik kanan kemudian pilih Tempat Modul Timer tersebut seperti pada gambar di atas maka akan sampai ke blok seperti terlihat di bawah 


 + Langkah 4: Mengatur sumber clock yang berbeda untuk dimasukkan ke dalam Timer.

 
Dalam bagian ini harus terlebih dahulu mengatur input jam timer. Terletak di tempat yang dilingkari pada gambar. Parameter penting seperti saya set sebagai berikut:
+ Power Pengaturan [Vcc / Syclk freq]: Ini adalah sumber input yang dipilih dan frekuensi di 5V dan frekuensi standar 24MHz
+ CPU _clock: ini adalah frekuensi prosesor mengeksekusi. Ia memiliki frekuensi yang berbeda. dibagi dengan 8 sehingga perintah eksekusi adalah frekuensi 3MHz.
+ VC1: sumber Jam. Nilai dari sumber ini dihitung sebagai berikut: VC1 = Sysclk / N. Sysclk dipilih sebagai koefisien laju 24MHz dan Anda memilih untuk memecahnya (N > dari 16)
+ VC2: Sama seperti VC1. Tapi sumber diambil dari VC1 dan VC2 selanjutnya dibagi koefisien N (Nmax = 16)
+ VC3: Sumber ini diambil tahanan atau VC1 atau VC2 sysclk untuk Saya bagikan lagi dan faktor terbesar dibagi dengan 256. Untuk sumber clock yang lebih kecil VC3.
Itu adalah pengaturan sumber clock yang berbeda dari sumber utama jam.

+ Langkah 5: Mengatur parameter untuk Timer. Ada 2 pengaturan diatur langsung di blok dan mengatur parameter dipilih oleh panel seperti berikut:

 
Seperti ditunjukkan di atas, perlu input Timer jam sehingga dianggap jumlah pulsa dan memberikan waktu yang akurat berdasarkan pulsa masukan. Awalnya ia memiliki beberapa  frekuensi jam berbeda. Awalnya mungkin VC1, VC2, VC3 ... dan parameter terkait lainnya terletak di lingkaran kiri. Dan dinyatakan dalam blok kanan. sumber Timer jam yang digunakan itu hanya menghasilkan real time dan tidak terhubung ke output.

Contoh: Hitung volume das atur untuk menciptakan waktu Timer Timer 0.1s.
Seperti parameter yang saya dipilih di atas saya pilih 8-bit Timer. Menurut datasheet maka rumus waktunya sebagai berikut :

SourceClockPeriod OutputPeriod = x (PeriodRegisterValue + 1)

Dalam rumus di atas Terdapat dua nilai, yang harus kita pedulikan adalah SourceClockPeriod (sumber input jam full Timer) dan PeriodRegisterValue (Nilai register diatur dalam Timer)
Yang dihitung pada sumber masukan VC3 SourceClockPeriod dihitung sebagai berikut: VC1 = 24Mhz/15; VC2 = VC1/16; VC3 = sumber jam VC3 VC2/100 seperti 1kHz. Dalam rumus ini, saya memasukkan timer set dengan 100 untuk keluaran  0.1s.
Dalam program ini sebagai berikut:

Timer8_1_WritePeriod (100) timer / / Set 0.1s
Timer8_1_WriteCompareValue (0);
Timer8_1_EnableInt ();
Timer8_1_Start ();

Timer berhasil dibuat di PSoC tersebut. Ini hanya timer 8-bit jika anda ingin menggunakan waktu yang lama ubah pada 16 atau 32 Timer bit. Sehinnga nilai register akan keluar lebih banyak dan menciptakan lebih banyak waktu.


Selanjutnya adalah Timer interrupt, untuk mengetahui cara kerjanya mari kita mencoba untuk menulis sebuah kalimat menggunakan timer interrupt sederhana!
Permintaan: membuat waktu yang tepat LED berkedip untuk off 1s dan 1s. LED terhubung ke P0.6. LED dihubungkan secara seri dengan resistor untuk membatasi baris (330 ohm) dipasang pada modus suction line!
Dengan konfigurasi timer untuk 1s dan P0.6 dikonfigurasi sebagai jalur utama memiliki program-program berikut:
Kode:
/ / ------------------------------------------------ ----------------------------
/ / Test Timer
/ / Written by: biendt
/ / YC: P0.6 LED driver.
1 to 1s and tat
/ / ------------------------------------------------ ----------------------------

# Include / / part specific constants and macros
# Include "PSoCAPI.h" / / PSoC API definitions for all User Modules
unsigned char flag = 0;

# Pragma interrupt_handler Timer16_1_ISR
Timer16_1_ISR void ()
{
flag + +;
if (flag == 3) flag = 1;
}

Timer_int void ()
{
Timer16_1_WritePeriod (1000) / / Timer = 1s
Timer16_1_WriteCompareValue (0);
Timer16_1_EnableInt () / / Timer ISR triggers
M8C_EnableGInt / / for interrupts globally
Timer16_1_Start ();
}

void main ()
{
Timer_int ();
PRT0DR = 0xff;
while (1)
{
if (flag == 1)
    
0xbf PRT0DR = / / for P0.6
else if (flag == 2) PRT0DR = 0x40;
}
}

Untuk kode di atas saya menggunakan flag ketika interrupt di tampilkan, saya hidupkan sampai mengubah flag. Setiap kali putus. Meningkat menjadi 3 lalu kembali ke 1. Setiap interrupt flag (nilai variable) akan mengubah LED  menjadi pelan dan mati.

    Choose :
  • OR
  • To comment