Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: Melih1802 - 08 Kasım 2015, 21:05:19

Başlık: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: Melih1802 - 08 Kasım 2015, 21:05:19
Arduino kurcalarken aklıma bir şey takıldı, Potansiyometre ile PWM duty oranını değiştirebiliyoruz, fakat ben bu çıkışın "0" kısmını potansiyometre ile kontrol ederek çok daha fazla uzatmak istersem nasıl yapmam gerekecek.

Standart pwm; _-_-_-_   -_-_-_- gibi.
Fakat benim yapmak istediğim "0" oranı pot tan ayarlanabilen __-_____-_____________-______________________________- gibi.
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: z - 08 Kasım 2015, 21:20:10
Pulse duration podulation yapmak istiyorsun.

pwm de duty değerine istediğin 1 süresini yükle.

Pwm frekansını belileyen registere istediğin değeri yükleyerek 0 süresini değiştirebilirsin. Artık duty ile değil timer taşma registeri ile oynayacaksın.
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: OG - 09 Kasım 2015, 06:19:19
Anladığım kadarı ile
1 süresi sabit, 0 değişecek
bas:
PORT H
delay H süresi
PORT L
ADC oku
süre daha uzun gerekiyorsa okunanı bir sabit ile çarp, eldeki deger L suresi
delay L süresi
tekrar basa git
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: mehmet - 09 Kasım 2015, 10:34:21
https://code.google.com/p/arduino-pwm-frequency-library/downloads/list

Sanırım bu işine yarayacak Melih Abi...
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: Melih1802 - 09 Kasım 2015, 17:45:21
Arkadaşlar bir kod satırı olsa daha kolay anlayabilirdim.
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: JOKERAS - 09 Kasım 2015, 21:24:24
Alıntı yapılan: Melih1802 - 08 Kasım 2015, 21:05:19
Arduino kurcalarken aklıma bir şey takıldı, Potansiyometre ile PWM duty oranını değiştirebiliyoruz, fakat ben bu çıkışın "0" kısmını potansiyometre ile kontrol ederek çok daha fazla uzatmak istersem nasıl yapmam gerekecek.

Standart pwm; _-_-_-_   -_-_-_- gibi.
Fakat benim yapmak istediğim "0" oranı pot tan ayarlanabilen __-_____-_____________-______________________________- gibi.
Melih1802 yapmak isteğiniz şey sanırım frekansı değiştirmek.PFM(Pulse Frekans Mode)
O işi modül olarak içinde barındıran işlemciler var,öyle hatılrıyom.
OG usta yazmış işte.



while(1) {
   AdcVal = Adc();
   LATBits.RA0 = 1;
   Delay(10);                 //Rising edge. _--                _--
   LATBits.RA0 = 0;
   Delay((AdcVal + 1)); //Falling edge.      ________      ________
   
}
Adc potunu oynadıkça Fall time değişir,Fall time uzadıkça frekans düşer.








Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: Melih1802 - 09 Kasım 2015, 21:48:52
Bu özelliği içinde barındıran Arduino var mı!.
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: Kabil ATICI - 10 Kasım 2015, 00:16:12
istediğini kullan, uno, mega....


@JOKERAS programı arduino için uyarlanırsa, aşağı yukarı aşağıdaki gibi bir kod olur...

yazılımsal olarak pwm üreten bir kod...
int pwm_pin=2; //pwm çıkış bacağı....
int pot_pin=A0;// potun bağlı olduğu bacak...
void setup() {
  // put your setup code here, to run once:
pinMode (pwm_pin,OUTPUT); ///pwm bacağı çıkışı olarak atanmış...
}

void loop() {
  // put your main code here, to run repeatedly:
int pot_deger;
pot_deger=analogRead(pot_pin);
digitalWrite (pwm_pin,HIGH);
delay (10);
digitalWrite(pwm_pin,LOW);
delay(pot_deger+1);
}


normalde bu işlem uno işlemcisi olan atmega328p ile donanımsal olarak da mümkündür. Ama bunun için doğrudan işlemcinin timer1 registerleri ile işlem yapabilmeniz ve kodlayabilmeniz gerekir.

En geniş olanağa sahip timer 1'dir ama bu timer arduino içinde delay fonksiyonunu oluşturmak için kullanılmaktadır.
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: Melih1802 - 10 Kasım 2015, 00:48:51
Bu kodlarla, HIGH süresi 1 sn LOW süresi pot ayarına bağlı olarak 0...60 sn arasında değişecek mi.
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: mehmet - 10 Kasım 2015, 09:34:25
Abi; transistör ile sinyali terslerseniz. Duty
oranı da 1 - 60 sn. arasında kalsa nasıl
olur?
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: mehmet - 12 Kasım 2015, 17:54:58
Bu olabilir sanırım, ancak delay anlarında
işlemci hiç bir şey yapmaz. Bunu aşmak için
başka şeyler yapmak gerekecektir.


#define LED           13   // Led pini, hazır led
#define ENAZ_SIFIR    10
#define IGNE          100

uint16_t analogOku = 0;     // Analog okunacak degisken

void setup()
{
  pinMode(LED, OUTPUT);     // Led pinini cikis yapıyoruz
  digitalWrite(LED, LOW);   // Pini sifira cekiyoruz
}

void loop()
{
  analogOku = analogRead(A0);        // Sifir nolu analog pini okuyoruz(0..1023)
  digitalWrite(LED, HIGH);          // Ledi yakıyoruz
  delay(IGNE);                      // 100ms bekliyoruz
  digitalWrite(LED, LOW);           // Ledi sonduruyouz
  delay(analogOku + ENAZ_SIFIR);    // Analogdan okunan degeri gecikme olarak kullaniyoruz
                                    // +deger ile pottan okunan deger sifir oldugunda sinyalin
                                    // bozulmasini onlemek için ilave ediyoruz.
}
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: mehmet - 12 Kasım 2015, 22:55:09
Bu da "delay" fonksiyonu olmadan yapılan. Dolayısıyla
istenilen yere başka işlemlerde eklenebilir...

#define LED 13

unsigned long zamanOnce = 0;
unsigned long zamanSonra = 0;

uint8_t durum = 0;
uint8_t igne = 100;

void setup()
{
  pinMode(LED, OUTPUT);     // Led pinini cikis yapıyoruz
  digitalWrite(LED, LOW);   // Pini sifira cekiyoruz
}

void loop()
{
  zamanSonra = millis(); // o anki zaman mili saniye cinsinden alınıyor
 
  if((zamanSonra - zamanOnce) > igne)
  {
    if(durum == 0)
    {
      digitalWrite(LED, LOW);
      durum = 1;
    }
  }
  //if(zamanSonra - zamanOnce > analogRead(A0) + (igne * 2))        //Bu durumda yaklaşık 1saniye
  if(zamanSonra - zamanOnce > (analogRead(A0) + (igne * 2)) * 3)   // istediğimiz sayı ile çarparsak yaklaşık olarak o kadar saniye elde ederiz (burada ~3 saniye)
  {
     if(durum == 1)
     {
      digitalWrite(LED, HIGH);
      durum = 0;
     }
     zamanOnce = zamanSonra; // eski zaman guncelleniyor
  }
 
  /*
   * Burada baska işlemler için devam edilebilir
   */
}
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: Melih1802 - 13 Kasım 2015, 00:03:06
Arduino için mi bu kodlar.

mesaj birleştirme:: 13 Kasım 2015, 00:08:09

Çalıştı tam istediğim gibi.
Başlık: Ynt: Analog girişe göre 1-0 çıkış oranını değiştirmek.
Gönderen: mehmet - 13 Kasım 2015, 07:38:35
@Melih1802 Abi,  yine aklına takılan olursa
bakarız. Kolaylıklar.