Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: breathness - 20 Aralık 2011, 19:37:10

Başlık: C ile Pic basic arası Bir soru
Gönderen: breathness - 20 Aralık 2011, 19:37:10
Merhaba dostlar
balıkesir"den selamlar

Baü Myo Elektronik haberleşme bölümlü öğrencisiyim ve geçen seneden kaldığım bir ders var onun içinde bu projeyi teslim etmem lazım

elektronik kumbara yapıyorum ve aşağıda 25kuruş deliğine ait sensörün komutlarını yazmaya çalışıyorum

kısaca yapmak istediğim para atıldımı atıldıysa pic16f628a nın hafızasına kaydet bu değeri lcd ekrana yazdır bunuda Pic Basic dilinde yazmam gerekiyor elimde C var biraz kafadan yazdım ama microcode hata veriyor sizden ricam

if(alici4==1){while(alici4==1); sayac+=25; LCD_yaz();}

bu C dilindeki komutun Pic Basicde ki KOdlamasını yazabilirmisiniz hemen bir satır ?¿




belki ilgi alanı olur daha detaylı bakmak isterse aşağıda kendim yazdığım kadarı ve esinlendiğim kaynak var şimdiden teşekkürler
kaynak:=> http://www.biltek.tubitak.gov.tr/gelisim/elektronik/22.htm



DEFINE LCD_DREG     PORTB
DEFINE LCD_DBIT     4     
DEFINE LCD_EREG     PORTB
DEFINE LCD_EBIT     1     
DEFINE LCD_RSREG    PORTB
DEFINE LCD_RSBIT    2   
DEFINE LCD_BITS     4     
DEFINE LCD_LINES    2   


                   


TRISA=%11111111
TRISB=%10000000


DEVICE@PIC16F628A



EWEN Con %10011
EWDS Con %10000
ERAL Con %10010
WRAL Con %10001                bunlar eepproma bilgi giriş çıkışı için kopyala yapıştır hazır aldım
ERD Con %1100
EWR Con %1010
ERASE Con %1110



PARA VAR WORD             PARA değişken dedim


LCDOUT $FE,1,"DIGITAL KUMBARA"     ilk satırda her zaman sabit "dijital kumbara" yazacak
PAUSE 200





BASLA:

IF PORTb.3=1 then bosalt         sIFIRLA BUTONUNA BASILIMI KUMBRAYI BOŞALTTIĞIMDA BASMAK İÇİN



IF PORTA.0=1 THEN PARA=PARA+1              1 KURUŞ ATILMASI         
WRITE 0,PARA
LCDOUT $FE,$CO,#PARA,"LIRA"


IF PORTA.1=1 THEN PARA=PARA+5 5 KURUŞ
WRITE 0,PARA
LCDOUT $FE,$CO,#PARA,"LIRA"


IF PORTA.2=1 THEN PARA=PARA+10 10 KRŞ
WRITE 0,PARA
LCDOUT $FE,$CO,#PARA,"LIRA"


IF PORTA.3=1 THEN PARA=PARA+25
WRITE 0,PARA                                    25 KRŞ
LCDOUT $FE,$CO,#PARA,"LIRA"


IF PORTBA.4=1 THEN PARA=PARA+50
WRITE 0,PARA                                 50 KRŞ
LCDOUT $FE,$CO,#PARA,"LIRA"


IF PORTB.0=1 THEN PARA=PARA+100 100 KRŞ
WRITE 0,PARA
LCDOUT $FE,$CO,"LIRA"

GO TO BASLA


BOSALT:
ERASE ALL                         EEPROMU SIFIRLA
LCDOUT $FE,$CO,#PARA,"LIRA"         EKRANA PARA MİKTARINI YAZDIR 
GOTO BASLA                            BAŞA DÖN
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: ibrsel - 20 Aralık 2011, 20:05:40
Alıntı Yap
If alici4=1 Then
    While alici4=1
        sayac=sayac+25
        Gosub LCDYaz
    Wend
EndIf

Not: LCDYaz diye bir alt programının olması gerekiyor. C kodlarında orada ne yaptırdığını bilmediğim için o alt programı yazamadım..Basic e dönüştürmek için LCDYaz alt programınıda düzenlemen gerek..
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: haydarpasamikro - 20 Aralık 2011, 20:58:34
DEFINE OSC 4                'OSC 4MHZ

DEFINE LCD_DREG PORTB       'LCD DATA PORTU
DEFINE LCD_DBIT 4           'LCD DATA BASLANGID PORT NO 
DEFINE LCD_RSREG PORTB      'LCD RS PORTU 
DEFINE LCD_RSBIT 2          'LCD RS PORT NO   
DEFINE LCD_EREG PORTB       'LCD ENABLE PORTU
DEFINE LCD_EBIT 1           'LCD ENABLE PORT NO
DEFINE LCD_BITS 4           'DATA BIT SAYISI 
DEFINE LCD_LINES 2          'LCD SATIR SAYISI 
DEFINE LCD_COMMANDUS 2000   'LCD KOMUT BEKLEME SURESI   
DEFINE LCD_DATAUS 50        'LCD DATA BEKLEME SURESI   
   
SYMBOL SENSOR=PORTB.0       'PORTB.0 PARA SENSORU 0 --> 1 GEÇISTE AKTIF
SYMBOL SIFIRLA=PORTB.3      'SIFIRLAMA GIRISI PORTB.3         
SAYAC VAR BYTE              'PARA SAYACINI TUT HAFIZADA 1 BYTE 0-255 ARASI

    TRISB.3 = 1                         'SIFIRLAMA GIRISI
    TRISB.0 = 1                         'SENSOR PINI PORTB.0 GIRIS
    READ 0,SAYAC                        'ILK ACILISTA EEPROMUN 0.ADRESI SAYAC DEGERINI OKU
    LCDOUT $FE,1,"KUMBARA FONU:)"       'ILK KARSILAMA EKRANI
    LCDOUT $FE,$C0,"SAYAC=",DEC3 SAYAC  'EPROMDAKI DEGERI EKRAN ALT SATIRA YAZ 3 BASAMAK DESIMAL   
   
    WHILE 1==1                                          'SONSUZ DONGU
                                                                 
        IF SENSOR==1 THEN                               'EGER SENSOR AKTIF ISE
            SAYAC = SAYAC + 1                           'SAYACI ARTIR
            LCDOUT $FE,$C0,"SAYAC=",DEC3 SAYAC          'LCD ALT EKRANA SAYACI YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SENSOR ==1                            'SENSOR 0 SIFIRA     
            WEND                                        'DONENE KADAR BEKLE
             
        ENDIF
       
        IF SIFIRLA==1 THEN                              'EGER SIFIRLAMA GIRISI AKTIF ISE (1)
            SAYAC = 0                                   'AKTIF ISE SAYACI SIFIRLA
            LCDOUT $FE,$C0,"SAYAC=",DEC3 SAYAC          'EKRANA YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SIFIRLA==1                            'SIFIRLAMA GIRISI PASIF OLANAN KADAR BEKLE
            WEND
        ENDIF
       
    WEND       
     
    END


'yukardaki programı yazdım isis te test ettim. İşini görür umarım. pic16f84a 4mhz kristal,lm016l sembol lcd ile test ettim. 2x16 karakter lcd. rb0 portuna 1 ver. para sensörü algıla yapmış sayılır. sonra 0 a çek. tekrar 1 verirsen tekrar algılama yapmış sayılır. portb.3 e 1 verirsen dahili eepromdaki sayac saklı değerini sıfırlıyoruz. sonra tekrar 0 a çek. yani artırma için rb0, sıfırlama için rb3. lcd uçlarını yukarıda senin tanımladığın gibi.

Arslan Lüleci
Haydarpaşa Teknik EML
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: breathness - 21 Aralık 2011, 20:18:10
Bir dakika dostlar hemen deneyeyim kendi devremde
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: breathness - 21 Aralık 2011, 20:38:46
ibrsel bana pic basic lazım ki seninki bildiğim kadarıyla C dili

ben bildiklerimide söyleyeyim biz derste  hocayla eğer porta.1=1 ise then reset

reset:
portb=%11111111

yap led yak lcd ye isim yazdır sadece bunları gördük

Arslan hocam while wendi pek anlamadım direk derledim 16f28a yükledim osilatörü bağladım şuan yüklediğim resimdeki gibi ekranda sadece "kumbara fonu" diye yazı çıkıyor butonlar aktif değil birde sizin programa baktım "BASLA:" gibi etiket olması lazım sanki direk başlamış pek algılayamadım kusuruma bakmayın biraz daha açık anlatırmısınız yada bu kodlarda çalışan devrede niye butonlar çalışmıyo0r olabilir

birde sizin kodlara sadece @device 16f628a ekledim microcodestüdyoda hata verdi kafanızı ağrıtacağım biraz ama yardımcı olursanız Çok makbule gececek

Esen kalın


(http://a1112.hizliresim.com/s/p/188qq.jpg) (http://bit.ly/c25MCx)

(http://a1112.hizliresim.com/s/p/188ru.jpg) (http://bit.ly/c25MCx)
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: breathness - 21 Aralık 2011, 21:02:30
hocam hatta daha anlaşılır olması için direk devremi vereyim linkten hatam belki şekildedir


http://www.dosya.tc/server8/pBysAD/ELEKTORN_KKUMBARA_ALI_MASAYFASI-fAT_H.rar.html
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: haydarpasamikro - 22 Aralık 2011, 13:23:53
@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT

DEFINE LCD_DREG PORTB       'LCD DATA PORTU
DEFINE LCD_DBIT 4           'LCD DATA BASLANGID PORT NO 
DEFINE LCD_RSREG PORTB      'LCD RS PORTU 
DEFINE LCD_RSBIT 2          'LCD RS PORT NO   
DEFINE LCD_EREG PORTB       'LCD ENABLE PORTU
DEFINE LCD_EBIT 1           'LCD ENABLE PORT NO
DEFINE LCD_BITS 4           'DATA BIT SAYISI 
DEFINE LCD_LINES 2          'LCD SATIR SAYISI 
DEFINE LCD_COMMANDUS 2000   'LCD KOMUT BEKLEME SURESI   
DEFINE LCD_DATAUS 50        'LCD DATA BEKLEME SURESI   
   
SYMBOL SENSOR=PORTB.0       'PORTB.0 PARA SENSORU 0 --> 1 GEÇISTE AKTIF
SYMBOL SIFIRLA=PORTB.3      'SIFIRLAMA GIRISI PORTB.3         
SAYAC VAR BYTE              'PARA SAYACINI TUT HAFIZADA 1 BYTE 0-255 ARASI

    CMCON = 7
    TRISB.3 = 1                         'SIFIRLAMA GIRISI
    TRISB.0 = 1                         'SENSOR PINI PORTB.0 GIRIS
    READ 0,SAYAC                        'ILK ACILISTA EEPROMUN 0.ADRESI SAYAC DEGERINI OKU
    LCDOUT $FE,1,"KUMBARA FONU:)"       'ILK KARSILAMA EKRANI
    LCDOUT $FE,$C0,"SAYAC=",DEC3 SAYAC  'EPROMDAKI DEGERI EKRAN ALT SATIRA YAZ 3 BASAMAK DESIMAL   
   
    WHILE 1==1                                          'SONSUZ DONGU
                                                                 
        IF SENSOR==1 THEN                               'EGER SENSOR AKTIF ISE
            SAYAC = SAYAC + 1                           'SAYACI ARTIR
            LCDOUT $FE,$C0,"SAYAC=",DEC3 SAYAC          'LCD ALT EKRANA SAYACI YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SENSOR ==1                            'SENSOR 0 SIFIRA     
            WEND                                        'DONENE KADAR BEKLE
             
        ENDIF
       
        IF SIFIRLA==1 THEN                              'EGER SIFIRLAMA GIRISI AKTIF ISE (1)
            SAYAC = 0                                   'AKTIF ISE SAYACI SIFIRLA
            LCDOUT $FE,$C0,"SAYAC=",DEC3 SAYAC          'EKRANA YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SIFIRLA==1                            'SIFIRLAMA GIRISI PASIF OLANAN KADAR BEKLE
            WEND
        ENDIF
       
    WEND       
     
    END

senin kurduğun devrede simülasyon için portlara değer gelmiyor. çünkü 7404 lü sürücü devre çıkış üretmiyor. gerçekde çalışabilir. ancak isis simülasyonda çalışmaz. en basit denemek için  rb0 portu ile +5v arasına buton ve port ile eksi arasına 10k pulldown direnci koy. aynısını rb3 portu için de yap. rb0 portu saydırmak için rb3 port sıfırlamak için. pic16f628a için programın başına dahili rc osilatörü kurmak için satır ekledim(@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT). bir de sen porta yı dijital kullanabilmen için comparatörü.kapattık(cmcon=7)
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: haydarpasamikro - 22 Aralık 2011, 13:33:26
bir de pic16f628a nın besleme uçları VDD ve VSS kaynaklarına bağlı. bu sebeple not kapılarının girişinde kullandığın 10k pullup dirençlerini beslediğin 5v dc generatoru kaldırıp isis terminal modu ndaki power sembolünü kullan.
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: haydarpasamikro - 22 Aralık 2011, 13:38:43
son olarak hata!
giriş butonların 5v dc generatore gidiyor. bağlantıyı ayır ve butonları gnd ye ver.
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: breathness - 22 Aralık 2011, 20:19:05
hocam sensörler analog çıkışlı bildiğim kadarıyla bunları elektroniksel olarak lojik 1 ve sıfır algılaması için 74hc14n i kullanıyoruz, dediğiniz gibi bağlantıları ayırdım 10k.lık potları koydum, terminal sekmesinden POWER kullandım dediğiniz gibi basit mantık buton pull down yaptım, anlamadığım  benim aldığım kaynakdaki devre şemasında giriş butonları aynı benim önceki bağladığım gibi bağlı şimdi aynı işlev nasıl olacak, ve SAYAC ı BYTe olarak tanımladık 6 liraya kadar sayması lazım bu aletin  SAYAC VAR WORD dememiz lazım sanki

ve sizin verdiğiniz kodlardaki buton kısmını bütün madeni paralar için yazdım ayar çekerek yine aynı hata oldu ekranda kumbura fonu sayac yazıyor butonlar yine servis dışı neresini atladım hala çözemedim
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: breathness - 22 Aralık 2011, 20:31:20
(http://c1112.hizliresim.com/s/q/18xfx.jpg) (http://bit.ly/c25MCx)


http://www.dosya.tc/server8/IlRQaS/Kumbra_al__maBAl_kesiR.rar.html (http://www.dosya.tc/server8/IlRQaS/Kumbra_al__maBAl_kesiR.rar.html)


dosyaları eklemeyi unutmuşum şöyle, yani aldığım devre şemasımı yanlış tübitakda geçiyor gerçi kesin ben yanlış bağlamışımdır simülasyonla gerçek arasında çok fark var herhal
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: haydarpasamikro - 22 Aralık 2011, 22:41:18
cny17 ler önlerine engel gelirse çıkış kollektörü 0 olur ve 7414 not işlemi sonunda pic portlarına 1 gelmiş olur. Yani isis te bunu canlandırmak için bir butonla porta 5V verebilirsin. Butona basınca 5v, basmazsa 10k pulldown direnci ile eksi vermen gerek. Şemada dirençleri butondan önce eksiye vermişsin.Hata! Butondan sonra port ile eksi arasına gelmesi gerekirdi. Rb3 deki butonda da benzer sıkıntı var. Bunları düzeltirsen gerisi programı istediğin gibi ayarla. ben denedim ok.
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: breathness - 24 Aralık 2011, 15:22:48

Hocam çok başınızı ağrıttım ama sizin verdiğiniz kodları Whıle sonsuz döngüsüyle yaptım devreyi düzelttim  butonları pull up pull down yerlerini dğeiştirdim çalıştırdım çalışma modunda iken sadece buton bir çalışıyor oda kararsız bir kere basıyorum 15 arttırıyor ikinciye basıyorum değer değişmiyor mcRL ucu boş ondanmı dedim orayı doldurdum, nerede hata yapıyorum bir türlü çözemedim   


(http://b1112.hizliresim.com/s/s/1b3qg.jpg) (http://bit.ly/c25MCx)

@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT

DEFINE LCD_DREG PORTB       'LCD DATA PORTU
DEFINE LCD_DBIT 4           'LCD DATA BASLANGID PORT NO 
DEFINE LCD_RSREG PORTB      'LCD RS PORTU 
DEFINE LCD_RSBIT 2          'LCD RS PORT NO   
DEFINE LCD_EREG PORTB       'LCD ENABLE PORTU
DEFINE LCD_EBIT 1           'LCD ENABLE PORT NO
DEFINE LCD_BITS 4           'DATA BIT SAYISI 
DEFINE LCD_LINES 2          'LCD SATIR SAYISI 
DEFINE LCD_COMMANDUS 2000   'LCD KOMUT BEKLEME SURESI   
DEFINE LCD_DATAUS 50        'LCD DATA BEKLEME SURESI   
   
SYMBOL SENSOR=PORTA.0       'PORTB.0 PARA SENSORU 0 --> 1 GEÇISTE AKTIF
SYMBOL SENSORQ=PORTA.1 
SYMBOL SENSORW=PORTA.2 
SYMBOL SENSORE=PORTA.3 
SYMBOL SENSORR=PORTA.4 
SYMBOL SENSORT=PORTB.0 
SYMBOL SIFIRLA=PORTB.3      'SIFIRLAMA GIRISI PORTB.3         
SAYAC VAR WORD               


    CMCON = 7

   TRISA=%11111111                         
    TRISB=%10010000
    READ 0,SAYAC                        'ILK ACILISTA EEPROMUN 0.ADRESI SAYAC DEGERINI OKU
    LCDOUT $FE,1,"KUMBARA FONU:)"       'ILK KARSILAMA EKRANI
    LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC  'EPROMDAKI DEGERI EKRAN ALT SATIRA YAZ 3 BASAMAK DESIMAL   
   
BASLA:                                  'SONSUZ DONGU
                                                                 
        IF SENSOR==1 THEN                               'EGER SENSOR AKTIF ISE
            SAYAC = SAYAC + 1                           'SAYACI ARTIR
            LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC          'LCD ALT EKRANA SAYACI YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SENSOR ==1                            'SENSOR 0 SIFIRA     
            WEND                                        'DONENE KADAR BEKLE
             
        ENDIF
       
          IF SENSORQ==1 THEN                               'EGER SENSOR AKTIF ISE
            SAYAC = SAYAC + 5                           'SAYACI ARTIR
            LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC          'LCD ALT EKRANA SAYACI YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SENSOR ==1                            'SENSOR 0 SIFIRA     
            WEND                                        'DONENE KADAR BEKLE
             
        ENDIF
       
          IF SENSORW==1 THEN                               'EGER SENSOR AKTIF ISE
            SAYAC = SAYAC + 10                           'SAYACI ARTIR
            LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC 
            pause 3000        'LCD ALT EKRANA SAYACI YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SENSOR ==1                            'SENSOR 0 SIFIRA     
            WEND                                        'DONENE KADAR BEKLE
             
        ENDIF
       
          IF SENSORE==1 THEN                               'EGER SENSOR AKTIF ISE
            SAYAC = SAYAC + 25                           'SAYACI ARTIR
            LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC          'LCD ALT EKRANA SAYACI YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SENSOR ==1                            'SENSOR 0 SIFIRA     
            WEND                                        'DONENE KADAR BEKLE
             
        ENDIF
       
          IF SENSORR==1 THEN                               'EGER SENSOR AKTIF ISE
            SAYAC = SAYAC + 50                           'SAYACI ARTIR
            LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC          'LCD ALT EKRANA SAYACI YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SENSOR ==1                            'SENSOR 0 SIFIRA     
            WEND                                        'DONENE KADAR BEKLE
             
        ENDIF
       
          IF SENSORT==1 THEN                               'EGER SENSOR AKTIF ISE
            SAYAC = SAYAC + 100                           'SAYACI ARTIR
            LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC          'LCD ALT EKRANA SAYACI YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SENSOR ==1                            'SENSOR 0 SIFIRA     
            WEND                                        'DONENE KADAR BEKLE
             
        ENDIF
       
       
       
        IF SIFIRLA==1 THEN                              'EGER SIFIRLAMA GIRISI AKTIF ISE (1)
            SAYAC = 0                                   'AKTIF ISE SAYACI SIFIRLA
            LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC          'EKRANA YAZ
            WRITE 0,SAYAC                               'SAYACI EEPROMA YAZ
            WHILE SIFIRLA==1                            'SIFIRLAMA GIRISI PASIF OLANAN KADAR BEKLE
            WEND
        ENDIF
          GOTO BASLA
               



her para deliği için kodları kopyalarken bir yerde dizin hatası oldu herhal


hatta üstüne sizinkilerle kendiminkileri karıştırıp bir kod yazdım aşağıda microcode de hata vermeden derledi bu seferde ekranda kurus=00000 Hiç butona basmadan daha 100er 100er saymaya geçiyor
İnsanın beynini sudokudan daha fazla yoran birşeymiş bu iş bunu anladım



@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT

DEFINE LCD_DREG PORTB       'LCD DATA PORTU
DEFINE LCD_DBIT 4           'LCD DATA BASLANGID PORT NO 
DEFINE LCD_RSREG PORTB      'LCD RS PORTU 
DEFINE LCD_RSBIT 2          'LCD RS PORT NO   
DEFINE LCD_EREG PORTB       'LCD ENABLE PORTU
DEFINE LCD_EBIT 1           'LCD ENABLE PORT NO
DEFINE LCD_BITS 4           'DATA BIT SAYISI 
DEFINE LCD_LINES 2          'LCD SATIR SAYISI 
DEFINE LCD_COMMANDUS 2000   'LCD KOMUT BEKLEME SURESI   
DEFINE LCD_DATAUS 50        'LCD DATA BEKLEME SURESI   
   
SYMBOL SENSOR=PORTA.0       'PORTB.0 PARA SENSORU 0 --> 1 GEÇISTE AKTIF
SYMBOL SENSORQ=PORTA.1 
SYMBOL SENSORW=PORTA.2 
SYMBOL SENSORE=PORTA.3 
SYMBOL SENSORR=PORTA.4 
SYMBOL SENSORT=PORTB.0 
SYMBOL SIFIRLA=PORTB.3      'SIFIRLAMA GIRISI PORTB.3         
SAYAC VAR WORD               'PARA SAYACINI TUT HAFIZADA 1 BYTE 0-255 ARASI


    CMCON = 7
    TRISA=%11111111                         'SIFIRLAMA GIRISI
    TRISB=%10010000                  'SENSOR PINI PORTB.0 GIRIS
    READ 0,SAYAC                        'ILK ACILISTA EEPROMUN 0.ADRESI SAYAC DEGERINI OKU
    LCDOUT $FE,1,"KUMBARA FONU:)"       'ILK KARSILAMA EKRANI
    LCDOUT $FE,$C0,"SAYAC=",DEC5 SAYAC




PARA VAR WORD




LCDOUT $FE,1,"DIGITAL KUMBARA" 
PAUSE 200


BASLA:


IF SIFIRLA=1 THEN BOSALT   
     
IF SENSOR=1 THEN PARA=PARA+1                 
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para




IF SENSORQ=1 THEN PARA=PARA+5         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para




IF SENSORW=1 THEN PARA=PARA+10         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para




IF SENSORE=1 THEN PARA=PARA+25         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para




IF SENSORR=1 THEN PARA=PARA+50         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para




IF SENSORT=1 THEN PARA=PARA+100         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para




GOTO BASLA               
BOSALT: 
WRITE 0,0
LCDOUT $FE,$C0,"kurus=",DEC5 para
GOTO BASLA
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: haydarpasamikro - 24 Aralık 2011, 16:19:57
IF SENSOR=1 THEN PARA=PARA+1                 
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para

ve altındaki buton testlerini şöyle yap.

IF SENSORx=1 THEN                                 //x HERNHANGİ TEST ETTİĞİN SENSÖR
    PARA=PARA+1                 
    WRITE 0,PARA
    LCDOUT $FE,$C0,"kurus=",DEC5 para
BIRAKMADIx:
   IF SENSORX=1 THEN GOTO BIRAKMADIx       //TUŞU BIRAKMASINI BEKLE. TUŞA BIRAKINCA DEVAM ET.
ENDIF

Yukarıda görüldüğü gibi tuşu basılınca işlem mikrosaniyeler hızında mikro tarafından yürütülür. Tuşu bırakmasını dahi doğrusu sensörün eski konuma dönmesi beklenir. Yoksa birçok kez aynı işi yapar. Ekranda yüzlerce kez if bloğuna girmiş olur.
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: haydarpasamikro - 24 Aralık 2011, 16:31:56
bir de 6 tane pullup dirençlerini butonları sağ tarafına al. yani direk portlara gelmesi lazım. öbür tek duran butona bağlı direnç de direk port ile power arasına bağla.
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: breathness - 25 Aralık 2011, 22:51:39
Hocam dediğinizi yaptım birazda oynadım şöyle bir kod çıkdı Allah razı olsun bu kod aşamasını tamamladık, Allah nasip ederse okulda ares e aktarıp baskı devresini yapacağım


sonucu adım adım paylaşacağım inşallah




[/code]@ DEVICE pic16f628a, INTRC_OSC_NOCLKOUT

DEFINE LCD_DREG PORTB       
DEFINE LCD_DBIT 4           
DEFINE LCD_RSREG PORTB       
DEFINE LCD_RSBIT 2             
DEFINE LCD_EREG PORTB       
DEFINE LCD_EBIT 1           
DEFINE LCD_BITS 4             
DEFINE LCD_LINES 2           
DEFINE LCD_COMMANDUS 2000     
DEFINE LCD_DATAUS 50           

SYMBOL SIFIRLA=PORTB.3   
SYMBOL SENSOR=PORTA.0       
SYMBOL SENSORQ=PORTA.1 
SYMBOL SENSORW=PORTA.2 
SYMBOL SENSORE=PORTA.3 
SYMBOL SENSORR=PORTA.4 
SYMBOL SENSORT=PORTB.0 
               
PARA VAR WORD               


    CMCON = 7
    TRISA=%11111111                       
    TRISB=%00001001                 
                       
    LCDOUT $FE,1,"KUMBARA FONU(;"
       READ 0,para       
    LCDOUT $FE,$C0,"kurus=",DEC5 PARA





PAUSE 200


BASLA:


IF SIFIRLA=0 THEN BOSALT   
     
IF SENSOR=0 THEN PARA=PARA+1                 
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para
BIRAKMADI:
IF SENSOR=0 THEN GOTO BIRAKMADI     






IF SENSORQ=0 THEN PARA=PARA+5         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para
BIRAKMADIQ:
IF SENSORQ=0 THEN GOTO BIRAKMADIQ     






IF SENSORW=0 THEN PARA=PARA+10         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para
BIRAKMADIW:
IF SENSORW=0 THEN GOTO BIRAKMADIW     






IF SENSORE=0 THEN PARA=PARA+25         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para
BIRAKMADIE:
IF SENSORE=0 THEN GOTO BIRAKMADIE     






IF SENSORR=0 THEN PARA=PARA+50         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para
BIRAKMADIR:
IF SENSORR=0 THEN GOTO BIRAKMADIR     






IF SENSORT=0 THEN PARA=PARA+100         
WRITE 0,PARA
LCDOUT $FE,$C0,"kurus=",DEC5 para
BIRAKMADIT:
IF SENSORT=0 THEN GOTO BIRAKMADIT     


GOTO BASLA


BOSALT:               
PARA=0
WRITE 0,0                                 
LCDOUT $FE,$C0,"kurus=",DEC5 PARA         
                                 
GOTO BASLA

Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: breathness - 02 Ocak 2012, 18:36:44

[size=78%](http://d1201.hizliresim.com/t/2/1jqx5.jpg) (http://bit.ly/c25MCx)[/size]


areside çizdim bol atlamalı oldu maşallah bugün bastım dirençleri soketleri koydum kutu kapağına lcd ve sensörleri koyması kaldı sadece cn70 sensöründede bir diyot bir foto transistor var iki EKSİ yi birleştirdim diğerlerinide devre şemasına göre bağladım devamıda gelecek inşallah


HOcam Bİrtanesiniz,
Başlık: Ynt: C ile Pic basic arası Bir soru
Gönderen: haydarpasamikro - 02 Ocak 2012, 21:12:38
Katkımız olduysa ne mutlu bize. Başarılar..