P kanal mosfet tarama

Başlatan ChiliPepper, 05 Ocak 2023, 09:39:31

ChiliPepper




İyi günler, 12v ledi resimdeki gibi 4 kanaldan display gibi tarama yapmaya çalışıyorum ama p kanal mosfet çıkışı 6.5v'de kalıyor. Basit on/off şeklinde normal çalışıyor fakat tarama yapınca çalışıyor fakat voltaj düşüyor direnç değerlerini değiştirerek denedim olmadı. P kanal mosfet mantığını anlayamadım. Mosfet sürücü kullanmadan çözüm yolu var mı acaba ?

Mr.Thinking

#1
r3 ve r4 ü 10 ohm yapın. Tarama hızını da düşürün. Mosftelerine lojik tip kullanın. GS leri 5 volt gibi olsun.
ego=1/Knowledge

ChiliPepper

Alıntı yapılan: Mr.Thinking - 05 Ocak 2023, 09:54:37r3 ve r4 ü 10 ohm yapın. Tarama hızını da düşürün. Mosftelerine lojik tip kullanın. GS leri 5 volt gibi olsun.
Dediklerinizi denedim fakat bir değişiklik olmadı.

Mr.Thinking

Alıntı yapılan: ChiliPepper - 05 Ocak 2023, 10:42:44Dediklerinizi denedim fakat bir değişiklik olmadı.
Gerçekte mi deniyorsunuz simülasyonda mı?
ego=1/Knowledge

ChiliPepper

Alıntı yapılan: Mr.Thinking - 05 Ocak 2023, 10:54:54Gerçekte mi deniyorsunuz simülasyonda mı?
Bastığım devrede deniyorum simülasyonda değil.

Mr.Thinking

Alıntı yapılan: ChiliPepper - 05 Ocak 2023, 10:56:02Bastığım devrede deniyorum simülasyonda değil.
Kullandığın mosfetlerin adı ne?
ego=1/Knowledge

ChiliPepper

#6
Alıntı yapılan: Mr.Thinking - 05 Ocak 2023, 10:59:37Kullandığın mosfetlerin adı ne?
Kullandığım mosfetler resimdekilerle aynı pja3405 ve pja3404. Yazılımda sürelerle oynadığımda max 7.3v görebildim daha üstüne çıkamadım.

05 Ocak 2023, 11:06:58
Alıntı yapılan: ChiliPepper - 05 Ocak 2023, 11:03:18Kullandığım mosfetler resimdekilerle aynı pja3405 ve pja3404. Yazılımda sürelerle oynadığımda max 7.3v görebildim daha üstüne çıkamadım.

#include <Wire.h>    //Libraries to communicate with RTC
#include "RTClib.h"



RTC_DS1307 rtc;      //create rtc object


int setH;           
int setM;           
int setD = 1;        
int setMo = 1;      

int segs[] = {0, 1, 2, 3, 4, 5, 6, 7};
int digits[] = {11, 10, 9, 8};        
String num[]  = {"11111100", //0
                 "01100000", //1
                 "11011010", //2
                 "11110010", //3
                 "01100110", //4
                 "10110110", //5
                 "10111110", //6
                 "11100000", //7
                 "11111110", //8
                 "11110110"
                 
                };
long long unsigned int e;
long long unsigned int h=0;
unsigned long int g=0;
unsigned int m=10;
unsigned int x=0;
unsigned int sayac=0;





void setup()
{ 
  rtc.begin();//begin rtc communication
  for (int i = 0; i < 8; i++)
  {
    pinMode(segs[i], OUTPUT);//set segment pins output
  }
  for (int i = 0; i < 4; i++)
  {
    pinMode(digits[i], OUTPUT);//set digts as outputs
  }
  pinMode(16, INPUT_PULLUP);
  pinMode(17, INPUT_PULLUP);
  
   
}


void loop()
{
    DateTime now = rtc.now();//acquire date and time 
    unsigned int n = now.second();
    unsigned int s = now.hour();
    unsigned int d = now.minute();
    unsigned int f = 0;   
    f = s;
    if(f>11)
    {
      f=f-12;
      }
 
  timerIsr(now.hour(), now.minute());//show time
  setTime();//function to set time 

  delayMicroseconds(500);
}


void timerIsr(int hour, int min)    {
                                        
                      //Timer1.stop();                                      
                      int d[] = {floor(hour / 10), hour - 10 * floor(hour / 10), floor(min / 10), min - 10 * floor(min / 10)};                                  
                     
                      switch(sayac)   {
                                          
                                    case 0:  
                                       {
                                          
                                          
                                          digitalWrite(digits[3],LOW);
                                          printNum(d[sayac]);
                                          //delayMicroseconds(10);
                                          digitalWrite(digits[0], HIGH);   
                                          delayMicroseconds(500);                                                                                               
                                                              }
                                                              break;

                                    case 1:  
                                        {
                                          digitalWrite(digits[0],LOW);                                                          
                                          printNum(d[sayac]);
                                          //delayMicroseconds(10);
                                          digitalWrite(digits[1], HIGH);   
                                          delayMicroseconds(500);   
                                        }                                     
                                          break;

                                    case 2:  
                                                {
                                           digitalWrite(digits[1],LOW);
                                           printNum(d[sayac]);
                                           //delayMicroseconds(10);
                                           digitalWrite(digits[2], HIGH);  
                                           delayMicroseconds(500);   
                                                              }
                                           break;

                                    case 3:  
                                      {
                                           digitalWrite(digits[2],LOW);  
                                           printNum(d[sayac]);
                                           //delayMicroseconds(10);
                                           digitalWrite(digits[3], HIGH);
                                           delayMicroseconds(500);   
                                                                         }
                                                              break;
                                                                    
                                          
                                          }
                                          
                                        sayac++;
                                        
                                        if(sayac>3)
                                        {                                     
                                        sayac=0;
                                        }
  
  
  }



void printNum(int number)//function to print number
{
  for (int i = 0; i < 8; i++)
  {
   

    if (num[number].charAt(i) == '1')//set segment high
    {
      digitalWrite(segs[i], HIGH);

    }
    else
    {
      digitalWrite(segs[i], LOW);//set low

    }
  }
}

void setTime()
{
  
  
  if (digitalRead(16) == LOW)
  {  
        
        delay(100);
        setH++;      
        if (setH == 24)
        {
          setH = 0;
        }
        rtc.adjust(DateTime(2021, setMo, setD, setH, setM, 0));
        while(digitalRead(16) == LOW);                  
  }
         
      if (digitalRead(17) == LOW)
      {       
        delay(100);      
        setM++;
        if (setM == 60)
        {
          
          setM = 0;      
      }
      rtc.adjust(DateTime(2021, setMo, setD, setH, setM, 0));
      while(digitalRead(17) == LOW);
    }   
}
Belki kodda da sıkıntı olabilir.

Mr.Thinking

Havada yazı uygulaması mı yapıyorsunuz?
ego=1/Knowledge

ChiliPepper

Alıntı yapılan: Mr.Thinking - 05 Ocak 2023, 11:15:21Havada yazı uygulaması mı yapıyorsunuz?
4x7segment display saat gösterdiğim bir devrem vardı onu display digitleri yerine 12v led koyarak kullanmaya çalışıyorum

Mr.Thinking

Alıntı yapılan: ChiliPepper - 05 Ocak 2023, 11:18:024x7segment display saat gösterdiğim bir devrem vardı onu display digitleri yerine 12v led koyarak kullanmaya çalışıyorum
Mosfetleri lojik tip ve ultra fast kullanmalısın. Mosfetlerin taramada tam iletime geçmiyor. IRLR024 olabilir.
ego=1/Knowledge

ChiliPepper

Alıntı yapılan: Mr.Thinking - 05 Ocak 2023, 11:25:43Mosfetleri lojik tip ve ultra fast kullanmalısın. Mosfetlerin taramada tam iletime geçmiyor. IRLR024 olabilir.
n kanal için mi dediniz p kanal için mi

Mr.Thinking

#11
Alıntı yapılan: ChiliPepper - 05 Ocak 2023, 11:26:49n kanal için mi dediniz p kanal için mi
N kanal tarafı için dedim. P kanal tarafı için de lojik level bir mosfet baktım ama henüz bulamadım. Bilen birisi varsa yazar belki?
Ek: Power supplyi de 14 volta falan çıkarabilirsin. Eğer ayarlı kapalı kasa tip falansa. Bu da biraz daha kazanç sağlar size.
ego=1/Knowledge

Mr.Thinking

ego=1/Knowledge


JOKERAS

6.5V ölçtüğünüz Nokta iki transistör arasımı,yani Led'in Anod Katodumu?
Yoksa Şaseye karşımı 6.5V.

Şemanızda P Mos sürülmüş görünüyor,Kesime gittiği Şüpheli.

Duruma göre Alt N Mos sürülemiyor.
Hız artınca Gate sürücü yada Logic Gate mosfet kullanmak icab eder.

Ayrıca Üst Mosa(Source) ne gerek var.Ledlere 12V 'u direkt verin Alt N Moslarla(Sink)tarayın.
Eğer Akımınız çok yüksek değilse Alt Anahtar için Mosfete de gerek yok.Akımı karşılayabilen
BJT ile sorunsuz sürebilirsiniz.