PIC Basic Pro'da şöyle bir sorunla karşılaştım

Başlatan ilker_32, 24 Temmuz 2008, 08:02:10

ilker_32

Merhaba arkadaşlar PIC Basic Pro ile yapmış olduğum devre Proteus'da yanılmazken gerçekte doğru çalışmıyor. İncelemek isteyenler aşağıdan tüm dosyalarını indirebilirler. Yada kodda gözünüze takılan satırlar varsa uyarırsanız çok makbule geçer.

TRISB=255'PortB tamamı giris yapıldı.
TRISA=0 'A portu tamamı çıkıs yapıldı.

@ DEVICE pic16F628A  ;islemci 16F628
@ DEVICE pic16F628A, WDT_on ;Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON ;Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF ;Kod Koruma kapalı
@ DEVICE pic16F628A, MCLR_off ;MCLR pini kullanılmıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT ;Dahili osilatör kullanılacak

ON INTERRUPT GoTo KESME 'kesme olusursa KESME adlı etikete git.
OPTION_REG=%10000000 'dahili Pull up dirençleri iptal edildi
INTCON=%10001000 'Kesmeler aktif ve RB CHANGE kesmesi aktif
CMCON=7 '16F628 de komparatör pinleri iptal hepsi giris çıkıs

DURUM VAR BYTE
x var BYTE
SYMBOL TUS=PORTB.7
SYMBOL LED=PORTA.0
SYMBOL LED1=PORTA.1
SYMBOL ROLE=PORTA.2
SYMBOL RBIF=INTCON.0

BASLA: 'Ana program bölümü

if led=1 then
for x = 0 to 25  
pause 50
next X
toggle led
toggle led1            
toggle ROLE
endif

DURUM=PORTB
PAUSEUS 100
GOTO BASLA
DISABLE 'yeniden kesme olusması önleniyor
KESME: ' burada kesme olustu demektir.
TOGGLE LED 'LED konum degistirdi
toggle led1
toggle ROLE
PAUSE 300
DURUM=PORTB 'PortB degeri okundu
RBIF=0 'INTCON.0=0 yapıldı yani RB CHANGE Bayragı (flag) silindi.
RESUME 'geldigin yere dön.
ENABLE 'kesmeler yeniden aktif.
End


Dosyaları indirmek için;

http://www.4shared.com/file/56359313/cbe2d5dd/Y_online.html

My75

Sanirim tris yazmacini define tanimlamalarindan sonra yazmalisin,birde mclr ucunu 10k dirençle pullup yapmalisin,porta.4 ve porta.5 uçlari genelde pullup yapilir..Ek bilgi porta.5 sadece giris olur,porta.4 ise açik kollektör oldugu için çikis olarak kullanildigi zaman pullup yapilir..
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

ilker_32

Alıntı yapılan: "My75"Sanirim tris yazmacini define tanimlamalarindan sonra yazmalisin,birde mclr ucunu 10k dirençle pullup yapmalisin,porta.4 ve porta.5 uçlari genelde pullup yapilir..Ek bilgi porta.5 sadece giris olur,porta.4 ise açik kollektör oldugu için çikis olarak kullanildigi zaman pullup yapilir..
Eline sağlık, yanlız.

Device fazla önemli değil tekrar yazılımı yüklerken kontrol ediyorum.
MCLR kapalı, Pull-up'a gerek yok diye biliyorum.
Buton kesme için RB7'ye bağlı(chance),
RA3'ü kullanmadım.
RA4 ve RA5'i kullanmadığım için pull-up'a gerek yok.

Eğer proteus dosyasına baktıysanız olayı net anlamışsınızdır.

a.zorba

bir de böyle denesen

Device 16F628A  ;islemci 16F628
 TRISB=255'PortB tamamı giris yapıldı.
TRISA=0 'A portu tamamı çıkıs yapıldı.


On Interrupt GoTo KESME 'kesme olusursa KESME adlı etikete git.
OPTION_REG=%10000000 'dahili Pull up dirençleri iptal edildi
INTCON=%10001000 'Kesmeler aktif ve RB CHANGE kesmesi aktif
CMCON=7 '16F628 de komparatör pinleri iptal hepsi giris çıkıs

dim DURUM As Byte
dim x as Byte
Symbol TUS=PORTB.7
Symbol LED=PORTA.0
Symbol LED1=PORTA.1
Symbol ROLE=PORTA.2
Symbol RBIF=INTCON.0

BASLA: 'Ana program bölümü

If LED=1 Then
For x = 0 To 25 
DelayMS 50
Next X
Toggle LED
Toggle LED1           
Toggle ROLE
EndIf

DURUM=PORTB
DelayUS 100
GoTo BASLA
Disable 'yeniden kesme olusması önleniyor
KESME: ' burada kesme olustu demektir.
Toggle LED 'LED konum degistirdi
Toggle LED1
Toggle ROLE
DelayMS 300
DURUM=PORTB 'PortB degeri okundu
RBIF=0 'INTCON.0=0 yapıldı yani RB CHANGE Bayragı (flag) silindi.
Resume 'geldigin yere dön.
Enable 'kesmeler yeniden aktif.
End
Bilenler bilir . Biz maraşlilar için şehir olarak şubat ay' i bayram ,kurtuluş ,yaz in gelmesiydi. Şimdi karalar in yas in ayı oldu.

ilker_32

Valla hocam bu eklenen kodlardan bişey anlamadım. Acaba derleyicilermi uyuşmuyor. Bu kod beni baya sıktı iki gündür uğraşıyoruz sonuç 0  :(

Derleme işleminde aşağıdaki hataları alıyorum.



dim DURUM As Byte 
dim x as Byte 

DelayMS 50
DelayUS 100


Hocam dim, as'ın anlamı nedir ? Ve bu delay C derleyicisi için değil mi ?

ground

Alıntı yapılan: "ilker_32"Valla hocam bu eklenen kodlardan bişey anlamadım. Acaba derleyicilermi uyuşmuyor. Bu kod beni baya sıktı iki gündür uğraşıyoruz sonuç 0  :(

Derleme işleminde aşağıdaki hataları alıyorum.



dim DURUM As Byte 
dim x as Byte 

DelayMS 50
DelayUS 100


Hocam dim, as'ın anlamı nedir ? Ve bu delay C derleyicisi için değil mi ?

Proton sanırım.. Forumda setup ve Kazım hocanın dediği gibi küreğide var..
⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

a.zorba

Bilenler bilir . Biz maraşlilar için şehir olarak şubat ay' i bayram ,kurtuluş ,yaz in gelmesiydi. Şimdi karalar in yas in ayı oldu.

ilker_32

Eline sağlık a.zorba daha deneyemedim. Kısa zamanda dener sonucu yazarım.

Proton'u yükledim. Gayet güzel derleme yaptı. Ayrıca PBP'ye göre setup işlemleride daha basit. PBP'ye göre daha iyi olduğunu her hali ile gösteriyor. Yanlız MPASM kullanıyor derlerken.

yas

Evet asm dosyayı üretip derlemeyi Mpasm ye yaptırıyor

ilker_32

Alıntı yapılan: "a.zorba"bir de böyle denesen

Device 16F628A  ;islemci 16F628
 TRISB=255'PortB tamamı giris yapıldı.
TRISA=0 'A portu tamamı çıkıs yapıldı.


On Interrupt GoTo KESME 'kesme olusursa KESME adlı etikete git.
OPTION_REG=%10000000 'dahili Pull up dirençleri iptal edildi
INTCON=%10001000 'Kesmeler aktif ve RB CHANGE kesmesi aktif
CMCON=7 '16F628 de komparatör pinleri iptal hepsi giris çıkıs

dim DURUM As Byte
dim x as Byte
Symbol TUS=PORTB.7
Symbol LED=PORTA.0
Symbol LED1=PORTA.1
Symbol ROLE=PORTA.2
Symbol RBIF=INTCON.0

BASLA: 'Ana program bölümü

If LED=1 Then
For x = 0 To 25 
DelayMS 50
Next X
Toggle LED
Toggle LED1           
Toggle ROLE
EndIf

DURUM=PORTB
DelayUS 100
GoTo BASLA
Disable 'yeniden kesme olusması önleniyor
KESME: ' burada kesme olustu demektir.
Toggle LED 'LED konum degistirdi
Toggle LED1
Toggle ROLE
DelayMS 300
DURUM=PORTB 'PortB degeri okundu
RBIF=0 'INTCON.0=0 yapıldı yani RB CHANGE Bayragı (flag) silindi.
Resume 'geldigin yere dön.
Enable 'kesmeler yeniden aktif.
End
Merhaba,

Kodları bugün deneme fırsatım oldu. Kodlar kendi yazdığım kodlar gibi çalışıyor. Aynı flip flop gibi, kardeş o kadar uğraşmışsın eline sağlık. Ama çözecem inşallah. :o

Ama tuhaftır değil mi proteus ne güzel simüle ediyor. Gerçekte çalışmaması kafa karıştırıyor.

ilker_32

Arkadaşlar kodda son durum bu ufak tefek değişiklerle hatayı en aza indirdim fakat yine problem yaratıyor. Basic bilenler fikir verseler çok iyi olacak. Ne kadar basic kaynağına baksamda bir yere kadar sonu yok. 2 haftadır bu kod beni oyalıyor. Yapamayınca dert yaratıyor namussuz. Anlamadan geçmiş gibi oluyor.  

On Interrupt GoTo KESME 
TRISB=255'PortB tamamı giris yapıldı. 
TRISA=0 'A portu tamamı çıkıs yapıldı. 
CMCON=7
OPTION_REG=%10000000 'dahili Pull up dirençleri iptal edildi 
INTCON=%10001000 

DURUM var Byte 
x var Byte 
Symbol TUS=PORTB.7 
Symbol LED=PORTA.0 
Symbol LED1=PORTA.1 
Symbol ROLE=PORTA.2 
Symbol RBIF=INTCON.0 

BASLA: 'Ana program bölümü 

If LED=1 Then 
For x = 0 To 25 
pause 50 
Next x 
Toggle LED:Toggle LED1:toggle ROLE 
EndIf 

DURUM=PORTB 
pauseUS 100 
GoTo BASLA 
 'yeniden kesme olusması önleniyor 
KESME: ' burada kesme olustu demektir.
Disable 
Toggle LED:Toggle LED1:Toggle ROLE 
pause 300 
DURUM=PORTB 'PortB degeri okundu 
RBIF=0 'INTCON.0=0 yapıldı yani RB CHANGE Bayragı (flag) silindi. 
Resume 'geldigin yere dön. 
Enable 'kesmeler yeniden aktif. 
End

mustafa_cmbz

cmcon=7

SYMBOL Y_LED=PORTA.0
symbol K_LED=PORTA.1
SYMBOL ROLE=PORTA.2
SYMBOL BUTON=PORTB.7
X VAR BYTE

BASLA:

HIGH K_LED
GOTO BASLA_1

BASLA_1:
IF BUTON=1 THEN LOW K_LED : PAUSE 100 : HIGH  Y_LED : GOTO ANA

GOTO BASLA_1

ANA:
IF Y_LED=1 THEN 
FOR X=0 TO 25                  'SÜREYİ DEĞİŞTİRMEK İÇİN BURAYI DEĞİŞTİR
PAUSE 200                        ' BURADAKİ DEĞERİ DEĞİŞİRDİĞİNDE BUTONUN HASSASİYETİNİ DEĞİŞTİREBİLİYORSUN
IF BUTON=1 THEN LOW Y_LED :HIGH K_LED :PAUSE 200 :GOTO BASLA_1

NEXT X
LOW Y_LED
HIGH K_LED
ENDIF
GOTO BASLA 


END


röle eklemeyi unutmusum ama o basit bişey artık onuda sen yapıver hocam...

bende bişey soracaktım hemen kaçmışsın msn den ....

ilker_32

Alıntı yapılan: "mustafa_cmbz"
cmcon=7

SYMBOL Y_LED=PORTA.0
symbol K_LED=PORTA.1
SYMBOL ROLE=PORTA.2
SYMBOL BUTON=PORTB.7
X VAR BYTE

BASLA:

HIGH K_LED
GOTO BASLA_1

BASLA_1:
IF BUTON=1 THEN LOW K_LED : PAUSE 100 : HIGH  Y_LED : GOTO ANA

GOTO BASLA_1

ANA:
IF Y_LED=1 THEN 
FOR X=0 TO 25                  'SÜREYİ DEĞİŞTİRMEK İÇİN BURAYI DEĞİŞTİR
PAUSE 200                        ' BURADAKİ DEĞERİ DEĞİŞİRDİĞİNDE BUTONUN HASSASİYETİNİ DEĞİŞTİREBİLİYORSUN
IF BUTON=1 THEN LOW Y_LED :HIGH K_LED :PAUSE 200 :GOTO BASLA_1

NEXT X
LOW Y_LED
HIGH K_LED
ENDIF
GOTO BASLA 


END


röle eklemeyi unutmusum ama o basit bişey artık onuda sen yapıver hocam...

bende bişey soracaktım hemen kaçmışsın msn den ....
Çabaların için sağolasın. Gündüzleri yorulduğum için akşam uyumuş kalmışım. Bilgisayarı kapamadım bekleme moduna geçmiş. 01:15'te uyandım sana yazdım ama bu sefer sen yoktun. İşinde acil durum varsa bana mail at ben gündüz uğraşayım.

hackorsan

ilker merhaba

ilk verdiğin kodda herhangi bir problem yok ana programda

led 1 olduğunda çıkışların durumlarını değiştirmişsin.
kesme kısmında da ledin vs nin durumlarını değiştirmişsin programda herhangi bir hata yok dışarıda da çalışması gerekir.

BASLA: 'Ana program bölümü
x= 0
If LED=1 Then
    For x = 0 To 25 
    DelayMS 50
   Next x

Toggle LED
Toggle LED1           
Toggle ROLE
EndIf

Toggle LED1    ; BU SATIRI EKLE        


    DURUM=PORTB
DelayUS 100

GoTo BASLA


ana programında if endif sonuna toggle led1 i ekle normalde enerji verdiğinde 100 ms lik aralarla bu ledin durum değiştirmesi gerekir. eğer değiştirmiyorsa program haricinde bir hatan olabilir.
bla

ilker_32

Led'i kırpıştırmanın amacı nedir ? Zaten kod flip flop gibi çalıştığı için kırpışma oluyor. Hocam elinizin altında deney kartı varsa deneyin bana hak vereceksiniz.

Bu arada interrupt kullandığımızda wdt'nin açık olması gerekir mi ? Bu devre için,