16f877 resetlenmiyor

Başlatan mikro29, 29 Aralık 2005, 13:54:05

mikro29

ISIS de 877 ile yaptığım program gayet iyi çalışıyor herhangi bi problem yok yalnız gerçek ortamda picin içine hex i atıp çalıştırdığımda pic e reset atamıyorum ama devre gayet normal çalışıyor problem yok 1. bacağına 4k7 direnç bağlı birde program rastgele yerden başlıyor...
ETE hocaya  TEŞEKKÜRLERİMİ SUNARIM programı  onun yardımlarıyla hazırladım..
PORTA=0:PORTB=0:PORTC=0:PORTD=0:PORTE=0
TRISA=0  
TRISB=%00111111   
TRISC=0           
TRISD=%00000000
TRISE=0
'-----------------------------------------------------------------
@ DEVICE PIC16F877                                            
@ DEVICE PIC16F877, WDT_OFF      
@ DEVICE PIC16F877, PWRT_ON      
@ DEVICE PIC16F877, PROTECT_OFF 
@ DEVICE PIC16F877, XT_OSC          
'-----------------------------------------------------------------
symbol YATAY_1=portC.0
symbol YATAY_2=portC.1
symbol YATAY_3=portC.2
symbol YATAY_4=portC.3
symbol YATAY_5=portC.4
symbol YATAY_6=portC.5
symbol YATAY_7=portC.6
symbol YATAY_8=portC.7

symbol DIKEY_1=portb.0
symbol DIKEY_2=portb.1
symbol DIKEY_3=portb.2
symbol DIKEY_4=portb.3
symbol DIKEY_5=portb.4
SYMBOL YETKI=portb.5
SYMBOL CIKIS=portd.7
SAYI   var WORD
SAYAC  VAR WORD
BIRLER VAR WORD
ONLAR  VAR WORD
HANE   VAR WORD
YUZLER VAR WORD
TEMP   var WORD
TUS    VAR WORD
ILK    VAR WORD
SIREN VAR BIT
SAYI=000
YETKI=0
OPTION_REG.7=0
ADCON1 = 1 
 BASLA:
      SAYI=000
      GOSUb TUSAL
      GOSUB GOSTER
      PAUSE 100
      GOTO BASLA
TUSAL:
     SAYI=0:ILK=0
     LOW YATAY_1
    if DIKEY_1=0 then
      GOSUB GECIKME
      tus=101:GOSUB HESAP
    endif
    
    if DIKEY_2=0 then
    GOSUB GECIKME
    tus=102:GOSUB HESAP
    endif
    
    if DIKEY_3=0 then
    GOSUB GECIKME
    tus=103:GOSUB HESAP
    endif
    
    if DIKEY_4=0 then
    GOSUB GECIKME
    tus=104:GOSUB HESAP       
    endif

    if DIKEY_5=0 then
    GOSUB GECIKME
    tus=105:GOSUB HESAP       
    endif
    high YATAY_1
'----------------------------
    LOW YATAY_2
    if DIKEY_1=0 then
      GOSUB GECIKME
      tus=106:GOSUB HESAP
    endif
    
    if DIKEY_2=0 then
    GOSUB GECIKME
    tus=107:GOSUB HESAP
    endif
    
    if DIKEY_3=0 then
    GOSUB GECIKME
    tus=108:GOSUB HESAP
    endif
    
    if DIKEY_4=0 then
    GOSUB GECIKME
    tus=109:GOSUB HESAP       
    endif

    if DIKEY_5=0 then
    GOSUB GECIKME
    tus=201:GOSUB HESAP       
    endif
    high YATAY_2
'----------------------------
 LOW YATAY_3
    if DIKEY_1=0 then
      GOSUB GECIKME
      tus=202:GOSUB HESAP
    endif
    
    if DIKEY_2=0 then
    GOSUB GECIKME
    tus=203:GOSUB HESAP
    endif
    
    if DIKEY_3=0 then
    GOSUB GECIKME
    tus=204:GOSUB HESAP
    endif
    
    if DIKEY_4=0 then
    GOSUB GECIKME
    tus=205:GOSUB HESAP       
    endif

    if DIKEY_5=0 then
    GOSUB GECIKME
    tus=206:GOSUB HESAP       
    endif
    high YATAY_3
 '----------------------------
  LOW YATAY_4
    if DIKEY_1=0 then
      GOSUB GECIKME
      tus=207:GOSUB HESAP
    endif
    
    if DIKEY_2=0 then
    GOSUB GECIKME
    tus=208:GOSUB HESAP
    endif
    
    if DIKEY_3=0 then
    GOSUB GECIKME
    tus=209:GOSUB HESAP
    endif
    
    if DIKEY_4=0 then
    GOSUB GECIKME
    tus=301:GOSUB HESAP       
    endif

    if DIKEY_5=0 then
    GOSUB GECIKME
    tus=302:GOSUB HESAP       
    endif
    high YATAY_4
'----------------------------
  LOW YATAY_5
    if DIKEY_1=0 then
      GOSUB GECIKME
      tus=303:GOSUB HESAP
     endif
    
    if DIKEY_2=0 then
    GOSUB GECIKME
    tus=304:GOSUB HESAP
    while DIKEY_2=0
    wend
    endif
    
    if DIKEY_3=0 then
    GOSUB GECIKME
    tus=305:GOSUB HESAP
    endif
    
    if DIKEY_4=0 then
    GOSUB GECIKME
    tus=306:GOSUB HESAP       
    endif

    if DIKEY_5=0 then
    GOSUB GECIKME
    tus=307:GOSUB HESAP       
    endif
    high YATAY_5
'----------------------------
 LOW YATAY_6
    if DIKEY_1=0 then
      GOSUB GECIKME
      tus=308:GOSUB HESAP
    endif
    
    if DIKEY_2=0 then
    GOSUB GECIKME
    tus=309:GOSUB HESAP
    while DIKEY_2=0
    wend
    endif
    
    if DIKEY_3=0 then
    GOSUB GECIKME
    tus=401:GOSUB HESAP
    endif
    
    if DIKEY_4=0 then
    GOSUB GECIKME
    tus=402:GOSUB HESAP       
    endif

    if DIKEY_5=0 then
    GOSUB GECIKME
    tus=403:GOSUB HESAP       
    endif
    high YATAY_6
'----------------------------
 LOW YATAY_7
    if DIKEY_1=0 then
      GOSUB GECIKME
      tus=404:GOSUB HESAP
    endif
    
    if DIKEY_2=0 then
    GOSUB GECIKME
    tus=405:GOSUB HESAP
    endif
    
    if DIKEY_3=0 then
    GOSUB GECIKME
    tus=406:GOSUB HESAP
    endif
    
    if DIKEY_4=0 then
    GOSUB GECIKME
    tus=407:GOSUB HESAP       
    endif

    if DIKEY_5=0 then
    GOSUB GECIKME
    tus=408:GOSUB HESAP       
    endif
    high YATAY_7
'----------------------------
  LOW YATAY_8
    if DIKEY_1=0 then
      GOSUB GECIKME
      tus=409:GOSUB HESAP
    endif
    
    if DIKEY_2=0 then
    GOSUB GECIKME
    tus=501:GOSUB HESAP
    endif
    
    if DIKEY_3=0 then
    GOSUB GECIKME
    tus=502:GOSUB HESAP
    endif
    
    if DIKEY_4=0 then
    GOSUB GECIKME
    tus=503:GOSUB HESAP       
    while DIKEY_4=0
    wend
    endif

    if DIKEY_5=0 then
    GOSUB GECIKME
    tus=504:GOSUB HESAP       
    endif
    high YATAY_8
'----------------------------
    RETURN

GECIKME:
    PAUSE 1
    RETURN   

HESAP:   
    IF ILK=0 THEN 
    SAYI=0
      HIGH PORTD.7
    ENDIF  
  
    gosub goster
    RETURN
   
GOSTER:
      BIRLER=SAYI DIG 0
      ONLAR= SAYI DIG 1
      YUZLER=SAYI DIG 2
    
      PORTD=240 | BIRLER         
      LOW PORTD.4
      PAUSE 1
      HIGH PORTD.4
      PAUSE 1
      
      PORTD=240 | ONLAR         
      LOW PORTD.5
      PAUSE 1
      HIGH PORTD.5
      PAUSE 1                                     
      
      PORTD=240 | YUZLER         
      LOW PORTD.6
      PAUSE 1
      HIGH PORTD.6
      PAUSE 1 
      RETURN

ete

Programda gördüğüm kadarı ile ADC işlemi yapmıyorsun. Bu durumda analog girişleri digital giriş çıkış şeklinde ayarlamalısın. Bunun yolu da
ADCON1 = 7
demen gerekir.
Halbuki sen
ADCON1 = 1
demişsin. Buda A portundan bazı girişleri analog kullanacaksın anlamına geliyor. Her ne kadar A portunu kullanmasanda bu komutu düzeltmeni tavsiye ederim.

MCLR pin'i reset bacağıdır biliyorsun. Normalde bu bacak 4K7 direnç ile +5V 'a bağlıdır. Bu bacağa bir tuş bağlayıp tuşun diğer ucunu GND ye bağlarsan ve tuşa bastığın vakit MCLR bacağına çok kısa bir sürede GND tatbik etmiş olur isen pic resetlenir ve program yeni baştan başlar. Rast gele yerlerden başlamaz kesinlikle.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mikro29

MCLR ucunu +5 v bağlı ama her enerji verdiğimde displaya 255 yazıyor
hex isis te gayet normal çalışıyor ama hex i pice attığımda böyle yapıyor reset butonuna bastığımda yine tekrar 255 e geri dönüyor

ete

Bu olayın sebebi, Pic in besleme bacaklarına atman gereken 100nf kondansatör. Pic in besleme bacaklarına en yakın yere 1 adet 100 nf kondansatör at hata düzelecektir.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mikro29

kondansatorde bağlı yine aynı şeyi yapıyor displaya 255 yazıyor

ete

Yukarıda yazdığın şekli ile programın çalışmaması gerekir. Zira hata var.
Sen nasıl isis de çalıştırıyorsun merak ettim doğrusu.

HESAP:
başlığını şöyle düzeltmen gerekir;
HESAP:
IF ILK=0 THEN
SAYI=0
gosub goster
HIGH PORTD.7
return
ENDIF
SAYI=TUS
gosub goster
RETURN


ayrıca programın hemen baş tarafına;
BASLA: satırından bir önceye; aşağıdakileri ilave et,

SAYI=0
GOSUB GOSTER


Kolay gelsin
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ete

Aslında baktımda epeyce hata var programda.
Düzeltilmiş şekli aşağıdadır. Birde bunu yükle pic'e bakalım 255 gösterecekmi?.

PORTA=0:PORTB=0:PORTC=0:PORTD=0:PORTE=0
TRISA=0
TRISB=%00111111
TRISC=0
TRISD=0
TRISE=0

'-----------------------------------------------------------------
@ DEVICE PIC16F877
@ DEVICE PIC16F877, WDT_OFF
@ DEVICE PIC16F877, PWRT_ON
@ DEVICE PIC16F877, PROTECT_OFF
@ DEVICE PIC16F877, XT_OSC
'-----------------------------------------------------------------
symbol YATAY_1=portC.0
symbol YATAY_2=portC.1
symbol YATAY_3=portC.2
symbol YATAY_4=portC.3
symbol YATAY_5=portC.4
symbol YATAY_6=portC.5
symbol YATAY_7=portC.6
symbol YATAY_8=portC.7

symbol DIKEY_1=portb.0
symbol DIKEY_2=portb.1
symbol DIKEY_3=portb.2
symbol DIKEY_4=portb.3
symbol DIKEY_5=portb.4
SYMBOL YETKI=portb.5
SYMBOL CIKIS=portd.7
SAYI   var WORD
SAYAC  VAR WORD
BIRLER VAR WORD
ONLAR  VAR WORD
HANE   VAR WORD
YUZLER VAR WORD
'TEMP   var WORD
TUS    VAR WORD
ILK    VAR WORD
SIREN  VAR BIT
SAYI=0
YETKI=0
OPTION_REG.7=0
ADCON1 = 7
SAYI=0
GOSUB GOSTER
'---------------------------------------------------------------------------
BASLA:
GOSUb TUSAL
GOSUB GOSTER
PAUSE 100
GOTO BASLA
'--------------------------------------------------------------------------
TUSAL:
SAYI=0
LOW YATAY_1
if DIKEY_1=0 then
GOSUB GECIKME
SAYI=101
endif

if DIKEY_2=0 then
GOSUB GECIKME
SAYI=102
endif

if DIKEY_3=0 then
GOSUB GECIKME
SAYI=103
endif

if DIKEY_4=0 then
GOSUB GECIKME
SAYI=104
endif

if DIKEY_5=0 then
GOSUB GECIKME
SAYI=105
endif
high YATAY_1
'----------------------------
LOW YATAY_2
if DIKEY_1=0 then
GOSUB GECIKME
SAYI=106
endif

if DIKEY_2=0 then
GOSUB GECIKME
SAYI=107
endif

if DIKEY_3=0 then
GOSUB GECIKME
SAYI=108
endif

if DIKEY_4=0 then
GOSUB GECIKME
SAYI=109
endif

if DIKEY_5=0 then
GOSUB GECIKME
SAYI=201
endif
high YATAY_2

'----------------------------
LOW YATAY_3
if DIKEY_1=0 then
GOSUB GECIKME
SAYI=202
endif

if DIKEY_2=0 then
GOSUB GECIKME
SAYI=203
endif

if DIKEY_3=0 then
GOSUB GECIKME
SAYI=204
endif

if DIKEY_4=0 then
GOSUB GECIKME
SAYI=205
endif

if DIKEY_5=0 then
GOSUB GECIKME
SAYI=206
endif
high YATAY_3
'----------------------------
LOW YATAY_4
if DIKEY_1=0 then
GOSUB GECIKME
SAYI=207
endif

if DIKEY_2=0 then
GOSUB GECIKME
SAYI=208
endif

if DIKEY_3=0 then
GOSUB GECIKME
SAYI=209
endif

if DIKEY_4=0 then
GOSUB GECIKME
SAYI=301
endif

if DIKEY_5=0 then
GOSUB GECIKME
SAYI=302
endif
high YATAY_4
'----------------------------
LOW YATAY_5
if DIKEY_1=0 then
GOSUB GECIKME
SAYI=303
endif

if DIKEY_2=0 then
GOSUB GECIKME
SAYI=304
endif

if DIKEY_3=0 then
GOSUB GECIKME
SAYI=305
endif

if DIKEY_4=0 then
GOSUB GECIKME
SAYI=306
endif

if DIKEY_5=0 then
GOSUB GECIKME
SAYI=307
endif
high YATAY_5
'----------------------------
LOW YATAY_6
if DIKEY_1=0 then
GOSUB GECIKME
SAYI=308
endif

if DIKEY_2=0 then
GOSUB GECIKME
SAYI=309
endif

if DIKEY_3=0 then
GOSUB GECIKME
SAYI=401
endif

if DIKEY_4=0 then
GOSUB GECIKME
SAYI=402
endif

if DIKEY_5=0 then
GOSUB GECIKME
SAYI=403
endif
high YATAY_6
'----------------------------
LOW YATAY_7
if DIKEY_1=0 then
GOSUB GECIKME
SAYI=404
endif

if DIKEY_2=0 then
GOSUB GECIKME
SAYI=405:
endif

if DIKEY_3=0 then
GOSUB GECIKME
SAYI=406
endif

if DIKEY_4=0 then
GOSUB GECIKME
SAYI=407
endif

if DIKEY_5=0 then
GOSUB GECIKME
SAYI=408
endif
high YATAY_7
'----------------------------
LOW YATAY_8
if DIKEY_1=0 then
GOSUB GECIKME
SAYI=409
endif

if DIKEY_2=0 then
GOSUB GECIKME
SAYI=501
endif

if DIKEY_3=0 then
GOSUB GECIKME
SAYI=502
endif

if DIKEY_4=0 then
GOSUB GECIKME
SAYI=503
endif

if DIKEY_5=0 then
GOSUB GECIKME
SAYI=504
endif
high YATAY_8
'----------------------------
RETURN

GECIKME:
PAUSE 10
RETURN

GOSTER:
'PORTD=240
BIRLER=SAYI DIG 0
ONLAR= SAYI DIG 1
YUZLER=SAYI DIG 2

PORTD=240 | BIRLER
LOW PORTD.4
PAUSE 1
HIGH PORTD.4
PAUSE 1

PORTD=240 | ONLAR
LOW PORTD.5
PAUSE 1
HIGH PORTD.5
PAUSE 1

PORTD=240 | YUZLER
LOW PORTD.6
PAUSE 1
HIGH PORTD.6
PAUSE 1

RETURN
end


Kolay Gelsin
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

stlg

Sevgili mikro29
Arkadasım ben piclerle yaptıgım calısmalarda mclr ucuna genelde 10k direnc baglıyorum reset suresi biraz daha uzayacaktır hatta bu direnci biraz daha buyutup mclr ucu ile gnd arasına 100 nf baglayabilirsin kolay gelsin

        ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

mikro29

ilginize çok teşekkür ederim ....
olayı çözdüm...

ete

@Micro29,
Birde olayı nasıl çözdüğünü burada açıklasa idin her şey dört dörtlük olacak idi. Bu açıklamayı bizden neden esrgedin anlayamadım. halbuki burada senden daha büyük bir merakla sonucu bekliyor idim.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com