PORTB de RB0 RB1... Tek tek veri gondermede sorun

Başlatan M_B, 10 Aralık 2009, 09:59:32

M_B

Merhaba arkadaslar
PortB ye baglı pinleri tek tek aktif etmek istediğimde aktif olmadı.
Bu cok basit olayı sormaya da acıkcası cekindim ama cözumu de bulamadım.

Bilgiler:
işlemci : Pic16f628A
Derleyici Hi-Tech C

yazdıgım kod asagıdadır.
void main(void)
{
TRISA = 0b00000000;
TRISB = 0b00000000;
PORTA = 0b00000000;
PORTB = 0b00000000;
OPTION = 0b00000000; 			 // PullUp dirençleri devreye sokar. 
CMCON = 0x07;	

while (1)
{
	RB0=1;
	DelayUs(10);
	RB1=1;
	DelayUs(10);
	for(;;)
	{
	}
}
	
	
	
}

Bu kodla benim yapmak istedigim olay su
once RB0 baglı led yanacak. 10 mikro saniye sonrada
pesinden RB1 deki led yanacak ondan sonrada program sonduz donguye girecek ( donguye gırdıgınde ıse RB0 ve RB1 led lerı yanıyor olacak )
Ama malesef sımulasyonda once RB0 yanıyor 10us kadar sonra RB1 yanacagı zaman RB0 sonuyor.  Mantıken ve programsal olarak ta sonmemesı lazım ama neden sonuyor. Anlayabilmiş değilim.
Bu konuda gorus ve yorumlarınızı alabilirmiyim.

Teşekkürler
M_B

Not: Direk olarak PortB =3; ataması yapınca her ıkısı de yanıyor ama
Bu olayı Pic16f877 icinde denedim ama onda da aynısı oldu.
Ayriyeten bu yazdıgım programı
Jalv2 de denedım calıstı onda sorun olmadı.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

azimli

çıkışların kalıcı olmsını istiyorsan LAT'a yazmalısın ve döngüde her seferinde ilgili sıradaki pini yazman gerekmez LATB++ ile sıra ile yakarsın bir önceki söneceksede yapıya bir deyim daha ilave edersin.aslında senin yazımdada ilgili port pini aktif oluyor ama kalıcı değil içeriğini değiştirmesende yazılım orda döndüğü sürece ledin aktif olur.

M_B

azimli hocam;
Pic16xx larda LATH olayı varmı
Benım gördügüm pic18XX lerde
Hatta Hi-Tech nin include klasoru ıcındeki header dosyalarına baktım orda da LATH gormedim.

Bu basit gözüken sorunu henuz cözemedim.
Acaba nereyi gözden kacırdım.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

azimli

lath olmayan işlemci olmaz ki
lath den kasıt; siz işlemcide bir pine dijital 1 yada 0 çıkış verdiğinizde o pinin konumunun bir daha siz değiştirene kadar sabit kalması değilmidir?
siz programda RBX = 1; yada RB0 = 0; şeklinde bir yazımda bulunmuşsunuz burda yine ilgili port pinini dijital çıkış olarak 1 yada 0 olacak şekilde kullanırsınız ama işlemci o komutu işlediği anda portun konumunu istediğiniz değerde tutar sizin işinizde bu yöntem kullanılmaz size dijital çıkışın siz değiştirene kadar sabit kalacağı bir uygulama yani LAT gerekli RBX yazdığınız yere LAT yazın derleyin hatayı giderin belki sizin derleyicinin LAT yazım deyimi farklıdır ama LAT vardır.
sizin derleyiciyi bilmem ama siz zannediyorum bu yazım haliyle dijital çıkışı sabitleyip tutmuyorsunuz kodunuz aslında çalışıyor ama çıkış kalıcı olmadığından göremiyor olabilirsiniz sizin derleyicide yazdığınız şekilde LAT oluyor olabilirmi biraz incelesiniz görürsünüz.

KAZIMUGUR

Yazdıklarında sorun yok ,istediğin gibi çalışıyor.
B0 = 1
B1 = 1 oluyor ve döngüye girip öylece kalıyor.

Başka gözden kaçan bir şey olmasın ?
Çalışma dosyalarını koysan daha net anlaşılırdı.

M_B

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

M_B

Kullandıgım derleyici:
HI-TECH Software PICC Macro Assembler V8.05PL2
Simulasyon İsis 7.4 SP3

isiste sorun olacagını sanmıyorum cunku
aynı işlemi Jalv2 ile yaptım cok da guzel calıstı.
include 16f628a                    -- target PICmicro

pragma target OSC HS               -- HS crystal or resonator
pragma target clock 4_000_000     -- oscillator frequency
--
pragma target WDT  disabled
pragma target LVP  disabled
pragma target MCLR external
--
enable_digital_io()           -- disable analog I/O (if any)
--

pin_B0_direction = output
pin_B1_direction = output

  pin_B0=1
   _usec_delay(250000)
  pin_B1=1
  _usec_delay(250000)
  
forever loop
 -- burası sonsuz dongu
end loop


Bu da Hex:
:020000040000FA
:100000000608A20007309F00831606108610831290
:1000100022142208860083120313FB30A000C6308E
:10002000A1000A128A11A10B11280A128A11A00B31
:100030000F280000A2142208860083120313FB304D
:10004000A000C630A1000A128A11A10B23280A12AF
:0A0050008A11A00B212800002C28C3
:02400E006A3F07
:00000001FF
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

KAZIMUGUR

LabCenter önümüzdeki yıl proteus kullanımını , yapacağı imtihan sonuçlarına göre aktif edecekmişşşş dermişim. :)

Geçenlerde de böyle bir başlık vardı.
Gariban ledlere 5 Volt verilirmi ?
Hani bendeki 50-100 Watlıklar olsa neyse.
Hiç olmazsa 390 Ohm gibi bir şeyler bağla.

Başka bir yolu led özelliklerini açıp çalışma gerilimini 5 V yapmak. :)

Edit :
Aşağıdaki , Hi-Tide + Hi-Tech 9.65.PL1 ile elde edilmiş.
( senin hex lerde düzgün çalışıyor )

:1000000001288316850186018312850186018316E6
:100010008101073083129F0006140330F000F00BBB
:100020000F288312031386140330F100F10B1628F6
:0200300018288E
:00000001FF

M_B

KAZIMUGUR Hocam;
yardımlarınız için teşekkürler

Evet Gecenler de boyle bir tartışma geçmişti.
Hiç aklıma gelmedi sorunun bundan olacağı.
Proteusta artık gerçek hayattaki gibi davranmaya başladı  :)

Peki Proteus neden Jal ile yazılmış kodu çalıştırdı. ona karşı bir ilgisimi var.:D  Onda da  Ledlere direnç bağlanmamıştı. ( Bu da ayri bir konu )

Bundan sonra çok dikkatli olmak lazım artık gerçek hayattaki gibi devreyi oluşturmak lazım.
Tum yardımlarınız için tekrardan teşekkürler

Mehmet

Edit:
Ledleri cift tıkladıgımda
Model Type kısmını Digital yaparsak Dirence gerek kalmıyor. ( Denedim çalıştı )
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

707yunus

Eğer çözemediysen önce b0 ı aktif et sonra portb ye 3 yükle :lol:

M_B

Alıntı yapılan: "707yunus"Eğer çözemediysen önce b0 ı aktif et sonra portb ye 3 yükle :lol:

Onu bende düşündüm ama önemli olan sorunu bulmaktı ve sagolsun.
KAZIMUGUR hocam yardımcı oldu ve sorun cozuldu.
üst kısımda da acıklama yaptım. ( Direnc eklenmesi lazım mış )
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet