Şimdi Ara

ds1302 ve ds18b20 nasıl çalışıyo

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
2.731
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • ds 1302 içerisinde saat ve takvim bilgileri yüklü olan entegredir, ds18b20 sıcaklık ölçümü yapan entegredir bu entegrelerle pic ile lcd ekranlı sıcaklık ve saat takvim devresi yapmak istiyorum fakat ds1302 ye ve ds18b20 için pic e hangi komutları(basic dilinde ) veirsem ekranda saat takvim ve sıcaklık değerlerini gösterebilirim lütfen yardım edin 2 senedir bunu yapabilmeye uğraşıyorum...(pin entegresi olarak farketmez ama 16f628 olabilir)



  • http://ccspic.com/projeler/ds18b20-ve-ds1302-ile-lcd-termometre-saat.html

    bu adresde picc ile yazılmış bir örnek var. amacın devreyi yapmak ise basic veya c farketmez diye düşünüyorum.
  • hocam harikasın amacım sadece devreyi yapnmak değil yaparken öğrenmek bu yüzden basic kodları olarak çözmeliyim anlayacağın amacım kendimi geliştirmek ama c nin açık kodlarından bişeyler anladım çok treşekkür ederim acayip işime yarayacak şimdi c deki bi kaç komutun basic teki karşılığını ve ne işe yaradığını söyleyen arkadaşlar bulmakta tekrardan teşekkür ettim.

    #define

    #include

    #lcd_init

    #rtc_set_datetime(6,5,8,2,52) ; // tarih saat ayarları yapılıyor

    { //Sıcaklık bilgisi okunuyor ve çevriliyor temp = ds1820_read();

    rtc_get_time(saat,dakika,saniye);

    rtc_get_date(gun,ay,yil,haftanin_gunu);

    rtc_get_date(gun,ay,yil,haftanin_gunu);

    cese
    printif
    break
    printif(lcd_ptc," %02d:%02d:%02d" ,saat dakika saniye );
  • yukarıda yazdığım c kodlarının basic karşılığını bilen varmı c kodlaını bilmiyorum basic kullanıyorum teşekkür ederim
  • PBP dilinde yazılmış.Pil olarak şarjlı pil kullandım.Devre enerjideyken pil şarj oluyor.

    Include "MODEDEFS.BAS"

    DEFINE OSC 4

    DEFINE LCD_DREG PORTB
    DEFINE LCD_DBIT 4
    DEFINE LCD_EREG PORTB
    DEFINE LCD_EBIT 3
    DEFINE LCD_RSREG PORTB
    DEFINE LCD_RSBIT 2
    DEFINE LCD_BITS 4
    DEFINE LCD_LINES 2
    DEFINE LCD_COMMANBUS 2000 ;komut gecikme süresi mikrosaniye olarak
    DEFINE LCD_DATAUS 50 ;veri gecikme süresi mikrosaniye olarak

    LCDOUT $FE,$68,$0E,$11,$10,$10,$10,$15,$0E,$4 'Ç dataları Numarası 5
    LCDOUT $FE,$78,$0,$0,$0C,$4,$4,$4,$e,$0 'ı dataları NUMARSI 7 DİR

    TrisA=%00000000
    TrisB=%00000000
    TrisC=%00000000
    TrisD=%11111111

    DAKIKA1 VAR Byte
    SAAT1 VAR Byte

    DAKIKA VAR Byte
    SAAT VAR Byte
    HAFTA VAR Byte
    GUN VAR Byte
    AY VAR Byte
    YIL VAR Byte
    SAY VAR Byte
    SANIYE VAR Byte
    TARIH VAR Byte
    KONTROL VAR Byte
    SAYI var Byte
    SAYILAR VAR BYTE


    BAS1 VAR Byte
    BAS2 VAR Byte
    BAS3 VAR Byte
    BAS4 VAR Byte



    ARA VAR BYTE
    SINYAL VAR BIT

    Busy VAR BIT ' Busy Status-Bit
    HAM VAR WORD ' Sensör HAM okuma değeri
    ISI VAR WORD ' Hesaplanmış ISI değeri
    Float VAR WORD ' Holds remainder for + temp C display
    X VAR WORD
    SIGN_BITI VAR HAM.Bit11 ' +/- sıcaklık İşaret biti, 1 = olursa eksi sıcaklık
    NEGAT_ISI CON 1 ' Negatif_Cold = 1
    Deg CON 223 ' ° işareti
    SIGN VAR BYTE ' ISI değeri için +/- işaret
    TEMP VAR BYTE ' Div32 bit hesap için geçici değişken

    RESET1 VAR PORTC.0
    DTA VAR PORTC.1
    SCLK VAR PORTC.2

    SET VAR PORTD.0
    YUKARI VAR PORTD.1
    ASAGI VAR PORTD.2

    SINYAL=0


    SARJ var byte
    RTCCmd VAR BYTE

    ;CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış
    ADCON1=7



    Tric CON %10010000

    'Trickle time charger settings
    O_FF CON %11110000 'turns off trickle charge
    D1R1 CON %10100101 '1 diode 1 resistor
    D1R2 CON %10100110 '1 diode 2 resistor
    D1R3 CON %10100111 '1 diode 3 resistor
    D2R1 CON %10101001 '2 diode 1 resistor
    D2R2 CON %10101010 '2 diode 2 resistor
    D2R3 CON %10101011 '2 diode 3 resistor


    Symbol COMM_PIN=PORTC.3 ' One-wire Data-Pin "DQ" PortB.0 da
    ;Comm_Pin VAR PortB.4 ' One-wire Data-Pin "DQ" PortB.0 da

    SARJ = D1R2 'changes this variable to off or the setting that you want the ds1302 to charge at see data sheet
    RTCCmd = TRIC
    GOSUB trick

    High RESET1 'OKUMA İŞLEMİNİ BAŞLAT
    SHIFTOUT DTA,SCLK,LSBFIRST,[$8E,0]
    Low RESET1 'OKUMA İŞLEMİNİ BİTİR







    LCDOUT 254, 1 ;EKRANI TEMIZLE

    ;______________________________

    BASLA:

    lcdout $FE, 2, DEC2 SAAT,":",DEC2 DAKIKA," ",DEC2 SANIYE,Sign,DEC ISI,".",DEC1 (Float)," ",Deg,"C" '2. satırda ısı
    LCDOut $FE,$C0,DEC2 GUN,"-",DEC2 AY,"-20",DEC2 YIL," ",DEC1 HAFTA



    ARA=HAFTA
    select case ARA

    case 1
    lcdout $fe,$CB,"Pts. "
    case 2
    lcdout $fe,$CB,"Sal",7," "
    case 3
    lcdout $fe,$CB,5,"ar. "
    case 4
    lcdout $fe,$CB,"Per. "
    case 5
    lcdout $fe,$CB,"Cuma "
    case 6
    lcdout $fe,$CB,"Cts. "
    case 7
    lcdout $fe,$CB,"Pazar"
    end select







    RESET1=1

    shiftout DTA,SCLK,LSBFIRST,[$BF]; [$BF]
    SHIFTIN DTA,SCLK,LSBPRE,[SANIYE,DAKIKA,SAAT,GUN,AY,HAFTA,YIL,KONTROL] 'OKU
    RESET1=0

    KONTROL=SANIYE:GoSub CEVIR: SANIYE=SAYI
    KONTROL=DAKIKA:GoSub CEVIR: DAKIKA=SAYI
    KONTROL=SAAT: GoSub CEVIR: SAAT=SAYI
    KONTROL=GUN: GoSub CEVIR: GUN=SAYI
    KONTROL=AY: GoSub CEVIR: AY=SAYI
    KONTROL=HAFTA: GoSub CEVIR: HAFTA=SAYI
    KONTROL=YIL: GoSub CEVIR: YIL=SAYI

    GOSUB SENSOROKU

    GOTO BASLA

    CEVIR:
    SAYI = ((KONTROL >> 4) * 10) + (KONTROL & $0F)
    Return



    CEVIR1:
    SAYI=0
    hx:
    If KONTROL>=10 Then
    KONTROL=(KONTROL-10)
    SAYI=(SAYI+16) ;$10
    GoTo hx
    Else
    SAYI=(SAYI+KONTROL)
    GoTo ex
    EndIf
    ex:
    Return





    Trick:
    HIGH RESET1
    SHIFTOUT DTA,SCLK,LSBFIRST, [RTCCmd,SARJ]
    LOW RESET1
    return




    SENSOROKU:

    OWOUT Comm_Pin, 1, [$CC, $44]' ISI değerini oku
    Bekle1:
    OWIN Comm_Pin, 4, [Busy] ' Busy değerini oku
    IF Busy = 0 THEN Bekle1 ' hala meşgulmü? , evet ise goto Bekle..!
    OWOUT Comm_Pin, 1, [$CC, $BE] ' scratchpad memory oku
    OWIN Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
    GOSUB Hesapla
    RETURN


    Hesapla: ' Ham değerden Santigrat derece hesabı
    Sign = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
    Sign = "-"
    temp=($ffff-ham+1)*625
    ISI = DIV32 10
    GOTO GEC1
    endif
    TEMP = 625 * (HAM+1) '
    ISI = DIV32 10 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
    GEC1:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)+2
    ;LCDOUT $FE,$C4,Sign,DEC ISI,".",DEC1 (Float)," ",Deg,"C " '2. satırda ısı
    RETURN


    ARK:
    LCDOUT 254, 1 ;EKRANI TEMIZLE
    lcdout $FE, 2, "SAAT:",DEC2 SAAT
    ARK1:
    IF SET=0 THEN SAATAYAR
    GOTO ARK1

    SAATAYAR:

    lcdout $FE, 2, "SAAT:",DEC2 SAAT
    IF SET=1 THEN ARK2
    IF YUKARI=1 THEN CIK
    IF ASAGI=1 THEN IN
    GOTO SAATAYAR

    CIK:
    IF SAAT=>23 THEN BUYUK
    SAAT=SAAT+1
    GOTO KAYIT

    IN:
    IF SAAT=0 THEN KUCUK
    SAAT=SAAT-1
    GOTO KAYIT

    BUYUK:
    SAAT=0
    GOTO KAYIT

    KUCUK:
    SAAT=23

    KAYIT:

    lcdout $FE, 2, "SAAT:",DEC2 SAAT
    IF YUKARI=0 AND ASAGI=0 THEN SAATAYAR
    GOTO KAYIT

    ;**************************************************************

    ARK2:
    LCDOUT 254, 1 ;EKRANI TEMIZLE
    lcdout $FE, 2, "DAKIKA:",DEC2 DAKIKA
    ARK3:
    IF SET=0 THEN DAKAYAR
    GOTO ARK3

    DAKAYAR:

    lcdout $FE, 2, "DAKIKA:",DEC2 DAKIKA
    IF SET=1 THEN ARK4
    IF YUKARI=1 THEN CIK1
    IF ASAGI=1 THEN IN1
    GOTO DAKAYAR

    CIK1:
    IF DAKIKA=>59 THEN BUYUK1
    DAKIKA=DAKIKA+1
    GOTO KAYIT1

    IN1:
    IF DAKIKA=0 THEN KUCUK1
    DAKIKA=DAKIKA-1
    GOTO KAYIT1

    BUYUK1:
    DAKIKA=0
    GOTO KAYIT1

    KUCUK1:
    DAKIKA=59

    KAYIT1:

    lcdout $FE, 2, "DAKIKA:",DEC2 DAKIKA
    IF YUKARI=0 AND ASAGI=0 THEN DAKAYAR
    GOTO KAYIT1

    ;**************************************************************
    ARK4:
    LCDOUT 254, 1 ;EKRANI TEMIZLE
    lcdout $FE, 2, "YIL:20",DEC2 YIL
    ARK5:
    IF SET=0 THEN YILAYAR
    GOTO ARK5

    YILAYAR:
    lcdout $FE, 2, "YIL:20",DEC2 YIL
    IF SET=1 THEN ARK6
    IF YUKARI=1 THEN CIK2
    IF ASAGI=1 THEN IN2
    GOTO YILAYAR

    CIK2:
    IF YIL=>99 THEN BUYUK2
    YIL=YIL+1
    GOTO KAYIT2

    IN2:
    IF YIL=0 THEN KUCUK2
    YIL=YIL-1
    GOTO KAYIT2

    BUYUK2:
    YIL=0
    GOTO KAYIT2

    KUCUK2:
    YIL=99

    KAYIT2:
    lcdout $FE, 2, "YIL:20",DEC2 YIL
    IF YUKARI=0 AND ASAGI=0 THEN YILAYAR
    GOTO KAYIT2

    ;**************************************************************
    ARK6:
    LCDOUT 254, 1 ;EKRANI TEMIZLE
    lcdout $FE, 2, "AY:",DEC2 AY
    ARK7:
    IF SET=0 THEN AYAYAR
    GOTO ARK7

    AYAYAR:
    lcdout $FE, 2, "AY:",DEC2 AY
    IF SET=1 THEN ARK8
    IF YUKARI=1 THEN CIK3
    IF ASAGI=1 THEN IN3
    GOTO AYAYAR

    CIK3:
    IF AY=>12 THEN BUYUK3
    AY=AY+1
    GOTO KAYIT3

    IN3:
    IF AY=1 THEN KUCUK3
    AY=AY-1
    GOTO KAYIT3

    BUYUK3:
    AY=1
    GOTO KAYIT3

    KUCUK3:
    AY=12

    KAYIT3:
    lcdout $FE, 2, "AY:",DEC2 AY
    IF YUKARI=0 AND ASAGI=0 THEN AYAYAR
    GOTO KAYIT3

    ;**************************************************************
    ARK8:
    LCDOUT 254, 1 ;EKRANI TEMIZLE
    lcdout $FE, 2, "GUN:",DEC2 GUN
    ARK9:
    IF SET=0 THEN GUNAYAR
    GOTO ARK9

    GUNAYAR:
    lcdout $FE, 2, "GUN:",DEC2 GUN
    IF SET=1 THEN ARK12
    IF YUKARI=1 THEN CIK4
    IF ASAGI=1 THEN IN4
    GOTO GUNAYAR

    CIK4:
    IF AY=2 AND GUN=>29 THEN BUYUK4
    IF AY=4 OR AY=6 OR AY=9 OR AY=11 AND GUN=>30 THEN BUYUK4
    IF GUN=>31 THEN BUYUK4
    GUN=GUN+1
    GOTO KAYIT4

    IN4:
    IF GUN=1 THEN KUCUK4
    GUN=GUN-1
    GOTO KAYIT4

    BUYUK4:
    GUN=1
    GOTO KAYIT4

    KUCUK4:
    GUN=31
    IF AY=2 THEN GUN=29
    IF AY=4 OR AY=6 OR AY=9 OR AY=11 THEN GUN=30


    KAYIT4:
    lcdout $FE, 2, "GUN:",DEC2 GUN
    IF YUKARI=0 AND ASAGI=0 THEN GUNAYAR
    GOTO KAYIT4


    ARK10:
    LCDOUT 254, 1 ;EKRANI TEMIZLE
    ARK11:
    IF SET=0 THEN KAYDET
    GOTO ARK11

    ;**************************************************************
    ARK12:
    LCDOUT 254, 1 ;EKRANI TEMIZLE
    lcdout $FE, 2, "HAFTA:",DEC1 HAFTA
    ARK13:
    IF SET=0 THEN HAFTAAYAR
    GOTO ARK13

    HAFTAAYAR:
    lcdout $FE, 2, "HAFTA:",DEC1 HAFTA
    IF SET=1 THEN ARK14
    IF YUKARI=1 THEN CIK5
    IF ASAGI=1 THEN IN5
    GOTO HAFTAAYAR

    CIK5:
    IF HAFTA=>7 THEN BUYUK5
    HAFTA=HAFTA+1
    GOTO KAYIT5

    IN5:
    IF HAFTA=1 THEN KUCUK5
    HAFTA=HAFTA-1
    GOTO KAYIT5

    BUYUK5:
    HAFTA=1
    GOTO KAYIT5

    KUCUK5:
    HAFTA=7

    KAYIT5:
    lcdout $FE, 2, "HAFTA:",DEC1 HAFTA
    IF YUKARI=0 AND ASAGI=0 THEN HAFTAAYAR
    GOTO KAYIT5


    ARK14:
    LCDOUT 254, 1 ;EKRANI TEMIZLE
    ARK15:
    IF SET=0 THEN KAYDET
    GOTO ARK15




    KAYDET:
    SINYAL=1
    Low RESET1
    Low SCLK

    SANIYE=0
    KONTROL=0



    KONTROL=SANIYE:GoSub CEVIR1: SANIYE=SAYI
    KONTROL=DAKIKA:GoSub CEVIR1: DAKIKA=SAYI
    KONTROL=SAAT: GoSub CEVIR1: SAAT=SAYI
    KONTROL=GUN: GoSub CEVIR1: GUN=SAYI
    KONTROL=AY: GoSub CEVIR1: AY=SAYI
    KONTROL=HAFTA: GoSub CEVIR1: HAFTA=SAYI
    KONTROL=YIL: GoSub CEVIR1: YIL=SAYI


    High RESET1 'OKUMA İŞLEMİNİ BAŞLAT
    SHIFTOUT DTA,SCLK,LSBFIRST,[$8E,0]
    Low RESET1 'RESETİ SIFIRLA
    High RESET1
    SHIFTOUT DTA,SCLK,LSBFIRST,[$BE,SANIYE,DAKIKA,SAAT,GUN,AY,HAFTA,YIL,0] ' $A5 Write trickle = %10100101 PİL ŞARJ KOMUTU
    Low RESET1


    GOTO BASLA

    END




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.