10 bit

Başlatan zenze, 14 Nisan 2006, 15:08:15

zenze

mrb  
16f84 için bir seferde paralel 10 bit okumak istiyorum düşündüğüm portb 8+porta nin iki pini.  Okunan bu 10 biti yüklenmiş 10 bitle karşılaştırıp aynı olup olmağına bakacağım. tek tek bütün pinleri okumak işime yaramıyor bir seferde 10 pin girişini okuyabilirmiyim yada 8+2 nasıl okuyabilirim teşekkürederim

aYe

Selam,

Pic'lerde veriyolu 8 bit olduğu için tek cycle da bu işlemi yapamazsınız.

Pic'in hizini arttirip 2 cycle'da portları okuyup kullanmak durumundasınız.

Zaten 10bit okusanız dahi bunu yine 8+2 bit olarak ayırmadan işleyemezsiniz.

Tam olarak ne yapmak istediğinizi yazarsanız belki çözüm olabilecek öneriler gelebilir.

İyi çalışmalar.
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

CaFFeiNe

okuma esnasında bilginin değişip problem oluşturacağını düşünüyorsanız (8+2 şeklinde 2 çevrimde okursanız) bir LATCH dizisi ile (paralel giriş seri çıkış shift registerlarda olabilir) 10biti tutarsınız sonrada okursunuz mesela...

zenze

CaFFeiNe bunu biraz düşünmem gerek gerçi harici donanım kullanılmadan olur gibi ama tşk.

CaFFeiNe

harici donanım kullanmadan olur tabiiki ama;
demek istediğim mesela bilginin önce 0..7 bitlerini (8bit örneğin RB0..RB7) sonra 8 ve 9. bitlerini (2bit örneğin RA0,RA1) okuyacaksın bu işlemi pic ile tek komut çevriminde yapamazsın dolayısıyla bilgi tam sen ilk 8biti okuduktan sonra 2biti okumadan değişirse? bu durumda hatalı sonuç alabilirsin
tabiiki uygulamanı bilmiyorum ona göre bir karar vereceksin artık

z

Donanima her zaman ihtiyac olmaz. (Okunacak sinyal, islemcinin bir kac komut isleme suresinden daha cabuk deger degistirmiyorsa)

Ornegin 10 bitlik bir sayiciyi okudugunuzu varsayin. 8 biti okuyup ardindan 2 biti okurken sayici deger degistirebilir. (0011111111 den 0100000000 gibi)

bu durumda fatali olarak 0111111111 okursunuz.

Buna engel olmak icin

L bitleri oku
H bitleri oku
Tekrar L bitleri oku
Ilk okudugun L bitlerle aynimi ayniysa kullan ayni değilse ta bastan bir daha oku.

Bu tur problemlere sinyali ucarken okuma problemi denir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

aYe

Selam,

Peki o arada H değişmiş olursa yani bilgi tamamen değişmiş olmasına rağmen her ikisinde de L tutuyorsa?

Bu durumda en büyük riski alırsınız ki değişim H kısımda yani yüksek değerlidir.

Böyle durumlar çalışma esnasında nadir ortaya çıkar ve yıllar sonra farkedildiğinde bug adını alir, çok riskli ve tavsiye etmeyeceğim bir durum.

Her ne kadar yöntemi beğenmemiş olsamda ; H bitlerin 2 kez okuması L bitlerin 2 kez okunmasından daha güvenlidir gibi geldi.

İyi çalışmalar.
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

zenze

peki porta nın (giriş olarak kullanılan ikisi) iki pinini aynı anda okuyup saklama şansımız yokmu ?

z

Haklisin Tatlisurkurnazi,

Zaten bahsettigim yontem Counter gibi ardisil durum degistiren sistemler icin gecerli. (Sayici demistim) Low bitleri okumanin espirisi de burda zaten.


8 bit islemcilerde, islemci icinde  bulunan 16 bit counter, capture donanimi vs icin veri yakalamanin kesin yoludur.

Verileriniz gurultu tipinde ise o zaman sozkonusu yontemin hata yapmaktan baska sansi yok.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

stlg

Sevgili zenze
Kardeş yapacagın 10 bit okuma işleminde 8 bitlik porta yuksek bitleri bagla dusuk bitleride 2 li porta once yuksek bitlerin girdigi 8 bitlik veriyi oku sonra kalan ikiyi eger bu arada 2 lide bir degişme olursa ulaşacagın sonuca coz az katkısı olur yani duşuk bitler sonucu fazla etkilemezler kolay gelsin
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

forsa1975

Hocam bu değeri okuyup karşılaştıracaksınız ve picden bir çıkış alacaksınız. Okuma ve hesaplama kısmını tek periyottamı yapmayımı düşünüyorsunuz?

deger var word
gelen_deger var word

deger=1200
trisa=%11000000
trisb=%11111111
basla:
gelen_deger=(portb*4)+(porta.1*2)+porta.0
goto basla

end


bunun asm dosyası

; PicBasic Pro Compiler 2.46, (c) 1998, 2005 microEngineering Labs, Inc. All Rights Reserved.  
PM_USED			EQU	1

	INCLUDE	"16F84A.INC"

RAM_START       		EQU	0000Ch
RAM_END         		EQU	0004Fh
RAM_BANKS       		EQU	00001h
BANK0_START     		EQU	0000Ch
BANK0_END       		EQU	0004Fh
EEPROM_START    		EQU	02100h
EEPROM_END      		EQU	0213Fh

R0              		EQU	RAM_START + 000h
R1              		EQU	RAM_START + 002h
R2              		EQU	RAM_START + 004h
R3              		EQU	RAM_START + 006h
R4              		EQU	RAM_START + 008h
R5              		EQU	RAM_START + 00Ah
R6              		EQU	RAM_START + 00Ch
R7              		EQU	RAM_START + 00Eh
R8              		EQU	RAM_START + 010h
T1              		EQU	RAM_START + 012h
T2              		EQU	RAM_START + 014h
FLAGS           		EQU	RAM_START + 016h
GOP             		EQU	RAM_START + 017h
RM1             		EQU	RAM_START + 018h
RM2             		EQU	RAM_START + 019h
RR1             		EQU	RAM_START + 01Ah
RR2             		EQU	RAM_START + 01Bh
_deger           		EQU	RAM_START + 01Ch
_gelen_deger     		EQU	RAM_START + 01Eh
_PORTL           		EQU	 PORTB
_PORTH           		EQU	 PORTA
_TRISL           		EQU	 TRISB
_TRISH           		EQU	 TRISA
#define _PORTA_1         	 PORTA, 001h
#define _PORTA_0         	 PORTA, 000h
	INCLUDE	"ZENZE.MAC"
	INCLUDE	"PBPPIC14.LIB"

	MOVE?CW	004B0h, _deger
	MOVE?CB	0C0h, TRISA
	MOVE?CB	0FFh, TRISB

	LABEL?L	_basla-----------------------------------	
	MUL?BCW	PORTB, 004h, T1
	MUL?TCW	_PORTA_1, 002h, T2
	ADD?WWW	T1, T2, T2
	ADD?WTW	T2, _PORTA_0, _gelen_deger
	GOTO?L	_basla---------------------------------------
	END?	

	END



eğer yukarıdaki asm kodların her satırı tek periyot ise en az 4 periyot gerektiriyor.  PBP ile bu kadar oldu. Umarım doğru anlamışımdır.


Kolay gele

aYe

Selam,

Arkadaş 10bit'i tek cycle'da nasıl okurum, mümkünmüdür diye sormuş, yani portları nasıl okurum diye sormamış, eminim iki portu peş peşe nasıl okuyacağını biliyordur.

Cevabını da sorunun hemen altında vermiştim zaten; 8 bit veri yolu olan bir işlemciyle tek cycle'da 10 bit okuyamazsınız.

Hangi dilde yada hangi algoritmayla yazarsanız yazın olmaz bu iş, zira olay donanımla alakalı.

İyi çalışmalar.
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)