18F4431 4.kanal pwm çalışmıyor

Başlatan ÜC, 30 Ağustos 2017, 16:42:20

ÜC

   Arkadaşlar selamlar. Bu ayarlar ile 0-5 arası pinlerden pwm çıkışı alabiliyorum.

DTCON = 0
PTCON0 = %00000000
PTCON1 = %10000000
PTPERL = $FF
PTPERH = 0
PWMCON0 = %01011111
PWMCON1 = 1
OVDCOND = %11111111
PDC0L ve PDC0H = Duty değeri

Her ne kadar yabancı dilim olmasada datasheeti çevirerek incelediğimde PWMCON0 registerinin 0,1,2,3.bitler açılmak istenen kanalı ayarlıyor 4,5,6. bitler pwm çıkışı alınmak istenen bitleri ayarlıyor

PWMCON0 register ayarlarının sonunda şöyle bir not yazılmış

Note  1:    Reset condition of the PWMEN bits depends on the PWMPIN Configuration bit.
2:    When PWMEN<2:0> = 101, PWM<5:0> outputs are enabled for PIC18F2331/2431 devices; PWM<7:0>
outputs are enabled for PIC18F4331/4431 devices.
When PWMEN<2:0> = 111, PWM Outputs 1, 3 and 5 are enabled in PIC18F2331/2431 devices; PWM
Outputs 1, 3, 5 and 7 are enabled in PIC18F4331/4431 devices.
3:    Unimplemented in PIC18F2331/2431 devices; maintain these bits clear.


      PWMCON0 registerinin 4,5,6 bitleri 101 olursa tüm bitlerden pwm alırsınız diyor ama yalnızca 0-5 arasından alabiliyorum  6,7. bitlerde pwm ne yaptıysam yok
       Üç gündür bununla uğraşıyorum , tecrubesi olan arkadaşlar yardımcı olursa çok makbule geçecek , şimdiden teşekkür ederim yazan arkadaşlara.

apsis

Çeviriyi yanlış anlamışsın sen. 0,1,2 ve 3. bitler kanal felan ayarlamıyor. Bu bitler kanallar tamamlayıcılı mı (  biri aktifken diğeri pasif gibi düşünebilirsin) yoksa bağımsız mı çalışacağını seçiyorsun( pwm0 high ise pwm1 de high olur). Bağımsız çalışıtırıken farklı duty değerleri veremiyorsun.
Örneğin pwm0 255 ise pwm1 de 255 olmak zorunda.

Hemen bir deneme yaptım ve gayet düzgün çalışıyor.

Kodlarının tümünü paylaşırsan yardımcı olabilirim.
"Makineye Beyin" MEKATRONİK

ÜC

#2
  Cevap için çok teşekkürler Apsis hocam benim pek umudum yoktu cevap geleceğinden açıkcası , umut oldunuz.

  Pwm için kullandığım kodlar bunlar

TRISB=%00000000

DTCON = 0
PTCON0 = %00000000
PTCON1 = %10000000   
PTPERL = $FF    
PTPERH = 0
PWMCON0 = %01011111                           
PWMCON1 = 1         
OVDCOND = %11111111      

i var word

i=1000
                                 
for i=0 to 1023

PDC0L = i.LowByte            
PDC0H = i.HighByte 
PDC1L = i.LowByte            
PDC1H = i.HighByte 
PDC2L = i.LowByte            
PDC2H = i.HighByte 

PDC3L = i.LowByte            
PDC3H = i.HighByte 
pause 5

next


0,1,2. kanallardan yani 0,1,2,3,4,5. bitlerden pwm çıkışı var iken 6  ve 7 de yok. Bu kodlarda bir yanlışlık vardır lllaki ama denemediğim alternatif kalmadı.


apsis

#3
6 ve 7. bitleri rd6 ve rd7 den alman lazım. Port ayarı olarak sadece B portunu ayarlamışsın. D portunu ayarla ve RD6 ve RD7 den pwm işaretini alman lazım.
Söylemeyi unutmuşum. Ben C'de denedim sen basic'de yazmışsın.
Kodlarının tümü buysa sigorta ayarların nerede?
"Makineye Beyin" MEKATRONİK

ÜC

  Piyade bölüğü baştan say  1,2,3.... en son 2 asker topçu bölüğünden seslensin 6,7 .

    Aslında hangi portun hangi bitleri pwm imiş diye baktım başta , PORTB 0,1,2,3 özelliklerinde pwm görünce diğerleride portb den devam ediyordur diye kontrolü bırakmıştım tabii büyük hata. Şimdi denedim PORTD 6 ve 7 de pwm görünce çocuk gibi sevindim vallahi. Altı aydır uğraşıpta tam sonunda kalakaldınmı verdiğin emeğemi zamanamı yanasın bilemiyor insan.
   
    Apsis hocam ne kadar teşekkür etsem azdır çok sağolun , unutmayacağım bu yardımınızı hiçbir zaman.

apsis

#5
Ne demek hocam hepimiz sorunlarımızı çözmek için varız. Faydalı olduysa ne mutlu bana.
İyi çalışmalar..
"Makineye Beyin" MEKATRONİK