Problém s PWM kód pre PIC16F777 pomocou PCM CCS kompilátor

T

Tom2

Guest
používam analógový vstup PIC a mám vytvoriť pwm.When zmeniť amplitute vstupu Chcem zmeniť pracovný cyklus pwm.This nie happen.Is niekto why.I použitie Pic16F777 a PCM CCS kompilátor. Môj kód je: # include # zariadenia ADC = 16 # poistky XT, NOWDT, NOPROTECT # použitie oneskorenie (hodiny = 4000000) / / long duty_cycle, obdobie, void main () {long adc_result, setup_adc_ports (ALL_ANALOG) setup_adc (ADC_CLOCK_DIV_16) , setup_ccp1 (CCP_PWM) setup_timer_2 (T2_DIV_BY_1, 255, 1); while (1) {set_adc_channel (0); Delay_ms (1), adc_result read_adc = (); adc_result>> = 6; set_pwm1_duty (adc_result);}}
 
Dobrý deň! Prečo sa u robí adc_result>> = 6, pretože ak je výsledok hovoria 1023 (3FF, maximálna), potom po tejto operácii sa stane 15 (0x0F). Teraz v CCSC keď ur robiť projekt a vybrať konkrétnu frekvenciu PWM potom to ukazuje rozsah pracovného cyklu, ktoré možno použiť. Musíte poslať iba ADC výsledky set_pwm1_duty (), ktorá spadá do tohto rozsahu. To, čo som pochopil z ur nastavenie je, že ste generovanie PWM s frekvenciou 3.906Khz s pracovným cyklom programovateľné 0 až 1024. tak u donot robiť žiadne právo posunu výsledku ADC. Jednoducho si resut a vložte ho do set_pwm1_duty (), funkcia a bude fungovať. Je však lepšie, že jedľa stačí zaškrtnúť ur PWM spustením tohto kódu v cykle while miesto kódu ADC. set_pwm1_duty (512) / / 50% Delay_ms pracovný cyklus (5000), / / Pozrite sa na pracovný cyklus s rozsahom set_pwm1_duty (768) / / 75% Delay_ms pracovný cyklus (5000), / / Pozrite sa na pracovný cyklus s rozsahom Akonáhle je tento test je v poriadku, potom použite ADC na PWM kód, ale pamätám sa na pravý Shift adc_result. dúfam, že to pomôže. Ide.
 
Niečo viac po imstruction adc_result read_adc = (), som dal pokyn output_high (PIN_B0), a vidím, že sa niečo deje zle, keď som si prečítal výsledky prevodníka. while (1) {set_adc_channel (0); delay_us (1), adc_result read_adc = (); output_high (PIN_B0); ....}
 
Dobrý deň! Pokúsim sa písať kód pre U. Zatiaľ u skúste tento kus kódu set_adc_channel (0); while (1) {Delay_ms (10), adc_result read_adc = (); output_high (PIN_B0) ....} oneskorenie je veľmi kritický. Donot zúfalstvo Keď sa človek naučí len cez jeho chyby. Ide.
 

Welcome to EDABoard.com

Sponsor

Back
Top