16f628A PLC YAPIMI ?

Başlatan olceyy, 16 Ocak 2015, 19:27:54

rambili

--Protect_Off olması gerekiyor. Kod koruması aktif yapmamak gerekir.
Zaman su gibidir.
Bazen deli bir ırmak, bazende durgun akar.

Burak

Alıntı yapılan: olceyy - 27 Ocak 2015, 17:10:18
şu anda PORTA giriş PORTB çıkış olucak şekilde kart çizilmiştir . PORTA.3 buton ucunda devamlı test etmekteyim .opto görevini yerine getiriyor .PIC enerji geldiğini algılamakta .sorun olarak PORTBnin hangi çıkışını kullanırsam kullanıyım içindeki program her ne olursa olsun sanki cok küçük bi PAUSE komutu girilmiş gibi cok hızlı bi şekilde röleler çekip bırakıyo.aynı şekilde ledlerde yanıp sönüyo .örneğin şu an içindeki kodu ;

TRISA=%11111111
TRISB=%00000000
PORTB=0
CMCON=7

BASLA:
IF PORTA.3=0 Then YAK
GoTo BASLA

YAK:
PORTB=%00000001
Pause 1500
PORTB=%00000001
Pause 1500
PORTB=%00000001
Pause 1500
PORTB=%00000001
Pause 1500
GoTo BASLA 


PORTB çıkışı değiştirip başka bi çıkışı kullansam bile sonuç hep aynı .buton görevini görüyor çıkış olması gereken uç çıkışta veriyor ama programdaki beklemeler vs hiç bi şekilde çalışmıyor .buton aktif olduğu andan itibaren çıkış vermesi gereken röleler cok hızlı çekip bıraktığı için zırlıyor .yani şÖylede diyebiliriz PIC in içine hangi programı atarsam atayım aşağıdaki kod içindeymiş gibi pause komutu cok küçükmüş gibi ÇIKIŞ veriyor .

IF PORTA.3=0 THEN
PORTB=%0000001
PAUSE 100
WHILE PORTA.3=0
WEND
ENDIF



yorumlarınızı merakla bekliyorum ...

Dosyaları açamadım , aslında devre şemasını bir screenshot olarak versenizde olur. Röleler sürekli olarak hızlı bir şekilde durmadan çekip bırakma mı yapıyorlar yoksa bu durum bir kez mi gerçekleşiyor ?

Ayrıca reset durumunu gözlemlemek adına şu şekilde bir düzenleme yapıp durumu bir tekrar bildirin . Boş bir pin olarak ben PortB.0'ı kabul ettim.



__config_INTRC_OSC_NOCLKOUT
__config_WDT_OFF
__config_pwrt_off
__config_mclr_off
__config_lvp_off
__config_protect_off

TRISA=%11111111
TRISB=%00000000
PORTB=0
CMCON=7


PORTB=%00000001
Pause 500
PORTB=%00000000
Pause 500
PORTB=%00000001
Pause 500
PORTB=%00000000
Pause 500

ANADONGU:        '------> program  bloğu burada başlayıp
.
.
.
.
.
.
.
goto ANADONGU ' burada bitiyor.



Code protect'i off yapmanız gerek , bazı programlayıcılar işlemci bank'larını bu özellik açıksa atlıyor . Bazıları ise hiç önemsemeden bir şekilde özel bank'lara kadar modifiye yapabiliyorlar o yüzden her daim kapalı tutmakta fayda var proje bitene kadar .



Burak
Ω Gens Una Sumus Ω

olceyy

röleler normalde hareketsiz durumdalar.ne zaman butona basılıp hareket verdirmek istediğimiz zaman örneğin portbnin herhangi bir biti sürekli çıkış vermesi gerektiği halde cok hızlı bir şekilde cekip bırakıyo .halbuki yazılıımımız devamlı cekili kalması yönünde ...hıgh olması gereken hangi bit olursa olsun bu durum bu şekilde ... ekran görüntülerinide ekte veriyorum ...vermiş olduğunuz örnekteki gibi bi kod yazılldığındada pause komutunu hiç görmüyor o kendi kafasına göre hıgh ve low sürelerini hep aynı sıklıkta cekip bıraktırıyor ...sanki eproma kalıcı bi pause atanmış gibi ...sanki donanımsal bişiden dolayımış gibi geliyo bana ama ..donanımsal olarak bunu yapabilicek bişi olabilirmi ??
Bilgi Hazinedir Paylaştıkça Çoğalır...

Burak

#18
Alıntı yapılan: olceyy - 27 Ocak 2015, 20:08:42
röleler normalde hareketsiz durumdalar.ne zaman butona basılıp hareket verdirmek istediğimiz zaman örneğin portbnin herhangi bir biti sürekli çıkış vermesi gerektiği halde cok hızlı bir şekilde cekip bırakıyo .halbuki yazılıımımız devamlı cekili kalması yönünde ...hıgh olması gereken hangi bit olursa olsun bu durum bu şekilde ... ekran görüntülerinide ekte veriyorum ...vermiş olduğunuz örnekteki gibi bi kod yazılldığındada pause komutunu hiç görmüyor o kendi kafasına göre hıgh ve low sürelerini hep aynı sıklıkta cekip bıraktırıyor ...sanki eproma kalıcı bi pause atanmış gibi ...sanki donanımsal bişiden dolayımış gibi geliyo bana ama ..donanımsal olarak bunu yapabilicek bişi olabilirmi ??

Ben sizden şematik istiyorum hocam , baskı layout değil ... İkinci olarak , devrenin sıfır geçişlerine uğradığı yerlerde opto çıkışında pull-up yada pull-down olmasına göre 0 veya 5 volt olarak mcu pinine 10ms aralıklarla sinyal gidiyor... Sorunun sebebi bu ... Simülasyonda hata vermez genelde çünkü simülasyonlar gerçek zamanlı çalışmıyor .. Buna çözüm olarak pine gelen 0 yada 1 bilgisini bir timer ile belirli bir süre boyunca basılıp basılmadığını kontrol ederek çözebilirsiniz . Yada toggle kullanarak hit-on hit-off şeklinde kullanacaksınız röleleri . Aklıma başka bişi gelmiyor . Ayrıca programın tamamını paylaşın ki yardımcı olmak biraz daha kolaylaşsın bizler için.

Burak
Ω Gens Una Sumus Ω

olceyy

Alıntı yapılan: Burak GÜNAY - 27 Ocak 2015, 20:18:04
Ben sizden şematik istiyorum hocam , baskı layout değil ... İkinci olarak , devrenin sıfır geçişlerine uğradığı yerlerde opto çıkışında pull-up yada pull-down olmasına göre 0 veya 5 volt olarak mcu pinine 10ms aralıklarla sinyal gidiyor... Sorunun sebebi bu ... Simülasyonda hata vermez genelde çünkü simülasyonlar gerçek zamanlı çalışmıyor .. Buna çözüm olarak pine gelen 0 yada 1 bilgisini bir timer ile belirli bir süre boyunca basılıp basılmadığını kontrol ederek çözebilirsiniz . Yada toggle kullanarak hit-on hit-off şeklinde kullanacaksınız röleleri . Aklıma başka bişi gelmiyor . Ayrıca programın tamamını paylaşın ki yardımcı olmak biraz daha kolaylaşsın bizler için.

Burak
hocam bu başlık altındaki   önceki msjımda söylediğim gibi bu konuda yeni olduğum için bazı terimler yada kelimeleri anlayamıyorum ...devrenin şematiği vs yok ... kısa sayılabilcek zaman içersindeki netten edindiğim bilgilerle böyle bişi yapmak aklıma geldi ve yaptım .şu an senden öğrendiğim kadarıyla aklımdaki devrenin ' layout 'unu yapıp sorunumu burda paylaştım çözüm bulabilme amaçıyla ..hali hazırda senin istemiş olduğun  bu devrede çalışıcak olan bi programda yok ..olsa zaten şu saate kadar burada paylaşırdım bunu ..bahsettiğim programlar en basitinden çıkış veriyomu vermiyomu diye  pıc e yüklediğim kontrol amaçlı olan basit şeylerdir ..önceki msjlarımda aynı şekilde bu kodları yazdımda ...yazından anladığım kadarıyla bu yazılımla çözülebilinecek bi sorun ..senin bahsetmiş olduğun 0 yada 1 bilgisini timerla nasıl ayarlamam gerektiğiyle ilgilide hiç  bilgim yok ..şu an araştırmaya başlıcam ama kısa bi örnekle bana acıklarsanız memnun olurum .. yada toggle  ile ilgili bi örnek .. örneğin  porta.0 a basınca portb.0 yanıcak bırakınca sönücek gibi basit bişi timer ekleyerek  yazarsanız fazlasıyla acıklayıcı olucaktır .

İYİ FORUMLAR ...
Bilgi Hazinedir Paylaştıkça Çoğalır...

~ENES~

Optonun voltaj girişine paralel ve ters diyot at 4148 idealdir sorun çözülür büyük ihtimalle ..
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

Burak

#21
Alıntı yapılan: enes1153 - 28 Ocak 2015, 01:22:00
Optonun voltaj girişine paralel ve ters diyot at 4148 idealdir sorun çözülür büyük ihtimalle ..

Kullanılan opto zaten AC optolardan böyle birşeye neden gerek olsun ?

Burak
Ω Gens Una Sumus Ω

Burak

Alıntı yapılan: olceyy - 27 Ocak 2015, 21:29:00
hocam bu başlık altındaki   önceki msjımda söylediğim gibi bu konuda yeni olduğum için bazı terimler yada kelimeleri anlayamıyorum ...devrenin şematiği vs yok ... kısa sayılabilcek zaman içersindeki netten edindiğim bilgilerle böyle bişi yapmak aklıma geldi ve yaptım .şu an senden öğrendiğim kadarıyla aklımdaki devrenin ' layout 'unu yapıp sorunumu burda paylaştım .........................

Öyle diyorsan , soruna teorik olarak şuradan yaklaşalım ... Eğer osiloskopta gözlemleme şansın olduysa ; sıfır geçiş anının MCU tarafından yorumlanması , diğer bir deyimle senin senaryondaki optonun çıkışının 1 olması , ve bir diğer tabiriylede , lojik 1 çıkış pulse süresi maksimum 1 ms olarak kabul edilir ... Bunun dışındaki 1 ms'den büyük - uzun pulse'ler butona basmadığın anda optonun çıkış verdiği anlar olarak kabul edilir ... Bunu koda nasıl dökeriz onu bir düşünmek gerek ...

Burak
Ω Gens Una Sumus Ω

olceyy

anlıyorum gercekten  böylesi benim adıma daha anlaşılır oldu ..vermiş olduğunuz bilgiler adına en azından aklımadaki kesin bişi varki bu yazılımsal bişi ..bunu çözmek için şu an araştırma yapmaktayım ..sizin göstericeğiniz yollarıda merakla beklemekteyim ..ve bu sorunu çözülmesi demek benim için cok önemli çünkü ben genelde pıc i 220 voltlu devrelerde kullanıcam .veriğiniz bilgiler için teşekürler ..
Bilgi Hazinedir Paylaştıkça Çoğalır...

Burak

PORTA.3'e basıldığında PORTB.1-7 aralığındaki pinlere bağlı röle çıkışlarını butona basıldığı sürece çeken , buton bırakıldığı veya basılmadığı sürece röleleri bırakan bir program öbeği yazdım ,  ... Deneyip sonucu bildir ...



'-------------------------------------------------------------------------------
#config
  __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _BODEN_ON & _LVP_OFF & _CP_OFF
#endconfig
'-------------------------------------------------------------------------------               
Define OSC 4
'-------------------------------------------------------------------------------
PORTA=%00000000 :   PORTB=%00000000
CMCON=%00000111
TRISA=%11111111 :   TRISB=%00000000
T1CON=%00000000
'-------------------------------------------------------------------------------
TMR1IF  VAR PIR1.0
led var portb.0
tempo   var word    :   tempo=0
'-------------------------------------------------------------------------------
high led    :   pause 500
low  led    :   pause 500
high led    :   pause 500
low  led    :   pause 500
'-------------------------------------------------------------------------------
TMR1IF=0
TMR1=0

main:

'Röleler portb.1-7 araliginda tanimli , portb.0'u led olarak seçmistik
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if porta.3=0 then
    portb=%11111110 ' Roleler aktif edildi.
endif
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if porta.3=1 THEN
    while porta.3=1
        T1CON.0=1         'Timer1'i baslat
        IF TMR1IF=1 THEN
            PORTB=%00000000
            T1CON.0=0     'Timer1'i durdur
            TMR1IF=0
            TMR1=0
            GOTO EX
        ENDIF
    wend
    T1CON.0=0      'Timer1'i durdur
    TMR1IF=0
    TMR1=0         
endif
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
EX:

pause 20

goto main





Programda gözden kaçırdığım atladığım mantık hataları olabilir . Bunları düzeltiriz ...

Burak
Ω Gens Una Sumus Ω

olceyy

kodları aynı şekilde yazdım ..derlemede hatalar aldım .ekteki resimlerde gördüğüm hataları alıyorum
Bilgi Hazinedir Paylaştıkça Çoğalır...

Burak

Kullandığın derleyici ve assembler versiyonu nedir ? Sigorta ayarlarını birönceki kod düzeltme mesajında olduğu gibi kullan ...
TMR1'i word olarak okuma /yazma yapamayan versiyonlar olabiliyor . O yüzden

TMR1 gördüğün yerlere

TMR1L=0
TMR1H=0

yaz tekrar dene ...

Burak
Ω Gens Una Sumus Ω

Burak

Yani şu şekilde dene ;


__config_INTRC_OSC_NOCLKOUT
__config_WDT_OFF
__config_pwrt_off
__config_mclr_off
__config_lvp_off
__config_protect_off

'-------------------------------------------------------------------------------               
Define OSC 4
'-------------------------------------------------------------------------------
PORTA=%00000000 :   PORTB=%00000000
CMCON=%00000111
TRISA=%11111111 :   TRISB=%00000000
T1CON=%00000000
'-------------------------------------------------------------------------------
TMR1IF  VAR PIR1.0
led var portb.0
'-------------------------------------------------------------------------------
high led    :   pause 500
low  led    :   pause 500
high led    :   pause 500
low  led    :   pause 500
'-------------------------------------------------------------------------------
TMR1IF=0
TMR1L=0
TMR1H=0

main:

'Röleler portb.1-7 araliginda tanimli , portb.0'u led olarak seçmistik
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if porta.3=0 then
    portb=%11111110 ' Roleler aktif edildi.
endif
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if porta.3=1 THEN
    while porta.3=1
        T1CON.0=1         'Timer1'i baslat
        IF TMR1IF=1 THEN
            PORTB=%00000000
            T1CON.0=0     'Timer1'i durdur
            TMR1IF=0
            TMR1L=0
            TMR1H=0
            GOTO EX
        ENDIF
    wend
    T1CON.0=0      'Timer1'i durdur
    TMR1IF=0
    TMR1L=0
    TMR1H=0         
endif
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
EX:

pause 20

goto main






Burak
Ω Gens Una Sumus Ω

olceyy

şu anda portb.3 enerjilendiğinde yani butona bastığımda portb.0  iki kere yanıp sönüyor .eğer butona biraz uzun basarsam basılı kaldığı süre boyunca zırlama yani cok hızlı cekip bırakıyor röle butondan elimi cektikten sonra iki kere yan sönü devam ettirip komutu bitiriyor .
Bilgi Hazinedir Paylaştıkça Çoğalır...

Burak

Senin istediğin şey butona basılınca çeken tekrar basılınca bırakan şekilde çalışan bir sistem mi ? Yoksa butona bastığın sürece çeken butonu bırakınca , bırakan birşey mi ? Onu bi kesinleştirmekte fayda var ... Çünkü bu sistem toggle çalışacaksa durum farklı .

Burak
Ω Gens Una Sumus Ω

Powered by EzPortal