Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

12f675 PWM sorunu

Başlatan aqustic, 15 Aralık 2009, 01:43:14

aqustic

12f675in eeprom hafızasına 2 çıkışlı led animasyon yüklüyorum.
Elektrik kesilince kaldıgı animasyondan devam ediyor.Birde 2 ledinde yumuşak bi şekılde sönüp  yumuşak olarak yanması ve bu işlemin çok hızlı olması için animasyonlardan birine PWM komutuyla bu işlemi yaptım.Ancak proteusta  butonla tam bu animasyona geldigimde hata  veriyor ve sonraki animasyona geçiş yapamıyorum.Boarda denedigimde ise istedigim yumuşak açılıp kapanmayı görebiliyorum ama ordada butona basınca sonraki animasyona geçemiyorum.Ve butona basınca ledler sönüyor.Elektrigi kesip açtıgımda düzeliyor vs vs.Bunun nedeni nedir?Bi de burda 255 yerine 127 alınca animasyon istedigim gibi çok hızlı oluyor.Fakat yukarıda yazdıgım sorunu aşamıyorum.Kodlar şöyle:
ALG5:
poz=4:gosub YAZ
while tus=0:wend  '
GPIO=0
PAUSE 50
ALG55:                     PWM
IF TUS=0 THEN ALG6
DUTY VAR BYTE
FOR DUTY=255 TO 0 STEP -1
PWM led7,DUTY,1
PWM led6,DUTY,1
PAUSE 1
NEXT
FOR DUTY=0 TO 255
PWM led7,DUTY,1
PWM led6,DUTY,1
Pause 1
NEXT
GOTO ALG55
ALG6:
poz=5:gosub YAZ
...


aqustic

Sorun sadece pc de ise pekı o zaman neden boardda istedigim sonucu alamıyorum. :roll:

aslan_korhan

PBP şu komutu işleyemiyor:
PWM led7,DUTY,1
PWM led6,DUTY,1


Yani 2 adet PWM olayını ayni anda yapmıyor.

Ancak 1 Kanal'ı PWM ile kontrol edersen sorun yok.
Ayrıca örneğin bir Kanalı Dutty=127 bıraktığında ve başka bir Kanal'a PWM uyguladığında yine sorun çıkıyor.
Bir Kanal'a PWM uyguladığında diğer Kanallar ya High yada Low durumuna geçiyor.

- İlk önce bir Kanalı 0'dan 255'e kadar yükseltirsin.
- Sonra bu kanalı "High Kanal1" gibi yaparak LED'in yanıp kalmasını sağlarsın.
- Kanal2 yi 0'dan 255'e kadar yükseltirsin.
- Bu Kanalı da High yaparsın.
- Kanal1'i 255'den 0'a kadar düşürürsün.
- Kanal1'i "Low Kanal1" yaparak LED'i söndürürsün.
vs... vs...

Ancak bu şekilde Basic'te doğru düzgün çalışır.
Birde Proteus'ta PWM ile LED simülasyonu çalışmaz.
Burada çıkışa LED yerine osiloskop bağlarsan daha iyi olur...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

aqustic

Hocam güzel bir açıklamaydı teşekkür ederim.Evet dediginiz gibi tek kanala uygulayınca sorun olmuyor.2 kanala aynı anda uygulayınca problem oluyor.

aqustic

Pekı şunu sorcam
İnternette pic projelerinin oldugu birkaç site var.Oralarda 12f675 ile RGB Led sürücü yapıyorlar.Yine aynı şekılde nette 12f675 ile yapılan RGB led sürücüleri görüyorum.Bu sürücülerde yumuşak geçişler olması için mutlaka 2 hatta 3 kanala birden PWM uygulanabiliyorken neden ben uygulayamıyorum burda.?Sebebi pic basicle yazılmış olması mı?

bymrz

hayır...

Sebebi algoritmayı oluşturamaman...

aslan_korhan

Ayni anda 2 Kanal PWM yapmıyor işte.
Yukarıda açıkladığım şekilde yapacaksın.

- Kırmızı 0'dan 255'e
- Kırmızı yanık kalacak
- Yeşil 0'dan 255'e
- Yeşil yanık kalacak
- Kırmızı 255'den 0'a
- Kırmızı sönecek
- Mavi 0'dan 255'e
- Mavi yanacak
- Yeşil 255'den 0'a
- Yeşil sönecek
vs...

Bu şekilde Standart Gökkuşağı renklerini elde edersin.
Alone_lover'in de dediği gibi iyi bir algoritma bulman gerekir...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

Maxim

yada 3 tane pwm donanımı olan pic kullanmak lazım sanırım ,
16F777

aqustic

Şimdi daha iyi anladım.Bu güzel açıklamalar için teşekkür ediyorum

tmr01

merhaba

Bu gün neredeyse ayni programı denedim ve aynı sorunu yaşadım.

Gerçi benim projede 3 anime var idi.

neyse uzatmadan sorunun çözümü şu.

pwm ile döngü nün herhangi bir yerinde butona basılıp çıkıldığında
senin programda sanırım alg6 ya yolluyorsun

işte burada ilgili pinleri led6 ve led7 pinlerini
tris ile giriş olarak ata sonra pause 1 deyip tekrar tris ile çıkış olarak değiştir.
bundan sonra ledlerin yine istediğin şekilde animasyona devam edecektir.

ben bu şekilde hallettim.