16f628a için yazılmış programı 16f84a ya uyarlama için yardım ?

Başlatan kaypic38, 11 Ocak 2012, 23:00:05

kaypic38

Bu program (propeller) havaya isim yazma devresinin programı assemblyde yeniyim programı 628a da çalıştırdım fakat 84a dada kullanmam lazım hem bu program için hemde genel olarak (16f628a ile 16f84a birbirine çok benzer mikrodenetleyiciler olduğu için) 628a için yazılmış programı 84a ya nasıl çeviririm ? assemblyleri aynı sanırım LIST p=16f84a INCLUDE "p16f84a" yazarak denedim yeterli olmadı nasıl yapabilirim yardımlarınızı bekliyorum ?
;===================================TANSU===========================================
		LIST	P=16F628A
		INCLUDE	"P16F628A.INC"
		__CONFIG  _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF % _CP_OFF
;---------------------------------------------------------------------------------------
SAYAC1	EQU		H'20'
SAYAC2	EQU		H'21'
SAYAC3	EQU		H'22'
SAYAC4	EQU		H'23'
SAYAC5	EQU		H'24'		
 		ORG		h'0000'
 		CLRF	PORTB
 		BANKSEL	TRISB
 		CLRF	TRISB
 		BANKSEL	PORTB
Ç
		MOVLW	b'01111100'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'10000010'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'10000011'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'10000010'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'10000010'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00000000'
		MOVWF	PORTB
		CALL	GECIKME1
		GOTO	A
A
		MOVLW	b'00111111'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'01001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'10001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'01001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00111111'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00000000'
		MOVWF	PORTB
		CALL	GECIKME1
		GOTO	Ğ
Ğ
		MOVLW	b'00111110'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'11000001'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'11001001'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'11001001'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'01000110'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00000000'
		MOVWF	PORTB
		CALL	GECIKME1
		GOTO	H
H
		MOVLW	b'11111111'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'11111111'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00000000'
		MOVWF	PORTB
		CALL	GECIKME1
		GOTO	A2
A2
		MOVLW	b'00111111'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'01001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'10001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'01001000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00111111'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00000000'
		MOVWF	PORTB
		CALL	GECIKME1
		GOTO	N
N
		MOVLW	b'11111111'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'01000000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00100000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00010000'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'11111111'
		MOVWF	PORTB
		CALL	GECIKME1
		MOVLW	b'00000000'
		MOVWF	PORTB
		CALL	GECIKME2
		GOTO	Ç
GECIKME1
		MOVLW	d'15'
		MOVWF	SAYAC1
DONGU1
		MOVLW	d'15'
		MOVWF	SAYAC2
DONGU2
		DECFSZ	SAYAC2, F
		GOTO	DONGU2
		DECFSZ	SAYAC1, F
		GOTO	DONGU1
		RETURN
GECIKME2		
		MOVLW	h'FF'
		MOVWF	SAYAC3
DONGU3
		MOVLW	h'25'
		MOVWF	SAYAC4
DONGU4
		MOVLW	h'25'
	 	MOVWF	SAYAC5
DONGU5
		DECFSZ	SAYAC5, F
		GOTO	DONGU5
		DECFSZ	SAYAC4, F
		GOTO	DONGU4
		DECFSZ	SAYAC3, F
		GOTO	DONGU3	
		RETURN
		END
;==================================================END==============================================================

şimdiden yardımcı olacak hocalarıma teşekkürler...
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...

justice_for_all

olmadi derken ne olmadi kodu derledin de picmi calismadi veya kodu derleyemedin mi ne hatasi verdi mesela hatanin birisi 16f84a da 
_MCLRE_ON & _BODEN_OFF & _LVP_OFF
bu config ayarlamalari yoktur.onlari silip tekrar deneyin.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

camby

Derlemeye çalıştığınızda çıkan hata mesajlarını söylerseniz çözüm bulunabilir. Ama üstteki durumu çözer büyük ihtimal

Kabil ATICI

Sanırım hata her iki işlemcinin ram bölgelerinin farklı olmasından kaynaklanıyor.
16f628a 0x20'den başlarken
16f84a  0xc0'dan başlıyor.

16f628a 4 bank olarak sınıflanmış
16f84a 2 bank olarak ayrılmış.

sayac1...sayac5 adreslerini değiştir...
Programda özel bir donanım (configuration sigortaları haçiç) kullanılmadığından sorun olmaması lazım...

kolay gelsin...
ambar7

kaypic38

Hocam şimdi program derlendi fakat PICe attığımda çalışmadı sanırım dediğiniz gibi bağlangıç adresi sorun oldu peki sayac1 ve sayac5 i ne olarak değiştireyim ?
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...

kaypic38

Zaten dediğiniz gibi confıg bildirilerini ";" kullanarak yoksaydım ve öyle derledim development boardun driver programında ayarladım.
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...

tayyar

Havaya yazı yazma işlemi için kullnılan devrelerde 16f628 in internal osilatörü kullanılıyordu diye hatırlıyorum. Devrenizi göremediğim için yorum yapamıyorum. 16f84'te internal osilatör yok bu size problem olabilir, bir kontrol edermisiniz.
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

kaypic38

Yok bu devrede harici bir kristal osilatör kullandım daha kararlı olması açısından yanlışlık yok dediğiniz doğru dahili osilatör kullanılıyor fakat ben xtal kullandım.
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...

justice_for_all

Alıntı yapılan: tayyar - 12 Ocak 2012, 12:00:19
Havaya yazı yazma işlemi için kullnılan devrelerde 16f628 in internal osilatörü kullanılıyordu diye hatırlıyorum. Devrenizi göremediğim için yorum yapamıyorum. 16f84'te internal osilatör yok bu size problem olabilir, bir kontrol edermisiniz.

internal osilator kullanmanın amacı ne ki bu gibi projelerde?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

Kabil ATICI

Alıntı yapılan: justice_for_all - 12 Ocak 2012, 12:17:59
internal osilator kullanmanın amacı ne ki bu gibi projelerde?
Mekanik sorunlar. 
Kart üzerindeki her malsemenin hareket esnasında hava direnci oluşturması.
Kart üzerine ekleyeceğiniz her türlü malzeme hareket esnasında üzerine bir yük binecek.
Mümkün olduğunda küçük bir alana sığdırma kaygısı.

Gerçi projeyi görmedim ama büyük ihtimalle bunun hareketi bir motor ile sağlanacak. Kart üzerindeki her ağırlık bu motor üzerine yük olarak gelecek.. Dönme esnasında titreşim yapmaması için kanatların dengesinin iyi olması gerekir. Dengelemek için gerekirse karşı ağırlık gerekir. (ek yük)

Gerçi bu projede 16f628 üzerinde kristal kullanılmış. (sigorta ayarlarından öyle görünüyor).

ambar7

tayyar

Ambar7'ninde anlattığı nedenlerden dolayı internal osc kullanılması tercih edilyor genelde.

Temel amaç minimum alanı kaplamak.
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

kaypic38

Evet amaç bu fakat dahili osilatör 4Mhz olduğu için bazen yetersiz kalıyor sadece yazı yazmak için yeterli fakat yaptığımız bu propellerda animasyonlarda gerçekleştirmemiz gerekiyor o zamanda 4Mhz yetersiz kalıyor bazı durumlarda bu nedenle 10Mhz bir ösilatör kullandık hem kristal osilatör RC osilatöre göre daha sağlıklı bir diğer etkende bu oldu dediğiniz gibi bir motor yardımı ile dönmesi sağlanıyor ama zaten DC motorun RPM değerini ihtiyaçtan yüksek tutarsanız ağırlığın hele ki küçük bir elemanın pek neredeyse hiç etkisi olmuyor zaten kartın ağırlık merkezini hesaplayıp motoru tam oraya monte edince hiç bir sorun olmuyor.Birde bu devreyi yapmak isteyen arkadaşlara bir tavsiyede bulunmak istiyorum normal LED kullandığınız zaman LED'in yapısı gereği (oval) ne kadar birbirine sık da monte etseniz yazıda (harfler arasında) bosluklar oluyor fakat SMD LED kullanırsanız tam anlamı ile kusursuza yakın bir görüntü elde edersiniz.
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...

kaypic38

Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...

kaypic38



bu devrenin kullanıldığı yerlerden birisi videoda da görüldüğü gibi vantilatöre monte edilmiş bisiklet tekeri v.b gibi çalışmalar da yapılabilir.
Bir şeyi gerçekten öğrenmek, yapmak istiyorsan o şeyi yapmışsın, öğrenmişsin demektir...