16f870 ile ilgili.Yardım edebilecek yok mu

Başlatan GamzeDemir, 12 Mart 2008, 16:29:15

GamzeDemir

Merhaba

Ben kucuk bi prgrm da mesela bi kısmı asagıdaki gb

Alıntı YapGIRDI=0            
                       SEROUT2 PORTA.2,  396 , [SINYAL]
                       PAUSE 500
                       WHILE BUTTON==1
                           PORTC.7=1  
                           PAUSE 3000
                           GOSUB KEYP
                       WEND
                       PORTC.7=0
                   goto DEVAM
                   endif

DEVAM:

Bu prgramda PORTC.7 çıkış olarak tanımlanmış ve ilk deger olarak PORTC=0 ile temizlenmiştir.
Sonrasında yukarıdaki programa geliyor işte PORTC.7=1 olduktan sonra en az 3 sn 1(high) da durması gerekirken oscilloscopeda sadece anlık bir (high) goruyorum sonrasında hemen dusuuyor yani acaba bu 16f870 deki portc nin 7.bacagının benim bilmediğim bi özelliği mi var yani datasheet i ne baktım sadece usart için RX oldugunu söylüyor ama bu  benim programımda boyle calısmasını gerektirir mi  :?

Bi fikri olan var mı lütfen yardımlarını bekliyorum  :idea:

bymrz

hocam usartın kurulu olmadıgına emin misiniz? yada portc.7 nin çıkış olarak tanımladığından  (  output portc.7 )

bunlar tamamsa programda sorun yok, çalışır. C.7 nin özel bi surumu yok. normalde anolog giriş özelliği de olsa anologu ipta etmek gerekir ama bu pinin böyle bi özelliği yok, sadece input-output-rx-dt özelikleri mevcut..

GamzeDemir

Alıntı yapılan: "alone_lover"hocam usartın kurulu olmadıgına emin misiniz? yada portc.7 nin çıkış olarak tanımladığından  (  output portc.7 )

bunlar tamamsa programda sorun yok, çalışır. C.7 nin özel bi surumu yok. normalde anolog giriş özelliği de olsa anologu ipta etmek gerekir ama bu pinin böyle bi özelliği yok, sadece input-output-rx-dt özelikleri mevcut..

Ben sadece TRISC=0 ve PORTC=0 yaptım yani baska bi ayar gerekmiyor gb geldi bana usart için özel bi ayar mı gerekiyor acaba :roll:

bymrz

hayır usartın initialize ayarları zaten kapalıdır. yani hiç bi ayar yapmadıysanız zaten kapalı olur usart..
Programınızım başlangıç kısmını da verebilir misiniz?

GamzeDemir

Alıntı yapılan: "alone_lover"hayır usartın initialize ayarları zaten kapalıdır. yani hiç bi ayar yapmadıysanız zaten kapalı olur usart..
Programınızım başlangıç kısmını da verebilir misiniz?

Tabi verebilirim buyrun:

Alıntı Yapinclude "modedefs.bas"

DEFINE OSC 4 'Oscillator speed in MHz: 3(3.58) 4

DEFINE LCD_DREG     PORTC
DEFINE LCD_DBIT     0    
DEFINE LCD_EREG     PORTC
DEFINE LCD_EBIT     5    
DEFINE LCD_RSREG    PORTC
DEFINE LCD_RSBIT    6    
DEFINE LCD_BITS     4     '
DEFINE LCD_LINES    2    


portc=0:TRISC=0
Portc.6=1 :PORTC.5=1

OPTION_REG.7=0 'pullup lar açıldı
TRISB=%11110000

;****Seri iletim ayarları******
ADCON1=%00000110 ;digital input/output
PORTA=0
TRISA=0

GIRDI VAR BYTE
SAYAC VAR BYTE
TUS VAR BYTE
SAYI  var byte
ACMA var BYTE      


acma=%10011010
SAYAC=1
GIRDI=1

pause 500 ;Lcd

MAIN:

Bundan sonra zaten altprogramlar felan var sonrasında yukarda verdiğim ilgili kodda sorun var ama sunu belirtyeim kodu proteus da simule ettiğimde normal çalışıyor yani istediğim sure c portu 1 de kalıyor sonraında 0 oluyor ama oscilloscopeda anlık bir 1 gorunuyor sonrasında hemen sıfırlıyor sinyal  :x

bymrz

programın başına şunları ekleseniz

@ device pic16f870, wdt_off
@ DEVICE pic16f870, XT_OSC


ve birde osilaskopla değil de bir led bağlayarak deneyin...

GamzeDemir

Alıntı yapılan: "alone_lover"programın başına şunları ekleseniz

@ device pic16f870, wdt_off
@ DEVICE pic16f870, XT_OSC


ve birde osilaskopla değil de bir led bağlayarak deneyin...

HOcam onları epicwin programlayıcıda sectim xt kristal ve watchdog ayarı da off su an aynı zamanda sadece analog oscilloscope deği digital de bile baktım aynı sonuc :( ne yapmam gerekiyor acaba :cry:

bymrz

isiste çalışıyosa programda sorun yok demektir(en azından bu devre için)..

Sanırım sorunun besleme ile ilgili..Sen portc.7 ile bir şeyi tetiklemeye çalışıyorsun ve bu esnada picin beslemesi kesiliyor ve reset oluyor.

bu yüzden beslemelerine biraz büyük dğerlerde kondansatör koy ve özellikle(kesinlikle)  picin artı ve eksi besleme uçları arasına 100 nf lık bir kondansatör koy..

Bunu dene ve ne oluyor görelim...

Prof.EleCTroN

Şema ve tüm kodu eklersen daha etkin yardım alabilirsin.

GamzeDemir

Alıntı yapılan: "Prof.EleCTroN"Şema ve tüm kodu eklersen daha etkin yardım alabilirsin.


Alıntı Yapinclude "modedefs.bas"

DEFINE OSC 4 'Oscillator speed in MHz:


DEFINE LCD_DREG     PORTC
DEFINE LCD_DBIT     0    
DEFINE LCD_EREG     PORTC
DEFINE LCD_EBIT     5    
DEFINE LCD_RSREG    PORTC '
DEFINE LCD_RSBIT    6    
DEFINE LCD_BITS     4    
DEFINE LCD_LINES    2    


portc=0:TRISC=0
Portc.6=1
PORTC.5=1


OPTION_REG.7=0 'pullup lar açıldı
TRISB=%11110000


ADCON1=%00000110 ;digital input/output
PORTA=0
TRISA=0

GIRDI VAR BYTE
SAYAC VAR BYTE
TUS VAR BYTE
UYE  var byte
ACMA var BYTE    


acma=%10011010
SAYAC=1
GIRDI=1

pause 500 ;Lcd hazırlanması için gecen sure

MAIN:

LCDOUT $FE,1,"UYE NO"

GOSUB KEYPAD  
GIT:
   if(TUS==14)  then    ;AC
                   pause 2000
                   gosub keypad
                   IF(TUS!=14) THEN
                       LCDOUT $FE,$C0, "HATA"
                   ELSE       ;(TUS==14)
                       GIRDI=0            
                       SEROUT2 PORTA.2,  396 , ["G","A","M","Z","E",ACMA]
                       PAUSE 500
                       WHILE TUS==14
                           PORTC.7=1  
                           PAUSE 10
                           GOSUB KEYPAD
                       WEND
                       PORTC.7=0
                   goto DEVAM
                   endif
   endif  
   
   IF(TUS>0 AND TUS<10) THEN
               PAUSE 1000
               GOSUB Keypad
               IF SAYAC=0 THEN  ;silme altprogramına girdi
                     SAYAC=1
                     GOTO GIT
                ENDIF
               if(TUS==14) THEN
                   PAUSE 1000
                   GOSUB KEYPAD
                   iF(TUS==14) THEN
                         SEROUT2 PORTA.2,  396 , ["G","A","M","Z","E",ACMA]
                    ENDIF
               ENDIF
    ENDIF
     
   DEVAM:
END
;********************KEYPAD ALT PROGRAMI******************
KEYPAD:

TUS=16
PORTB=%11111110 ;1.satır
;ve ardından dikeyleri kontrol edecegiz.
IF PORTB =%11101110 then TUS=7
IF PORTB =%11011110 then TUS=8
IF PORTB =%10111110 then TUS=9
IF PORTB =%01111110 then TUS=10

PORTB=%11111101;2.satır
IF PORTB=%11101101 then TUS=4
IF PORTB=%11011101 then TUS=5
IF PORTB=%10111101 then TUS=6
IF PORTB=%01111101 then TUS=11

PORTB=%11111011;3.satır
IF PORTB=%11101011 then TUS=1
IF PORTB=%11011011 then TUS=2
IF PORTB=%10111011 then TUS=3
IF PORTB=%01111011 then TUS=12

PORTB=%11110111;4.satır
IF PORTB=%11100111 then TUS=13 'ON/C tusu
IF PORTB=%11010111 then TUS=0
IF PORTB=%10110111 then TUS=14 '= TUSU
IF PORTB=%01110111 then TUS=15

PORTB=%11111111

IF TUS<10 THEN  LCDOUT $fe,$C0,"TUS=", Dec Tus ,"   "


IF TUS==13 THEN    ;iptal tusum
   GOSUB SILME
ENDIF

IF TUS=14 THEN LCDOUT $FE,$C0,"TUS="," =   "         ;enter tusum

IF (GIRDI=0) AND (TUS=16) THEN DEVAM2

if Tus=16 then KEYPAD

DEVAM2:    
RETURN
;***************************************************
SILME:

   LCDOUT $FE,$C0,"TUS=","ON/C   "
   LCDOUT $FE,1,"UYE NO"
   TUS=16
   SAYAC=0    
RETURN
;***************************************************

GamzeDemir

Alıntı yapılan: "alone_lover"isiste çalışıyosa programda sorun yok demektir(en azından bu devre için)..

Sanırım sorunun besleme ile ilgili..Sen portc.7 ile bir şeyi tetiklemeye çalışıyorsun ve bu esnada picin beslemesi kesiliyor ve reset oluyor.

bu yüzden beslemelerine biraz büyük dğerlerde kondansatör koy ve özellikle(kesinlikle)  picin artı ve eksi besleme uçları arasına 100 nf lık bir kondansatör koy..

Bunu dene ve ne oluyor görelim...

Aslına bakarsan tetiklemem gerekiyor ama ben ilk once programın calısıp calısmadıgından emin olmak için boşta ölçüm yaptım yani portc.7 biti hiçbişeye baglı değilken yptım ölçümü...
Genede sizin dediğiniz sorunumu çözer mi acaba  :roll:
Bu arada hersey için sağol un  ;)

bymrz

göreceğiz bakalım çözecek mi  :lol:    ;)

birde programa şu kodu ekler misin başa

DEFINE LCD_RWREG PORTA '
DEFINE LCD_RWBIT 5

Biliyorum RW sıfıra bağlı ama yinde de ekle bunuda:
Çünkü belki pic basicte lcd bacakları(ve RW için) için default ayarlar var bu da Portc.7 yi etkiliyo olabilir...

Kolay gelsin

GamzeDemir

Alıntı yapılan: "alone_lover"göreceğiz bakalım çözecek mi  :lol:    ;)

birde programa şu kodu ekler misin başa

DEFINE LCD_RWREG PORTA '
DEFINE LCD_RWBIT 5

Biliyorum RW sıfıra bağlı ama yinde de ekle bunuda:
Çünkü belki pic basicte lcd bacakları(ve RW için) için default ayarlar var bu da Portc.7 yi etkiliyo olabilir...

Kolay gelsin

Ok hocam hemen deniyorum  :D
:cry: Olmadı pic in + ve - sine 100 nf baglamıstım zaten kullandıgım 12 v dc kaynak da adaptor oldugu için sanırım  capacitor e gerek yok... ama sen gene de koy dersen degerlerini söyle koyayım.. ;)
Lcd olayı da yani yukardaki define tanımlamalar olmadı gene aynı sekilde davranıyor yanmi potc.7 anlık 1 oluyor sonra hemen dusuyor :(

GamzeDemir

Hatta ben proteus daki devre halini vereyim simule etme imkanı bulursunuz  ;)  Kodlar zaten yukarda var....

http://rapidshare.com/files/99163843/2devre.DSN.html

Yardımlarını bekliyorum lütfen... :?:

bymrz

devrede 7805 kullanıyorsun ya onun sağına ve soluna, yani girişine ve çıkışına 470 uF veya buna yakın bir değerde bir kondansatör bağla...

bunu mutlaka yapman lazım...

Sonucu bekliyorum..