SCT 013 100A:50mA

Burada olmayan şey nedir?

https://www.microchip.com/forums/m1046933.aspx
C:
do
{
       n=0;
       i = 0;
       for ( j = 0; j <= 255u; j++ )
      {
           temp = Adc_Read(n);
           if (i< temp) i = temp;
       }
       i= 2.1*( i -512) ;
       print_i();//Display çıktısı
  } while(1); // endless loop
Şu sekılde benim programıma uyarlamaya calıstım ancak herhangi bir şey okuyamıyorum . 0.00 olarak kalıyor. do { n=0; i = 0; for ( j = 0; j <= 50u; j++ ) { anc1=read_adc(); if (i< anc1) i = anc1; } i= 2.1*( i -512) ; } while(1); // endless loop cphase1 = i *(5.0 / 1023.0); current11=( ( 2.51 - cphase1)/ 33 ); current1= current11 * 2000;
 
Ufak tefek hatalar olabilir, düzeltmesini yaparsınız.
MPLABX ile yazıldı, başka derleyici için dönüştürmek
zor olmaz.

C:
/*
 *  Ekrana yazdırma
 */
void print_i(uint16_t tam, uint16_t ondalik)
{
    uint8_t text[16];
    //            0123456789012345
    strcpy(text, "Akim:           ");
    
    SetCursorToLCD(0, 0);
    WriteStringToLCD(text);
    
    text[0] = (tam / 1000) + 48;
    text[1] = ((tam / 100) % 10) + 48;
    text[2] = ((tam / 10) % 10) + 48;
    text[3] = ((tam / 1) % 10) + 48;
    text[4] = '.';
    text[5] = ((ondalik / 10) % 10) + 48;
    text[6] = ((ondalik / 1) % 10) + 48;
    text[7] = 'A';
    text[8] = '.';
    
    SetCursorToLCD(1, 0);
    WriteStringToLCD(text);

    __delay_ms(1000);
}

/*
 *  
 */
void main(void)
{   
    uint16_t j, temp, t, o;
    float i;

    initSystem();
    ClearLCDScreen();

    while(1)
    {
        i = 0;
        for(j = 0; j <= 255u; j++)
        {
            temp = adcOku(0);
            if(i < temp) 
            {
                i = temp;
            }
        }
        i = 2.1 * (i - 512);
        i /= 10;
        
        t = (uint16_t) (i);
        o = (uint16_t)((i - t) * 100);
        print_i(t, o);

        __delay_ms(200);
    }
}

Ekran-g-r-nt-s-2022-06-09-16-54-49.png
 
Ufak tefek hatalar olabilir, düzeltmesini yaparsınız.
MPLABX ile yazıldı, başka derleyici için dönüştürmek
zor olmaz.

C:
/*[/FONT]
 [FONT=courier new]*  Ekrana yazdırma[/FONT]
 [FONT=courier new]*/
void print_i(uint16_t tam, uint16_t ondalik)
{
    uint8_t text[16];
    //            0123456789012345
    strcpy(text, "Akim:           ");
    
    SetCursorToLCD(0, 0);
    WriteStringToLCD(text);
    
    text[0] = (tam / 1000) + 48;
    text[1] = ((tam / 100) % 10) + 48;
    text[2] = ((tam / 10) % 10) + 48;
    text[3] = ((tam / 1) % 10) + 48;
    text[4] = '.';
    text[5] = ((ondalik / 10) % 10) + 48;
    text[6] = ((ondalik / 1) % 10) + 48;
    text[7] = 'A';
    text[8] = '.';
    
    SetCursorToLCD(1, 0);
    WriteStringToLCD(text);

    __delay_ms(1000);
}

/*[/FONT]
 [FONT=courier new]*  [/FONT]
 [FONT=courier new]*/
void main(void)
{   
    uint16_t j, temp, t, o;
    float i;

    initSystem();
    ClearLCDScreen();

    while(1)
    {
        i = 0;
        for(j = 0; j <= 255u; j++)
        {
            temp = adcOku(0);
            if(i < temp) 
            {
                i = temp;
            }
        }
        i = 2.1 * (i - 512);
        i /= 10;
        
        t = (uint16_t) (i);
        o = (uint16_t)((i - t) * 100);
        print_i(t, o);

        __delay_ms(200);
    }
}

Ekli dosyayı görüntüle 88243
Verdiğiniz bilgiler ve yönlendirmeler için teşekkür ederim Mehmet bey şuanda sisteme uyarlayıp çalıştırdım. Sorun bulunmuyor.

Sadece öğrenmek için sormak istiyorum ;

i = 2.1 * (i - 512);
i /= 10;

Bu kısmında neye göre işlem yapıyoruz neden 2.1 ile çarptık ?
 
Akım sensöründen 100A. geçtiğinde; 33Ω
değerindeki direncin üzerine düşen gerilim
~2,35Vpeak olmaktadır. (~1,65Vrms).

5V -> 1023 olduğundan, adc ham değeri:
((2,35 x 1023) / 5) ≈ 480 olarak bulunur.

Ekranda bunu 100A. olacak şekilde yazdırmamız
için oluşan formül:
(480 x 2,1) / 10 ≈ 100A olmaktadır.

Umarım anlaşılmıştır...
 
Son düzenleme:
Akım sensöründen 100A. geçtiğinde; 33Ω
değerindeki direncin üzerine düşen gerilim
~2,35Vpeak olmaktadır. (~1,65Vrms).

5V -> 1023 olduğundan, adc ham değeri:
((2,35 x 1023) / 5) ≈ 480 olarak bulunur.

Ekranda bunu 100A. olacak şekilde yazdırmamız
için oluşan formül:
(480 x 2,1) / 10 ≈ 100A olmaktadır.

Umarım anlaşılmıştır...
Gayet iyi anladım Mehmet bey tüm yardımlarınız için teşekkür ederim .
 

Forum istatistikleri

Konular
128,159
Mesajlar
915,559
Kullanıcılar
449,917
Son üye
kasva1965

Yeni konular

Geri
Üst