avatar_anlhlc

16f628a a.4 portunu cikis olarak kullanma

Başlatan anlhlc, 01 Temmuz 2013, 23:36:09

ete

Porta nın rastgele açılmasından kaynaklanır. Programın baş taraflarına portA=0 komut satırını ilave ediver. Şayet sigorta ayarlarında powerontimer on ise onuda off yap.
Ete

anlhlc

Hocam hersey dedigin gibi ama sorun devam ediyor

ete


anlhlc

Hocam programim Soyle


@ DEVICE PIC16F628A
@ DEVICE PIC16F628A, MCLR_OFF

TRISA=%100000
TRISB=%00000000

PORTA=0
PORTB=0


I VAR word
SYMBOL TUS=PORTA.5
SYMBOL VALF=PORTB.2
SYMBOL SIFIR=PORTB.0
SYMBOL BIR=PORTA.2
SYMBOL IKI=PORTB.6
SYMBOL UC=PORTA.1
SYMBOL DORT=PORTA.3
SYMBOL BES=PORTB.5
SYMBOL ALTI=PORTA.0
SYMBOL YEDI=PORTA.4
SYMBOL SEKIZ=PORTB.4
SYMBOL DOKUZ=PORTB.7
SYMBOL ARA=PORTB.3
SYMBOL GERI=PORTB.1                                       

BASLA:
porta=0
PORTB=0
low VALF
IF TUS=1 THEN GOTO ARAMA

GOTO BASLA

ARAMA:

WHILE TUS=1
pause 5000
WEND
'---------------------------------
HIGH GERI
PAUSE 300
LOW GERI
PAUSE 400
HIGH GERI
PAUSE 300
LOW GERI
PAUSE 400
'-----------------------------------
HIGH SIFIR
PAUSE 400
LOW SIFIR
PAUSE 400
HIGH BES
PAUSE 400
LOW BES
PAUSE 400
HIGH DORT
PAUSE 400
LOW DORT
PAUSE 400
HIGH DORT
PAUSE 400
LOW DORT
PAUSE 400
HIGH DORT
PAUSE 400
LOW DORT
PAUSE 400
HIGH YEDI
PAUSE 400
LOW YEDI
PAUSE 400
HIGH UC
PAUSE 400
LOW UC
PAUSE 400
HIGH ALTI
PAUSE 400
LOW ALTI
PAUSE 400
HIGH BES
PAUSE 400
LOW BES
PAUSE 400
HIGH UC
PAUSE 400
LOW UC
PAUSE 400
HIGH SEKIZ
PAUSE 400
LOW SEKIZ
PAUSE 400
HIGH ARA
PAUSE 400
LOW ARA
PAUSE 400

'--------------------------------

HIGH VALF
PAUSE 10
for I=1 TO 60
IF TUS=1 THEN GOTO DURDUR
PAUSE 500
NEXT I

GOTO BASLA
'---------------------------------

DURDUR:
LOW VALF
WHILE TUS=1
WEND
PAUSE 5000

GOTO BASLA

END

ete

Programında sigorta ayarları eksik gözüküyor.
Hangi osilatör ile çalıştığı belli değil. Dahili osc ile çalışıyor ise nasıl çalışacak.
TRISA=xxxx komutuna yalnızca 5 bit yazmışsın bu 8 bit olmalı.
Programa bir açılış gecikmesi eklenmesi gerekir.
Programın BASLA satırına kadar olan ksımı şöyle olmalı;



@ DEVICE PIC16F628
@ DEVICE PIC16F628, WDT_ON
@ DEVICE PIC16F628, PWRT_OFF
@ DEVICE PIC16F628, PROTECT_OFF
@ DEVICE PIC16F628, MCLR_OFF
@ DEVICE PIC16F628, INTRC_OSC_NOCLKOUT

DEFINE OSC 4

CMCON=7  'KOMPARATÖR PİNLERİ İPTAL
PORTA=0 : TRISA=%00100000
PORTB=0: TRISB=%00000000

I VAR word
SYMBOL TUS=PORTA.5
SYMBOL VALF=PORTB.2
SYMBOL SIFIR=PORTB.0
SYMBOL BIR=PORTA.2
SYMBOL IKI=PORTB.6
SYMBOL UC=PORTA.1
SYMBOL DORT=PORTA.3
SYMBOL BES=PORTB.5
SYMBOL ALTI=PORTA.0
SYMBOL YEDI=PORTA.4
SYMBOL SEKIZ=PORTB.4
SYMBOL DOKUZ=PORTB.7
SYMBOL ARA=PORTB.3
SYMBOL GERI=PORTB.1                                       

PAUSE 500

BASLA:


Ete

anlhlc

Hocam cok tesekkurler aksAM DENeyecegim 4 mhz kristal kullaniyorum dahili degil iyi ki varsiniz sayenizde bi seyler ogrenmeye calisiyoruz kolay gelsin

muyat

#21
PORTA.4 Pinine resimdeki gibi baglantı yaparak led sürdüm.Kristal falan da kullanmadım.Diger pinler de 1k dirençle BC337 e baglı.Porta.4'ün ismini ONUC yaptım.Problemim şu:
Aşagıdaki yazılımda porta.4 yani onuc ismindeki led yandıktan sonra 5 saniye bekletiyorum.Sonrasında onn ismindeki  led yanması gerekirken yanıyor ama onuc ismindeki led nedenini bilmedigim bir şekilde hemen sönüyor.Halbuki sönmemesi gerekli.Bunun nedeni nedir?Konuyla ilgili oldugu için ayrı bir konu açmak istemedim.Sabahtan beri buna ugraşıyorum




@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_OFF &_MCLRE_OFF & _BODEN_OFF & _CP_ON & _LVP_OFF 

CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
DEFINE OSC 4

PORTA=0 : TRISA=%00100000
PORTB=0: TRISB=%00000000

BIR VAR PORTB.2
IKI VAR PORTB.1
UC VAR PORTB.3
DORT VAR PORTB.0
BES VAR PORTB.4
ALTI VAR PORTB.5           
YEDI VAR PORTB.6
SEKIZ VAR PORTB.7
DOKUZ VAR PORTA.0
ONN VAR PORTA.1
ONBIR VAR PORTA.7
ONIKI VAR PORTA.6
ONUC VAR PORTA.4
ONDORT VAR PORTA.3
ONBES VAR PORTA.2
GIRIS VAR PORTA.5
SURE1 VAR WORD
SURE2 VAR WORD
PARAZIT VAR WORD
PAUSE 500


BASLA:
SURE1=100

SURE2=1000
ONIKI=1
PAUSE SURE2
ONUC=1
PAUSE 5000
ONN=1
PAUSE SURE2
BES=1
PAUSE SURE2
LOW ONIKI
PAUSE SURE2
LOW ONUC
PAUSE SURE2
LOW ONN
PAUSE SURE2
LOW BES
PAUSE SURE2
GOTO BASLA
END

F®T


ONUC=1

BASLA:
SURE1=100

SURE2=1000
ONIKI=1
PAUSE SURE2
ONUC=0
PAUSE 5000
ONUC=1
ONN=1
PAUSE SURE2
BES=1
PAUSE SURE2
LOW ONIKI
PAUSE SURE2
LOW ONUC
PAUSE SURE2
LOW ONN
PAUSE SURE2
LOW BES
PAUSE SURE2
GOTO BASLA
END


BÖYLE DENE BAKALIM
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

muyat

Hocam sizin yazılımı denedim.A.4 pinindeki led bu sefer hiç bi şekılde yanmıyor.Yine olmadı

muyat

#24
Uzun ugraşlar sonucu sorunun pull up da kullanılan direnç ve transistörün beyz direnciyle alakalı bi durum oldugunu anladım.Bu dirençler yanlış olursa anladıgım kadarıyla o pin sürekli çıkış veriyor veya hiç çıkış vermiyor.
Bu durumda bc337 için direnç degerleri ne olmalı.Röle çektirmicem.Çıkışta ledler yanıcak

ete

#25
Bu sorunun iki farklı sebebi olabilir.
Birincisi transistörü süren base gerilimi yada akımı yeterli gelmediğinden dolayı portdaki en ufak bir değişiklik transistörün yeniden kesime gitmesine sebep oluyordur. Anlamak için porta.4 de bağlı 330 ohm u kaldır base direk bağlı olsun. Tekrar dene sorun devam ediyor ise 1k lık pullup direncini 470 ohm yap yine sorun var ise o zaman sorun diğeridirki oda open collector olan bu port için tek pin bazı da aç kapa komutu vermemek gerekir. Örnek vermek gerekir ise,
Potta.4 pinini aktif etmek için,
PortA=PortA |  %00010000
Aynı pini reset etmek için ise
PortA=PortA & %11101111
Komutları kullanılmalıdır.
Bunları dene bakalım.

Ete

EDİT: Ben denedim faydası olmuyor. Sebebi elbette bağlantı şeklinden kaynaklanıyor. Belkide asıl sorun PORTA nın tamamından çekilebilecek akım ile alakalıdır. Çünki portA pinlerine bir şey bağlama ve yalnızca PORTA.4 pinine 220 ohm ile pullup yap o zaman sistem sorunsuz çalışıyor. Ama yük (Led) bağlayınca işler değişiyor. Sebep belliki çekilen akımla alakalı. Ama sorun şu şekilde çözülüyor.
PORTA.4 pinine 220 ohmluk bir pullup direnci bağla. Aynı pine Led'i direk bağla ama Led in Anot ucunu 120 Ohm ile GND ye bağla.
Tedbir amaçlı olarak diğer ledlerin dirençlerini 330 ohm olarak kullan.

muyat

Şöyle bi değişiklik yaptım.Sorun düzeldi gözüküyor.
BC 337 transistörünun beyz ucunda 1k direnç baglı ve direncin diger ucu porta.4 pinine baglı.
Pull up olarak 390 ohm direnç kullandım.Direncin bir ucu +5volta baglı,diğer ucu da 1k dirençle porta.4 ün kesiştigi yere baglı.
Bu şekılde sorunsuz çalışıyor.DAha dogrusu hobi olarak yaptım bu devreyi.Devrenın üzerinde gösterge ledleri var.Gösterge ledleri de çıkıştaki transistörlere baglı.Fakat asıl büyük ledleri çıkıştaki transistörlere baglayınca o zaman ne  oldugunu görecez.Problem olursa buraya yazarım.Aslında basit olan bu problemi anlayıp çözmek hemen hemen 1 günüme mal oldu ve a.4 pini problemi problemiyle ilgili bu konu google aramalarında en üstte çıkıyor.O nedenle eminim bu mesaj elbette birilerinin işine yarıyacaktır.
Direnç degeri önemli.Halbuki bazı yerlerde pull up direncinin 1k ile 10k olması gerektigini okudum ama transistör baglayınca bu dirençlerle çıkış alamıyoruz.Ete hocam tekrar teşekkürler

acemi

merhaba ete hocam     pıc in reset ayagında mclr girişinde  buton  bagladım  ( 10 k lık direncle + ya baglı) ayaklar yetersiz kaldigi icin bu ayagıda kullandım (12F675).
ccs c    için    #FUSES  NOMCLR      mi yoksa   #FUSES MCLR mi olması gerekir   .yada eklememiz gereken kod varmı ......


birde  hocam
#FUSES   CPD           
#FUSES   PROTECT 
bu ikisi arasındaki fark nedir anlamadım kod koruma eeprom kod koruma ?
Teşekkürker

ete

Birinici sorunun cevabı NOMCLR olaması gerekir. Anlamı şu, o pini MCLR olarak değilde normal giriş olarak kullanacağım demek oluyor.
İkinci soruna gelince,
CPD  data memory koruması oluyor.
Protec dediği ise CP yada Program hafızası koruması oluyor.
Kısaca program hafızası ile data hafızası ayrı ayrı korumaya alınabiliyor.
Ete

acemi

hocam işlemcide  16mhz  kristalli bi yazılımda  delayı 350 miilisaniye   olan bir sürenin....... 8 mhz kristalli  delayı 350 yaptıgımızda sürede sapma var burası normalde şimdi ben 16 mhz de uzun süre bu delayi tutturmaya ugraştım . şimdi 8 mhz le calışcam bunu nasıl hesaplayabilriim varmı bir yolu yani 16 mhz de  350 mili saniye ? 8 mhz de kac mili saniye eder gibisinden   

Powered by EzPortal