Nerede hata yapıyorum ? Return değeri sonuç göndermiyor.

Başlatan Mr.Java, 07 Haziran 2013, 13:58:31

Mr.Java

İşlemci:16F877A

void Adc_Init()
{
    ADCON1 = 0x80;
    ADON = 1;
    ADIF = 0;
    ADIE = 1;
    GIE = 1;
    PEIE = 1;
}

int Adc_Channel(unsigned char channel)
{
    int deger;

    switch (channel)
    {
    case 0:
        ADCON0 = 0xC1;
        break;
    case 1:
        ADCON0 = 0xC9;
        break;
    case 2:
        ADCON0 = 0xD1;
        break;
    case 3:
        ADCON0 = 0xD9;
        break;
    case 4:
        ADCON0 = 0xE1;
        break;
    case 5:
        ADCON0 = 0xE9;
        break;
    case 6:
        ADCON0 = 0xF1;
        break;
    case 7:
        ADCON0 = 0xF9;
        break;
    }
    DelayUs(10);
    GO_DONE = 1;
    while (!GO_DONE);
    deger = ((ADRESH << 8) + ADRESL);
    return deger;
}


yilmaz_kk

  Konunun uzmanı olmamakla birlikte değer değişkeninin yerel fonksionda yaratılıp return ile sonuç almanın sıkıntılı olduğunu değerlendiriyorum.

Burak B

.
.
.
return ((ADRESH << 8UL) | ADRESL) & 0x3F;  /* 10-Bit  */


Bu şekilde bir denermisin.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

Kabil ATICI

deger sayı türü int olarak belirtilmiş. Buradaki değeriniz(deger)  8 bit mi oluyor, 16 bit mi?

Buradaki deger 8 bit ise 10 biti göndermeniz biraz zor olabilir!..
ambar7

darklancet

doğru yazmışsın. adc'yi doğru okuduğundan eminmisin bende adc'de bir sıkıntı var

Mr.Java

Yukarıda ki return ((ADRESH << 8UL) | ADRESL) & 0x3F;  /* 10-Bit  */
denedim 3V'ta 0038 değeri gösterdi.

10bitte ise hocam zaten ADRESH ve ADRESL toplamda 16 bit biz 10 biti için deger tanımlamasında 8-bit yapıyoruz ki zaten.

Edit = ALLAH'ım PORTA çıkış yönlendirmemişim.Program uzun olduğundan gözümden kaçmış  >:(

Teşekkürler fonksyon çalışıyor sadece biryer editlenecek..

deger = (((ADRESH << 8) + ADRESL)/2); // /2 dersek sorunsuz çalışıyor.

yorumlar için teşekkürler...