avatar_elektro77

PCA9685 Kullanımı

Başlatan elektro77, 05 Eylül 2022, 17:13:12

elektro77

#15
Aşağıdaki kodlarda, frekansı kHz lere çıkarmak için prescale değerini hangi adrese nasıl yazacağımı çözemedim? Yardımcı olur musunuz?
Kodların tamamı ve çalışan simülasyon bir önceki gönderimin ekindedir.
BASLA:
'FREKANS ARTIRMA
IF FRQ_ARTIR=1 THEN 
FRQ_DEGER=FRQ_DEGER-1 'NOT: FREKANS AÇILIŞ DEĞERİ 255, DEĞER AZALDIKÇA PWM FREKANSI ARTIYOR
IF FRQ_DEGER=1 THEN FRQ_DEGER=1
pause 20
i2cread sda,scl,pcaAddress,$00,[K] '$00 NOLU REGISTERI OKU VE K DEGİSKENINE AT
K.4=1 'K NIN 4.BITI VE 7.BİTİNİ 1 YAP
K.7=1
pause 20
I2CWRITE SDA,SCL,pcaAddress,$00,[K]'YENI K DEGERINI PCA YA AT VE CIHAZI CLOCK AYAR MODUNA GETİR
pause 20
I2CWRITE SDA,SCL,pcaAddress,$FE,[FRQ_DEGER]'50 HZ CLOCK DEGERI ICIN $FE REGISTERINE $7A YAZ
K.4=0'SIMDI K NIN 4. BITINI 0 YAP CIHAZI RESETLEMEK ICIN
I2CWRITE SDA,SCL,pcaAddress,$00,[K]'CIHAZI RESETLE
ENDIF
'-------------------------------------------------------------------------------------
'FREKANS AZALTMA
IF FRQ_AZALT=1 THEN 
FRQ_DEGER=FRQ_DEGER+1
IF FRQ_DEGER=0 THEN FRQ_DEGER=255
pause 20
i2cread sda,scl,pcaAddress,$00,[K] '$00 NOLU REGISTERI OKU VE K DEGİSKENINE AT
K.4=1 'K NIN 4.BITI VE 7.BİTİNİ 1 YAP
K.7=1
pause 20
I2CWRITE SDA,SCL,pcaAddress,$00,[K]'YENI K DEGERINI PCA YA AT VE CIHAZI CLOCK AYAR MODUNA GETİR
pause 20
I2CWRITE SDA,SCL,pcaAddress,$FE,[FRQ_DEGER]'50 HZ CLOCK DEGERI ICIN $FE REGISTERINE $7A YAZ
K.4=0'SIMDI K NIN 4. BITINI 0 YAP CIHAZI RESETLEMEK ICIN
I2CWRITE SDA,SCL,pcaAddress,$00,[K]'CIHAZI RESETLE
ENDIF
'---------------------------------------------------------------------------------------

if PWM0_ARTIR=1 then sure0=sure0+10
if sure0>4000 then sure0=4000
if PWM0_AZALT=1 then sure0=sure0-10
if sure0<100 then sure0=100
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

mehmet

$FE adresine yazılan değer. $01(110) verilirse
~3KHz olabilmekte.

Ancak harici sinyal girerseniz(en fazla 50MHz) ~6KHz
pwm sinyali alınabilir.

PCA9685 kataloğu, bölüm 7.3.5...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

enes

mehmet ustam orda oyle yazmıyor ki..

The maximum PWM frequency is 1526 Hz if the PRE_SCALE register is set "0x03h".
The minimum PWM frequency is 24 Hz if the PRE_SCALE register is set "0xFFh"

ınternal osilator ıle (25 MHZ) calısırken FEh registerine $03 degeri verınce max 1546 hz cıkıyor.
harıcı  osılator ıle (ki oda max 50 Mhz kabul ediyor) yaklasık ıkı katına cıkacaktır. oda ancak
olacagı 3Khz cıvarıdır.

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

elektro77

#19
Bana lazım olan 1-150Hz arası idi. Onu da 24Hz-150Hz arası ayarlayabildim. 24Hz in altına düşmüyor.
Başka bir yöntem arayacağım. Ama bu sırada PCA yı az çok öğrenmiş ve butonlarla frekans ve duty oranları ayarlanabilen bir örnek çıkarmış olduk.
Yardımcı olan @mehmet e ve @enes e teşekkür ederim. Tabii @ete Hocam a da...
Eğer sadece pic kullanarak 8 kanal, frekansı ve Duty oranları ayarlanabilen bir örnek yapabilirsem PCA yı es geçeceğim. Fakat burada PCA örneği de geliştirilmeye açıktır. Aşağıdaki ekteki versiyonda ise duty oranını yüzdelik olarak ekranda göstermeye çalıştım ama çok basit bir yöntemle. Sadece ekrandaki rakamı bir değere bölerek. Çok doğru değil ama iş görür. Frekansı, ekranda byte değeri olarak değil de frekansı hesaplanmış olarak ekranda görmek için siz ekleme yapabilirsiniz?
Kolay gelsin.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

mehmet

#20
Alıntı yapılan: enes - 06 Eylül 2022, 22:08:34mehmet ustam orda oyle yazmıyor ki..

The maximum PWM frequency is 1526 Hz if the PRE_SCALE register is set "0x03h".
The minimum PWM frequency is 24 Hz if the PRE_SCALE register is set "0xFFh"

ınternal osilator ıle (25 MHZ) calısırken FEh registerine $03 degeri verınce max 1546 hz cıkıyor.
harıcı  osılator ıle (ki oda max 50 Mhz kabul ediyor) yaklasık ıkı katına cıkacaktır. oda ancak
olacagı 3Khz cıvarıdır.

~1630Hz den fazla göremedim. Haklıymışsınız.
Harici sinyali denemedim.

Ek:
Raspbery Pi Pico için BASIC yorumlayıcısı
bulunmakta.
https://geoffg.net/picomite.html

16 kanal pwm yapılabilmekte. Ancak en düşük
8Hz(kataloğunda 15Hz yazıyor) ayarlanabiliyor.

En yüksek(kataloğuna göre ve pico osilatörü
yeniden ayarlanınca) 63MHz(ben en fazla 20Mhz
gördüm scoptan dolayı.) olabiliyormuş.

Özelliklerine bakarsanız fena değil.

https://www.youtube.com/watch?v=Cxmjy1nz6MM
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

elektro77

#21
Evet çok iyiymiş. Bu mikro python dili bana kolay gibi geldi sanki. Süslü parantez falan yok galiba ilk defa gördüm. Çok anlaşılır geldi. Aşağıda 16 kanal pwm örneği gösterilmiş. Anlatılan kodlardan anladığım kadarıyla frekans ve duty her pin için bağımsız ayarlanabilecek gibi. Çok ilginç. Birde proteusta simülatörü olsaymış iyiymiş. Şu mikro python u nereden ayrıntılı öğrenebilirim? Çok ilgimi çekti
16 Kanal pwm örneği:
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

mehmet

Basic dilini de kullanabilirsiniz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

Dtmf

Iyi gunler degerli arkadaslar bu konuya bende katilmak istiyorum.ben pca9685 ornegin 1.kanali kullanirken gerekli ayarlari yapip servo motora sg90 komutu A degiskenini word tanimlayip 500 ile 2500 gibi deger yukleyip sonra bu degeri 1.kanal led0_ON_H =A.highbyte ve led0_ON_L=A.lowbyte olarak yazdigimda kolaylikla kontrol edebiliyorum.yanlis mi yapiyorum.birde bu led0.OFF_L ve led0.OFF_H bolumunu anlamadim bu konuda yardimci olabilirmisiniz

mehmet

Farklı fazlarda pwm yapabilmek için.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

Dtmf

Iyi gunler mehmet bey rica etsem  farkli fazlarda pwm bir ornekle aciklayabilirmisiniz bunu anlayamadim

Dtmf

Pca9685 in 0.kanali icin 5v luk bir tepe degerinden bahsedersek Led0.on_H =5v led0.on_L=0 volt
Led0.off_H=0 volt led0._off_L -5v 
Data shetten baktim Yanlismi anliyorum.

enes

Alıntı yapılan: Dtmf - 20 Eylül 2022, 15:38:56Pca9685 in 0.kanali icin 5v luk bir tepe degerinden bahsedersek Led0.on_H =5v led0.on_L=0 volt
Led0.off_H=0 volt led0._off_L -5v
Data shetten baktim Yanlismi anliyorum.

evet yanlıs anlıyorsun.






mehmet

Bu kontrolcünün bir çevriminde 4096 adım var.
LEDn_ON 'a 0 verilip, LEDn_OFF 'a 4096 dan
küçük bir değer verilince bildiğimiz
standart pwm olarak çalışır.

LEDn_ON belli bir değer alırsa -ki yine 4096 'dan
küçük değer- bu değere kadar ilgili çıkış "LOW"
seviyesinde bekler. Değere ulaşınca "HIGH" seviyesine
çıkar. Taki LEDn_OFF değerine kadar.

İlgili kontrolcü kataloğunun 7.3.3 (Sayfa 15)
bölümünde örneklerle açıklanmış.

Bir H-köprüsü sürdüğünüzü düşünün; bir transistör
açılmadan öncekinin kapatılması gerekli.
"Dead time" için aralıkları bu şekilde verebilirsiniz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

elektro77

#29

Ete Hocam yukarıdaki formüle göre PCA9685 çipi 24...1526Hz frekans aralığında pwm üretiyor. Bunu yukarılarda eklediğim dosyada da bulunan aşağıdaki kodlarla yapabiliyorum. Fakat ben bu çipi 25-150Hz arası kullanmak istiyorum ve öyle bir formül bulmalıyım ki, [FRQ_DEGER] bu parantez içinde oluşan değer bana 5Hz ve 5Hz in katları şeklinde frekansı artırıp azaltsın.
Bir sürü formül denedim ama başarılı olamadım. Çünkü çip frekansını lineer olarak değiştirmiyor. Logaritmik gibi bir değişim var. Bu formülü oluşturmam konusunda yardımcı olur musunuz lütfen?
BASLA:
'FREKANS ARTIRMA
IF FRQ_ARTIR=1 THEN
while FRQ_ARTIR=1:wend 
FRQ_DEGER=FRQ_DEGER-10 'NOT: FREKANS AÇILIŞ DEĞERİ 255, DEĞER AZALDIKÇA PWM FREKANSI ARTIYOR
IF FRQ_DEGER=1 THEN FRQ_DEGER=1
pause 20
i2cread sda,scl,pcaAddress,$00,[K] '$00 NOLU REGISTERI OKU VE K DEGİSKENINE AT
K.4=1 'K NIN 4.BITI VE 7.BİTİNİ 1 YAP
K.7=1
pause 20
I2CWRITE SDA,SCL,pcaAddress,$00,[K]'YENI K DEGERINI PCA YA AT VE CIHAZI CLOCK AYAR MODUNA GETİR
pause 20
I2CWRITE SDA,SCL,pcaAddress,$FE,[FRQ_DEGER]'50 HZ CLOCK DEGERI ICIN $FE REGISTERINE $7A YAZ
K.4=0'SIMDI K NIN 4. BITINI 0 YAP CIHAZI RESETLEMEK ICIN
I2CWRITE SDA,SCL,pcaAddress,$00,[K]'CIHAZI RESETLE
ENDIF
'-------------------------------------------------------------------------------------
'FREKANS AZALTMA
IF FRQ_AZALT=1 THEN
while FRQ_AZALT=1:wend 
FRQ_DEGER=FRQ_DEGER+10
IF FRQ_DEGER=0 THEN FRQ_DEGER=255
pause 20
i2cread sda,scl,pcaAddress,$00,[K] '$00 NOLU REGISTERI OKU VE K DEGİSKENINE AT
K.4=1 'K NIN 4.BITI VE 7.BİTİNİ 1 YAP
K.7=1
pause 20
I2CWRITE SDA,SCL,pcaAddress,$00,[K]'YENI K DEGERINI PCA YA AT VE CIHAZI CLOCK AYAR MODUNA GETİR
pause 20
I2CWRITE SDA,SCL,pcaAddress,$FE,[FRQ_DEGER]'50 HZ CLOCK DEGERI ICIN $FE REGISTERINE $7A YAZ
K.4=0'SIMDI K NIN 4. BITINI 0 YAP CIHAZI RESETLEMEK ICIN
I2CWRITE SDA,SCL,pcaAddress,$00,[K]'CIHAZI RESETLE
ENDIF
tüm dosyaları yeniden eke bırakıyorum:

 
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal