Programlanabilir 555 Tasarımı

Başlatan Mr.Thinking, 02 Eylül 2022, 14:14:01

Mr.Thinking

Kolay gelsin;
Bir 555 entegresine bir MCU bağlayıp gerekli pinleri sadece sadece hıgh-low yaparak
1-1-150Hz arası frekansı ayarlanabilir 5V genişlikte pwm üretmek,
2-Ürettiğim bu pwm in %10 ile %90 arası genliğini ayarlamak,
3-Pwm in Çıkış süresini de belli periyotlarda yapmak istiyorum.
555 ile bu şekilde çalışan oldu mu?
Bu yapılabilir mi? Yolu nedir?
ego=1/Knowledge

power20

Mcu kullanılıyorsa ayrıca 555 kullanmanın avantajı/gereği nedir ?

Mr.Thinking

Alıntı yapılan: Kılıç - 02 Eylül 2022, 14:15:49Mcu kullanılıyorsa ayrıca 555 kullanmanın avantajı/gereği nedir ?
Yazılım ile gerekli pwm üretememek.
ego=1/Knowledge

power20

555 kullanabilmek için zaten yazılım yapılacak. Aynı çabayı pwm için harcayabilirsiniz.  En basit mcu bile yapar.
Pwm ile konuşma sesi dahi üretebilirsiniz. (Tablodan okuyoruz)

Mr.Thinking

Alıntı yapılan: Kılıç - 02 Eylül 2022, 14:34:10555 kullanabilmek için zaten yazılım yapılacak. Aynı çabayı pwm için harcayabilirsiniz.  En basit mcu bile yapar.
Pwm ile konuşma sesi dahi üretebilirsiniz. (Tablodan okuyoruz)
Biraz anlatır mısın nasıl yapıldığını? Tablodan okuma ile. Örneğin Arduino dilinde.
ego=1/Knowledge

power20

#5
https://docs.arduino.cc/learn/microcontrollers/analog-output

Burada analogwrite içine yazılan değer pwm oranı. Onu tablodan okuyoruz. (Arduino tablodan okuma olarak arayabilirsiniz)

Tabloda 120,134,233,.... Gibi baytlar bulunuyor (konuşma sesi için)

size komple özel bir kayıt gerekli olmadığı için az elemanlı basit bir tablo yetecektir. Belki tabloya ihtiyaç kalmaz. Öncelikle sabit %50 pwm veren kodu yazalım. Skopla bakalım . Sonra kesintili olacak şekilde kodu değiştirelim.  1sn on 1sn off?  Özel pattern gerekmiyor ise tablo ihtiyaç değil.



Mr.Thinking

Alıntı yapılan: Kılıç - 02 Eylül 2022, 14:57:11https://docs.arduino.cc/learn/microcontrollers/analog-output

Burada analogwrite içine yazılan değer pwm oranı. Onu tablodan okuyoruz. (Arduino tablodan okuma olarak arayabilirsiniz)

Tabloda 120,134,233,.... Gibi baytlar bulunuyor (konuşma sesi için)

size komple özel bir kayıt gerekli olmadığı için az elemanlı basit bir tablo yetecektir. Belki tabloya ihtiyaç kalmaz. Öncelikle sabit %50 pwm veren kodu yazalım. Skopla bakalım . Sonra kesintili olacak şekilde kodu değiştirelim.  1sn on 1sn off?  Özel pattern gerekmiyor ise tablo ihtiyaç değil.



Bu yazıda, Frekans ayarı ve çıkışın periyotlar halinde zamanlanmasından bahsedilmiyor. Sadece duty oranı anlatılmış. İstediğime yakın daha geniş bir kaynak öneriniz var mı?
ego=1/Knowledge

quarko

Alıntı yapılan: Mr.Thinking - 02 Eylül 2022, 14:24:56Yazılım ile gerekli pwm üretememek.

Gerekli pwm sinyali üretebilecek bir mcu/dsp kullanabilirsiniz.
"Vicdanın ziyası ulum-u diniyedir. Aklın nuru fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder."

power20

#8
Alıntı yapılan: Mr.Thinking - 02 Eylül 2022, 15:05:24Bu yazıda, Frekans ayarı ve çıkışın periyotlar halinde zamanlanmasından bahsedilmiyor. Sadece duty oranı anlatılmış. İstediğime yakın daha geniş bir kaynak öneriniz var mı?

"çıkışın 60ms  periyotlar halinde zamanlanması"  30ms OFF, 30ms ON kodu:

while(1) {

digitalWrite(led,LOW);  //    = analogWrite(led, 0);       PWMi sıfırladık çıkış off
 
delay(30); // 30ms boyunca OFF

analogWrite(led, 128);   // pwm %50 

delay(30); // 30ms  bu esnada pwm %50 olarak hala çalışır. Donanımsal olduğu için
} // periyod: 30+30 =60ms

pwm frekans ayarı:
https://www.electronicwings.com/users/sanketmallawat91/projects/215/frequency-changing-of-pwm-pins-of-arduino-uno

https://www.electronicwings.com/arduino/pwm-in-arduino

int led = 6;           // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by
void setup() {
  pinMode(led, OUTPUT); // declare pwm pin to be an output:
}
void loop() {
  analogWrite(led, brightness); // set the brightness of led
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;
  // reverse the direction of the fading at the ends of the fade:
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }  
  delay(30);  // wait for 30 milliseconds to see the dimming effect
}


 Arduino PWM çıkışı gerçekten donanımsal mıdır?
Galiba öyleymiş:

https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/

Mr.Thinking

#9
Sayın @Kılıç örneklerin hepsi 490-980 Hz sabit frekensla verilmiş. Yine de ilgin için teşekkür ederim. Galiba arduino donanımsal pwm çıkışları modeline göre 490 ve 980Hz olarak sabit frekans ve değiştirilemiyor.
Ben 10-150Hz arası 1 er li artırıp azaltmak ve ayrıca, örneğin; 10 lu ila 150  li periyotluk dilimlerle, her dilim arasında 0 ila 10 sn bekleterek bu sinyali çıkıştan çıkarmak istiyorum. Bilmem anlatabildim mi?
ego=1/Knowledge

power20

#10

Program B – Changed frequency on Pin

Yazan yere bakabilirsiniz

pinMode(3,155);
    TCCR2B = TCCR2B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz


Kısaca, TCCR2B registera bir şeyler atayarak frekansı değiştiriyoruz

Mr.Thinking

Alıntı yapılan: Kılıç - 02 Eylül 2022, 17:53:32Anlatabildin ama benim dediğimi anlamamışsın

Program B – Changed frequency on Pin

Yazan yere bakabilirsiniz

pinMode(3,155);
    TCCR2B = TCCR2B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz

Bu kodu 10Hz ve 150Hz arasında kaç farklı şekilde nasıl tanımlayabilirim? Yani anlatmak istediğim frekansı değiştirmek istediğimde TCCR2B register ine kaç farklı tanımlama yapabilirim?
ego=1/Knowledge

power20

#12
50 bin şekilde yapabilirsiniz. Hayal gücünüze bağlı. Sabit frekans atamak yerine taramalı yapılabilir

Pwmi çok özel şekilde vererek çıkışta sinüs veya logaritmik dalga oluşturulabilir. Tırtıklı kuyruklu  vs :) 

Tabloda bu şekillerin pwm datası olur. Hangi şekil gerekliyse okunur örneğin 1000 kere  tekrar edilir.

Yetinmeyip bu şekiller de  ayrıca grup yapılır. Önce titretip sonra hoplatan mod.  Az şiddetli uyutan mod..

 

Mr.Thinking

#13
Alıntı yapılan: Kılıç - 02 Eylül 2022, 18:06:4550 bin şekilde yapabilirsiniz. Hayal gücünüze bağlı. Sabit frekans atamak yerine taramalı yapılabilir

Pwmi çok özel şekilde vererek çıkışta sinüs veya logaritmik dalga oluşturulabilir. Tırtıklı kuyruklu  vs :) 

Tabloda bu şekillerin pwm datası olur. Hangi şekil gerekliyse okunur örneğin 1000 kere  tekrar edilir.

Yetinmeyip bu şekiller de  ayrıca grup yapılır. Önce titretip sonra hoplatan mod.  Az şiddetli uyutan mod..

 
Allah da seni güldürsün.
Şu tablolar hakkında nereden birşeyler öğrenebilirim. En azından onu söyle bari de hayra gir. SPWM den mi bahsediyorsun?
ego=1/Knowledge

power20

#14
Spwm ile zor olur. Donanımsal pwm önerilir  Frekans veya Duty ihtiyaca göre tarama yapılır.

https://dosya.co/7zpnlhm0gvj3/demo.avi.html


https://koddefteri.net/arduino/temel-arduino-dersleri/arduino-diziler.html

const unsigned char  ozelseri[]  =  { 128, 128, 128, 144, 128, 128, 128, 128, 128, 128, 
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 
128, 128, 128, 128, 128, 128, 128, 128, 128, 128

yenipwm=  ozelseri[3] ;  //PWM 144 ayarlanıyor. maks255 min 0

analogWrite(led, yenipwm);