Y
youngjkoh
Guest
Hi, es esmu jauns, lai plānošanas un es centos izveidot / d pārveidotājs.Es atklāju šo PWM piemēram kods CCS piemērus, un es biju gaidījis ievadi pinC7 kā analog un picC6 kā modulēts produkciju.Tomēr, kad es pārbauda produkcijas osciloskopā tas izskatījās, piemēram, tas nav atkarīgs no to, ko ievadi es ievieš C7!Tas izskatījās tā iet augstu, ja VCC ir augsts ...Es nesaprotu ..Var kāds man palīdzēt izskaidrot to?Arī es bija jautājums, kā taimeris darbojas, un kāpēc mēs to vajag.Kāpēc periods = 127?Paldies!
Kods:# Ja definēts (__PCM__)
# Ietvert <16F877A.h>
# Drošinātāji HS, NOWDT, NOPROTECT, NOLVP
# Izmantot nekavējoties (pulkstenis = 20000000)
# Izmantot RS232 (bodu = 9600, xmit = PIN_C6, rcv = PIN_C7, BRGH1OK) / / Džemperi: 8 līdz 11, 7-12spēku Main () (
char atlase;
baits vērtību;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 (
Atlases = getc ();
), Bet ((atlase <1')||( izvēle> "3"));setup_ccp1 (CCP_PWM); / / Konfigurēt CCP1 par PWM/ / Cikla laiks būs (1/clock) * 4 * t2div * (periods 1)
/ / Ar šo programmu pulksteni = 20000000 un laiku = 127 (tālāk)
/ / Par trīs iespējamos atlases cikla laiks:
/ / (1 / 20000000) * 4 * 1 * 128 = 25,6 mums vai 39,062 kHz
/ / (1 / 20000000) * 4 * 4 * 128 = 102,4 mums vai 9,765 kHz
/ / (1 / 20000000) * 4 * 16 * 128 = 409,6 mums vai 2,441 kHzslēdzis (izvēle) (
gadījumā "1": setup_timer_2 (T2_DIV_BY_1, 127, 1);
pārtraukuma;
gadījums "2": setup_timer_2 (T2_DIV_BY_4, 127, 1);
pārtraukuma;
gadījums "3": setup_timer_2 (T2_DIV_BY_16, 127, 1);
pārtraukuma;
)
setup_port_a (ALL_ANALOG);
setup_adc (adc_clock_internal);
set_adc_channel (0);
printf ("% c \ r \ n", atlase);kamēr (patiesi) (
vērtība = read_adc ();printf ("% 2X \ r", vērtība);set_pwm1_duty (vērtība); / / Tas nosaka, kad pulss ir
/ / Liels katra cikla. Mēs izmantojam A / D
/ / Ievade, lai viegli demo.
/ / Pēdējais laiks būs:
/ / Ja vērtības ir sen INT:
/ / Vērtība * (1/clock) * t2div
/ / Ja vērtība ir INT:
/ / Vērtība * 4 * (1/clock) * t2div
/ / Piemēram vērtību 30 un t2div
/ / 1 liels laiks 12us
/ / BRĪDINĀJUMS: vērtība ir pārāk augsta vai zema būs
/ / Novērstu izejas no
/ / Mainīgā.
))
Kods:# Ja definēts (__PCM__)
# Ietvert <16F877A.h>
# Drošinātāji HS, NOWDT, NOPROTECT, NOLVP
# Izmantot nekavējoties (pulkstenis = 20000000)
# Izmantot RS232 (bodu = 9600, xmit = PIN_C6, rcv = PIN_C7, BRGH1OK) / / Džemperi: 8 līdz 11, 7-12spēku Main () (
char atlase;
baits vērtību;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 (
Atlases = getc ();
), Bet ((atlase <1')||( izvēle> "3"));setup_ccp1 (CCP_PWM); / / Konfigurēt CCP1 par PWM/ / Cikla laiks būs (1/clock) * 4 * t2div * (periods 1)
/ / Ar šo programmu pulksteni = 20000000 un laiku = 127 (tālāk)
/ / Par trīs iespējamos atlases cikla laiks:
/ / (1 / 20000000) * 4 * 1 * 128 = 25,6 mums vai 39,062 kHz
/ / (1 / 20000000) * 4 * 4 * 128 = 102,4 mums vai 9,765 kHz
/ / (1 / 20000000) * 4 * 16 * 128 = 409,6 mums vai 2,441 kHzslēdzis (izvēle) (
gadījumā "1": setup_timer_2 (T2_DIV_BY_1, 127, 1);
pārtraukuma;
gadījums "2": setup_timer_2 (T2_DIV_BY_4, 127, 1);
pārtraukuma;
gadījums "3": setup_timer_2 (T2_DIV_BY_16, 127, 1);
pārtraukuma;
)
setup_port_a (ALL_ANALOG);
setup_adc (adc_clock_internal);
set_adc_channel (0);
printf ("% c \ r \ n", atlase);kamēr (patiesi) (
vērtība = read_adc ();printf ("% 2X \ r", vērtība);set_pwm1_duty (vērtība); / / Tas nosaka, kad pulss ir
/ / Liels katra cikla. Mēs izmantojam A / D
/ / Ievade, lai viegli demo.
/ / Pēdējais laiks būs:
/ / Ja vērtības ir sen INT:
/ / Vērtība * (1/clock) * t2div
/ / Ja vērtība ir INT:
/ / Vērtība * 4 * (1/clock) * t2div
/ / Piemēram vērtību 30 un t2div
/ / 1 liels laiks 12us
/ / BRĪDINĀJUMS: vērtība ir pārāk augsta vai zema būs
/ / Novērstu izejas no
/ / Mainīgā.
))