PWM sederhana desain pada PIC16F877A menggunakan compiler c ccs

Y

youngjkoh

Guest
Hai, aku baru di pemrograman dan aku berusaha untuk mendirikan sebuah / d converter.Saya menemukan PWM ini contoh kode dari contoh-contoh ccs, dan aku mengharapkan pinC7 sebagai input analog dan dimodulasi picC6 sebagai output.Namun, ketika aku memeriksa output di osiloskop itu terlihat seperti itu tidak tergantung pada apa masukan saya dimasukkan ke dalam C7!Itu tampak seperti itu terjadi setiap kali Vcc tinggi tinggi ...Aku tidak mengerti ..Can anyone help me menjelaskan ini?Juga, aku bertanya-tanya bagaimana timer bekerja, dan mengapa kita membutuhkannya.Mengapa periode = 127?Terima kasih!

Kode:# if defined (__PCM__)

# include <16F877A.h>

# sekering HS, NOWDT, NOPROTECT, NOLVP

# menggunakan delay (jam = 20.000.000)

# menggunakan RS232 (baud = 9600, xmit = PIN_C6, RCV = PIN_C7, BRGH1OK) / / Pelompat: 8 sampai 11, 7-12void main () (

char pilihan;

nilai byte;printf ( "\ r \ nFrequency: \ r \ n");

printf ( "1) 19,5 kHz \ r \ n");

printf ( "2) 4.9 kHz \ r \ n");

printf ( "3) 1.2 kHz \ r \ n");do (

seleksi = getc ();

) While ((pilihan <'1')||( seleksi> '3 '));setup_ccp1 (CCP_PWM); / / Configure CCP1 sebagai PWM/ / The siklus waktu akan (1/clock) * 4 * t2div * (periode 1)

/ / Dalam program ini jam = 20000000 dan periode = 127 (di bawah)

/ / Selama tiga pilihan yang mungkin siklus waktu adalah:

/ / (1 / 20000000) * 4 * 1 * 128 = 25,6 kami atau 39,062 kHz

/ / (1 / 20000000) * 4 * 4 * 128 = 102,4 kami atau 9,765 kHz

/ / (1 / 20000000) * 4 * 16 * 128 = 409,6 kami atau 2,441 kHzswitch (pilihan) (

case '1 ': setup_timer_2 (T2_DIV_BY_1, 127, 1);

break;

case '2 ': setup_timer_2 (T2_DIV_BY_4, 127, 1);

break;

case '3 ': setup_timer_2 (T2_DIV_BY_16, 127, 1);

break;

)
setup_port_a (ALL_ANALOG);

setup_adc (adc_clock_internal);

set_adc_channel (0);

printf ( "% c \ r \ n", seleksi);while (TRUE) (

Nilai = read_adc ();printf ( "% 2X \ r", value);set_pwm1_duty (nilai); / / ini menetapkan waktu adalah denyut

/ / Tinggi setiap siklus. Kami menggunakan A / D

/ / Input untuk membuat demo mudah.

/ / Waktu yang tinggi akan menjadi:

/ / Jika nilai LONG INA:

/ / Nilai * (1/clock) * t2div

/ / Jika nilai INA:

/ / Nilai * 4 * (1/clock) * t2div

/ / Misalnya nilai 30 dan t2div

/ / Dari 1 kali tinggi adalah 12us

/ / PERINGATAN: Sebuah nilai terlalu tinggi atau rendah akan

/ / Mencegah output dari

/ / Berubah.

))

 

Welcome to EDABoard.com

Sponsor

Back
Top