Ynt: 8 anahtar 8 röle pic 16f877a Yardım?

Başlatan altugduranoglu, 04 Eylül 2012, 14:43:26

altugduranoglu

Merhabalar arkadaşlar.  Pic 16f877a ile 8 adet röleyi aç kapa şeklinde kontrol ediyorum.8 adet butondan hangisine basarsam o röle açılıp kapanıyor.1 inci butona bastıgımda 1 röle kontak değiştiriyor 2 inci butona basasrsam 2 inci kontak değiştiriyor seklinde.ben aynı anda iki kontagında aktif olmasını istemiyorum. Uçlarında lamba bağlı sayarsak 1 butona bastım 1 lamba yandı.2 butona bastıgımda 2 yanıcak. ama 1 in sönmesini isityorum.yazılımda ufak bi değişiklik işi görücektir diye düşünüyrm. şimdiden teşekkür ederim. devrenin isis şeması  yazılımı içindedir.protonla yazılmıştır. proton dilini bilmedigim için yazılımda ne tür bir değişiklik yapmam gerekir.?
[IMG]http://img225.imageshack.us/img225/4430/adszhii.jpg[/img]

Uploaded with ImageShack.us
https://rapidshare.com/files/2346234057/Desktop.rar

mesaj birleştirme:: 04 Eylül 2012, 14:45:06

;----------------------yazılım şu şekildedir hangi satırda değişiklik yapmalıyım------------------------------------
NOLIST
#include "E:\MASAüSTü\ELEKTRONİK DEVRELER\8LED8ROLE\8LED8ROLE.PBP"
LIST

F2_SOF equ $ ; 8LED8ROLE.PRP
F2_EOF equ $ ; 8LED8ROLE.PRP
F1_SOF equ $ ; 8LED8ROLE.BAS
F1_000012 equ $ ; in [8LED8ROLE.BAS] PORTD=0
   Clrf PORTD
F1_000013 equ $ ; in [8LED8ROLE.BAS] TRISB=255
   Bsf STATUS,5
ram_bank = 1
   Movlw 255
   Movwf TRISB
F1_000014 equ $ ; in [8LED8ROLE.BAS] TRISD=0
   Clrf TRISD
F1_000015 equ $ ; in [8LED8ROLE.BAS] PORTD=0
   Bcf STATUS,5
ram_bank = 0
   Clrf PORTD
BASLA
F1_000018 equ $ ; in [8LED8ROLE.BAS] WHILE PORTB=0
bc@LL1
   Movf PORTB,F
   set@page bc@LL2
   Btfss STATUS,2
   Goto bc@LL2
F1_000019 equ $ ; in [8LED8ROLE.BAS] WEND
   F@Jump bc@LL1
bc@LL2
F1_000020 equ $ ; in [8LED8ROLE.BAS] IF PORTB.0=1 THEN TOGGLE PORTD.0
   set@page bc@LL4
   Btfss PORTB,0
   Goto bc@LL4
   Movlw 1
   Xorwf PORTD,F
   Bsf STATUS,5
ram_bank = 1
   Bcf TRISD,0
bc@LL4
   Bcf STATUS,5
ram_bank = 0
F1_000021 equ $ ; in [8LED8ROLE.BAS] IF PORTB.1=1 THEN TOGGLE PORTD.1
   set@page bc@LL6
   Btfss PORTB,1
   Goto bc@LL6
   Movlw 2
   Xorwf PORTD,F
   Bsf STATUS,5
ram_bank = 1
   Bcf TRISD,1
bc@LL6
   Bcf STATUS,5
ram_bank = 0
F1_000022 equ $ ; in [8LED8ROLE.BAS] IF PORTB.2=1 THEN TOGGLE PORTD.2
   set@page bc@LL8
   Btfss PORTB,2
   Goto bc@LL8
   Movlw 4
   Xorwf PORTD,F
   Bsf STATUS,5
ram_bank = 1
   Bcf TRISD,2
bc@LL8
   Bcf STATUS,5
ram_bank = 0
F1_000023 equ $ ; in [8LED8ROLE.BAS] IF PORTB.3=1 THEN TOGGLE PORTD.3
   set@page bc@LL10
   Btfss PORTB,3
   Goto bc@LL10
   Movlw 8
   Xorwf PORTD,F
   Bsf STATUS,5
ram_bank = 1
   Bcf TRISD,3
bc@LL10
   Bcf STATUS,5
ram_bank = 0
F1_000024 equ $ ; in [8LED8ROLE.BAS] IF PORTB.4=1 THEN TOGGLE PORTD.4
   set@page bc@LL12
   Btfss PORTB,4
   Goto bc@LL12
   Movlw 16
   Xorwf PORTD,F
   Bsf STATUS,5
ram_bank = 1
   Bcf TRISD,4
bc@LL12
   Bcf STATUS,5
ram_bank = 0
F1_000025 equ $ ; in [8LED8ROLE.BAS] IF PORTB.5=1 THEN TOGGLE PORTD.5
   set@page bc@LL14
   Btfss PORTB,5
   Goto bc@LL14
   Movlw 32
   Xorwf PORTD,F
   Bsf STATUS,5
ram_bank = 1
   Bcf TRISD,5
bc@LL14
   Bcf STATUS,5
ram_bank = 0
F1_000026 equ $ ; in [8LED8ROLE.BAS] IF PORTB.6=1 THEN TOGGLE PORTD.6
   set@page bc@LL16
   Btfss PORTB,6
   Goto bc@LL16
   Movlw 64
   Xorwf PORTD,F
   Bsf STATUS,5
ram_bank = 1
   Bcf TRISD,6
bc@LL16
   Bcf STATUS,5
ram_bank = 0
F1_000027 equ $ ; in [8LED8ROLE.BAS] IF PORTB.7=1 THEN TOGGLE PORTD.7
   set@page bc@LL18
   Btfss PORTB,7
   Goto bc@LL18
   Movlw 128
   Xorwf PORTD,F
   Bsf STATUS,5
ram_bank = 1
   Bcf TRISD,7
bc@LL18
   Bcf STATUS,5
ram_bank = 0
F1_000028 equ $ ; in [8LED8ROLE.BAS] DELAYMS 300
   Movlw 1
   Movwf PP1H
   Movlw 44
   F@Call dly@w
F1_000029 equ $ ; in [8LED8ROLE.BAS] GOTO BASLA
   F@Jump BASLA
F1_EOF equ $ ; 8LED8ROLE.BAS
LIST
   END

Maxim

bu değil
sonu BAS ile biten dosya kod tur.
onu veriniz

altugduranoglu

#2

ASM KODLARI



8BUTON 8 ROLE KONTROL ASM. KODLARI




LIST P=16F877A
INCLUDE "P16F877.INC"


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAPI AYARLARI;;;;;;;;;;;;;;;;

BSF STATUS,5 ; BANK1 GEÇİŞ YAPILDI

MOVLW H'FF'
MOVWF TRISB ; B KAPISI GİRİŞ SEÇİLDİ

MOVLW H'00'
MOVWF TRISD ; D KAPISI ÇIKIŞ SEÇİLDİ
BCF OPTION_REG,7


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ANA PROGRAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCF STATUS,5 ;bank sıfıra geçiş yapıldı
CLRF PORTD ;PORTD İÇİNİ TEMİZLE

B1
BTFSS PORTB,0 ;
GOTO B2 ; B2 YE GİT
BSF PORTD,0 ;
BTFSS PORTB,0 ;
GOTO B2 ;
BCF PORTD,0 ;
CALL B2 ;
B2
BTFSS PORTB,1
GOTO B3
BSF PORTD,1
BTFSS PORTB,1
GOTO B3
BCF PORTD,1
CALL B3

B3
BTFSS PORTB,2
GOTO B4
BSF PORTD,2
BTFSS PORTB,2
GOTO B4
BCF PORTD,2
CALL B4

B4
BTFSS PORTB,3
GOTO B5
BSF PORTD,3
BTFSS PORTB,3
GOTO B5
BCF PORTD,3
CALL B5

B5
BTFSS PORTB,4
GOTO B6
BSF PORTD,4
BTFSS PORTB,4
GOTO B6
BCF PORTD,4
CALL B6

B6
BTFSS PORTB,5
GOTO B7
BSF PORTD,5
BTFSS PORTB,5
GOTO B7
BCF PORTD,5
CALL B7

B7
BTFSS PORTB,6
GOTO B8
BSF PORTD,6
BTFSS PORTB,6
GOTO B8
BCF PORTD,6
CALL B8

B8
BTFSS PORTB,7
GOTO B9
BSF PORTD,7
BTFSS PORTB,7
GOTO B9
BCF PORTD,7
CALL B9
B9
GOTO B1


END

mehmet

Tuş kontrol fonksiyonu içine(interrupt da olabilir)
girdiğinde basılan tuşun rölesini çalıştır, arkasından diğer
röleleri kapat.
Her if satırından sonra kaç röle kapatacaksan o kadar
PORTD.x = 0
yazman gerekli...

Ama if öncesi port temizlemesi yaparsan
bastığın röle çekili iken bırakıp yeniden çeker.
Tabi bu önemli değil dersen bunu yapmak daha kolay.
Bu zaman da;
ilk if öncesi röle portunu temizleyip
sonra buton okuması yaparsın.

Bu arada butonlardaki debounce
olayını atlama...

Kolay gelsin....
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

Maxim

#4
bas dosyasını verin diyorum asm kodunu veriyorsunuz
benmi anlatamıyorum anlamadım ?

BAS dosyası

husamettin.bas
ahmet.bas
anlatabiliyormuyum.bas



mesaj birleştirme:: 04 Eylül 2012, 16:19:49

evet arkadaşın verdiği bilgiye göre
bu programı aldığı yerde kaynak kodu yok
yani bu devreyi paylaşan adam, asıl kod olan bas dosyasını yayınlamamış

dolayısı ile programın baştan yazılması gerekiyor
bu hali ile üzerinde değişiklik yapılamaz

Logan

Protonu boşver aşağıdaki programı mplab ile derle. Çalışır.

LIST P=16F877A
INCLUDE "P16F877.INC"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAPI AYARLARI;;;;;;;;;;;;;;;;

BSF STATUS,5 ; BANK1 GEÇİŞ YAPILDI
MOVLW H'FF'
MOVWF TRISB ; B KAPISI GİRİŞ SEÇİLDİ
MOVLW H'00'
MOVWF TRISD ; D KAPISI ÇIKIŞ SEÇİLDİ
BCF OPTION_REG,7
BCF STATUS,5 ;bank sıfıra geçiş yapıldı
CLRF PORTD ;PORTD İÇİNİ TEMİZLE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ANA PROGRAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG 0X00

BASLA
       BTFSS PORTB,0
       GOTO BAK1
       CLRF  PORTD
       BSF    PORTD,0
BAK1
       BTFSS PORTB,1
       GOTO BAK2
       CLRF  PORTD
       BSF    PORTD,1
BAK2
       BTFSS PORTB,2
       GOTO BAK3
       CLRF  PORTD
       BSF    PORTD,2
BAK3
       BTFSS PORTB,3
       GOTO BAK4
       CLRF  PORTD
       BSF    PORTD,3
BAK4
       BTFSS PORTB,4
       GOTO BAK5
       CLRF  PORTD
       BSF    PORTD,4
BAK5
       BTFSS PORTB,5
       GOTO BAK6
       CLRF  PORTD
       BSF    PORTD,5
BAK6
       BTFSS PORTB,6
       GOTO BAK7
       CLRF  PORTD
       BSF    PORTD,6
BAK7
       BTFSS PORTB,7
       GOTO BASLA
       CLRF  PORTD
       BSF    PORTD,7
       GOTO BASLA

END


Programı deneme şansım olmadı. Acele ile şimdi yazdım. Olumlu veya olumsuz her sonucu yazarsan sevinirim.

Maxim, arkadaş sanırım biraz acemi. Elinden geldiğince derdini anlatmaya çalışmış. Hoş görmek lazım.

İyi çalışmalar.
İmza.

mehmet

Kopyala/Yapıştır ile bu işler olmaz, biraz öğrenmeniz lazım
öncelikle.

Maxim; Arkadaş protonla yazılmış bir program bulmuş,
basic dosyası yok. program asm çevrilmiş ve
http://elektrobilim.org/forum/pic-uygulamalari/5598-pic-16f877a-ile-8-buton-8-role-kontrol-devresi.html
buradan alınmış.

Ezberden uzak durmak lazım.
Saygılar...

Not: Önceki cevabımdaki olayı tekrarlıyorum;
Eğer döngü içinde portun 0 dan farklı olduğu
tespit edilir ve port temizlenirse önceden çekilmiş
olan röle bırakır. Bunu engellemek gerekir.


Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

altugduranoglu

#7
Öncelikle hepinize yardımlarınız için teşekkür ederim.  yazılım konusunda acemi oldugum dogrudur. mehmet kardeşim ezbere konmak bende istemiyorum zamanım çok kısıtlı ve yazdıklarını araştırıcam . Ama bir yerlerden bi şekilde başlamayınca ögrenilmiyor.o yüzden böyle bir devre ile başladım. logan kardeş çok teşekkür ederim . en kısa zamanda derleyip satır satır ne işe yaradıgını anlayıp sonucu bildiricem. Eksik hata ne varsa beraber çözelim isterimki herkez yararlansın bilgi paylaşılsın.

mesaj birleştirme:: 05 Eylül 2012, 11:51:34

mplab kurdum.logan arkadasımızın programını derledigimde bir kaç hata ile karşılaştım. [IMG]http://img528.imageshack.us/img528/3774/asdsadasb.jpg[/img]

Uploaded with ImageShack.us
anladıgım kadarı ile 'status' 'trisb' 'trisd' ''portd' 'portb' nin tanıtılması gerekli.

mehmet

Bir yerden başlanması gerekiyorsa
bence en uygun işlemci(Pic serisi için)
16F628(a) olmalı, önce mcu yu tanımalısın.
Girişleri çıkışları nasıldır, hangi pinler ne işe
yarar öncelikle bunlarla ilgilenmelisin.
Sonra led yakma uygulamaları ve daha
sonra buton uygulamaları olmalı. Daha
sonra öğrenilmesi gereken şeylere bir anda
ulaşmak çabuk bıkmana sebep olur.

Saygılar...

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

altugduranoglu

#9
Programlama dili olarak hangi dili seçmeliyim ? Evet haklısınız ilk başta bunlar ile başlamam gerektigine karar verdim. bu  mantıkta devreyi acil olarak yapmam gerektigi için sizlere danışıyorum zaten iş yerinde kullanıcam.elektronik olarak azda olsa bilgim var.pic ile yapamazsam 4017  kullanmayı düşünüyorum. teyp standında kullanıcam. tek buton ile sıra sıra geçiş saglamak yerine pic ile hangi butona bassarsam o röle aktif olsun istiyorum

Logan

Evet o kısmı atlamışız. O registerleri programın başında tanımlamak gerekli. Fakat 16f877'nin include dosyasını bulamaması ilginç. Programda INCLUDE "P16F877.INC" satırının altına ;

STATUS            EQU     0X03
OPTION_REG   EQU     0X81
PORTB             EQU     0X06
PORTD             EQU     0X08
TRISB              EQU     0X86
TRISD              EQU     0X88

yazman gerekli.
İmza.

altugduranoglu

Error   [223] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 1. digit out of range
Error   [876] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 1. syntax error
Error   [140] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 2. can't open include file "P16F877.INC": No such file or directory
Error   [876] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 12. syntax error
Error   [876] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 14. syntax error
Error   [810] ; 0. unknown op "include" in emasm()
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 27. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 28. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 30. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 31. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 32. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 33. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 35. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 36. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 37. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 38. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 40. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 41. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 42. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 43. phase error
Error   [840] C:\Users\ultima's\Desktop\DENEM\altugduranoglu.asm; 45. phase error
Advisory[1] too many errors (21)
evet o hatalarda kalktı. yinede 21 adet hata buluyor.

altugduranoglu

Bu arada başlangıç olarak ögrenmeye ccs c ile başlayacagım. serdar çiçek ccs c kitabını şipariş ettim :)

Logan

Programın başındaki INCLUDE "P16F877.INC" satırını INCLUDE "PIC16F877.INC" olarak değiştirmeyi dener misin? Include dosyasını görmüyor. Bütün hata bu sanırım.
İmza.

altugduranoglu

aynı hatayı veriyor nerde sıkıntı var acaba ?