Pic'e gelen gerilim değerine göre led yakıp söndürme

Başlatan blueboard, 05 Temmuz 2026, 15:17:41

onurinci

hocam Config satırı uyuşmadığı için. hata veriyormuş,
derleniyor, o sıkıntıyı aştım. ama simulasyonda program çalışmıyor..

ete

Bende denedim Select Case ile program çalışmıyor.
Aslında anlamsız bir ikaz veriyor sanki satırın sonunda " ". varmış gibi. Ama yok öyle bir şey.
Belliki beğenmediği bir şey var. En iyisi if satırları ile halletmek.

Ete

onurinci

AI'ye kodu onarmasını söyledim. Registerlerin FVR ve ADC yanlış setletmiş olduğunu ifade etti .hakikaten bir register deposu olan biraz zor bir işlemci. neyse merak edenler olur diye çalışan kodu ilave ediyorum..
' --- Donanım Yapılandırması (Osilatör Ayarları) ---
#CONFIG
  __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF
  __config _CONFIG2, _PLLEN_ON & _STVREN_ON & _LVP_OFF
#ENDCONFIG

DEFINE OSC 32
OSCCON = %11110000          ' 8MHz Internal RC * 4xPLL = 32 MHz

' --- Giriş / Çıkış Tanımlamaları ---
TRISA = %00000010           ' RA1/AN1 Giriş, diğerleri çıkış
PORTA = 0
TRISB = %00000000           ' PORTB tamamı çıkış
PORTB = 0

' --- Analog / Dijital Seçimleri ---
ANSELA = %00000010          ' Sadece AN1 (RA1) analog giriş
ANSELB = %00000000          ' PORTB tamamen dijital

' --- Gelişmiş Donanımsal ADC Ayarları ---
ADCON0 = %00000101          ' AN1 kanalı seçildi ve ADC açıldı
ADCON1 = %10100000          ' Sağa dayalı, Clock=FOSC/32, Ref=VDD (5V)

' --- Diğer Modüllerin Kapatılması ---
DACCON0 = 0
DACCON1 = 0
INTCON = 0
CM1CON1 = 0
CM2CON1 = 0                 
CCP1CON = 0
CCP2CON = 0

' --- Değişken Tanımlama ---
HAMA VAR WORD

' --- Ana Program ---
BASLA:
    ' --- MANUEL ADC OKUMA ---
    PauseUs 50              ' Sinyal toplama süresi bekle
    ADCON0.1 = 1            ' GO/DONE bitini 1 yap (Dönüşümü başlat)
    
DONGU_BEKLE:
    If ADCON0.1 = 1 Then Goto DONGU_BEKLE ' Çevrim bitene kadar bekle
    
    HAMA.HighByte = ADRESH 
    HAMA.LowByte = ADRESL  

    ' --- ÇIKIŞ KONTROLÜ ---
    PORTB = 0               ' Yeni sorgudan önce tüm çıkışları temizle

    ' PBP Uyumlu Büyükten Küçüğe Doğru Sıralanmış Select Case Yapısı
    ' Bu sıralama sayesinde "And" kullanmaya gerek kalmaz, ilk eşleşen çalışır.
    Select Case HAMA
        Case Is > 817
            PORTB = 0       ' En üst sınırın üstündeyse söndür
        Case Is > 635       ' 636 ile 817 arası
            PORTB.7 = 1
        Case Is > 533       ' 534 ile 635 arası
            PORTB.6 = 1
        Case Is > 451       ' 452 ile 533 arası
            PORTB.5 = 1
        Case Is > 369       ' 370 ile 451 arası
            PORTB.3 = 1
        Case Is > 283       ' 284 ile 369 arası
            PORTB.2 = 1
        Case Is > 185       ' 186 ile 283 arası
            PORTB.1 = 1
        Case Is > 45        ' 46 ile 185 arası
            PORTB.0 = 1
        Case Else 
            PORTB = 0       ' 45'ten küçükse (veya 0.1V boşta kalma durumunda) sıfırla
    End Select
    
    Pause 100               ' Stabilite için bekleme
    Goto BASLA

END

onurinci

@blueboard ayrıca Proteus hızına 432 MHz vermişsiniz. nedeni bulana kadar epey yoruldum. ;D

blueboard

Alıntı yapılan: onurinci - 09 Temmuz 2026, 01:35:30@blueboard ayrıca Proteus hızına 432 MHz vermişsiniz. nedeni bulana kadar epey yoruldum. ;D
Günaydın. Mikrodenetleyici hızı çizimimde 4 MHz olmalı. Ben onu 32 olarak değiştirirken 4 rakamını silmemiş olmalıyım.

Powered by EzPortal
▲