PWM problém

T

Tom2

Guest
využít i analogové vstupy na pic a i vygeneruje pwm.When i změnit amplitute na vstupu i chtějí změnu pracovní cyklus o pwm.This není happen.Is někdo vědět why.I použití Pic16F777 a PCM ccs kompileru.Můj kód je:

#
include <16F777.h>
# přístroj ADC = 16
# zápalnic XT, NOWDT, NOPROTECT
# použití zpoždění (hodiny = 4000000)
/ / dlouhé duty_cycle, období;void main ()
(
dlouho 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);

)
)

 
Nazdar!
Proč jsou u děláš

adc_result>> = 6;

Vzhledem k tomu, že v případě, že výsledek je řekněme 1023 (3FF maximální možné), pak po této operaci bude stát 15 (0x0F).Nyní v CCSC kdykoli ur tvorby projektu a vybrat konkrétní frekvenci pro PWM pak ukazuje rozsah cyklu, které mohou být použity.Musíš poslat pouze ty ADC výsledky na set_pwm1_duty (), která spadá do tohoto rozsahu.

Co jsem pochopil z ur nastavení je, že jste generování PWM s frekvencí 3.906Khz s koeficientem programovatelné 0-1024.
tak u donot muset dělat žádné právo přesouvá z ADC výsledek.Stačí vám resut a dejte je do set_pwm1_duty (); funkci, a to bude fungovat.
Nicméně je to lepší, že první jednoduše zkontrolovat ur PWM funkce spuštěním tohoto kódu na místo, zatímco smyčku z ADC kód.

set_pwm1_duty (512), / / 50% pracovní cyklus
DELAY_MS (5000); / / zkontrolovat pracovní cyklus s rozsahem
set_pwm1_duty (768), / / 75% pracovní cyklus
DELAY_MS (5000); / / zkontrolovat pracovní cyklus s rozsahem

po této zkoušce je v pořádku, pak použijte ADC založené PWM kód, ale nezapomeňte, nikoliv právo přesunout adc_result.

Hope this helps.
Pozdravy.

 
Něco po imstruction
adc_result = read_adc (); i dal pokyn
output_high (PIN_B0) a vidím, že něco bude špatně, když jsem si přečetl výsledky konvertorem.while (1) (
set_adc_channel (0);
delay_us (1);

adc_result = read_adc ();

output_high (PIN_B0);
....}

 
Nazdar!
Budu se snažit napsat kód pro u.Mezitím u zkusit tento kus kódu

set_adc_channel (0);
while (1) (
delay_ms (10);

adc_result = read_adc ();

output_high (PIN_B0);
....}

Toto zpoždění je velmi kritický.

Donot zoufalství jako jeden dozví pouze prostřednictvím jeho chyb.

Pozdravy.

 

Welcome to EDABoard.com

Sponsor

Back
Top