Burda hata nedir ?? Bir türlü cözemiyorum !!

Başlatan Digimensch, 21 Kasım 2004, 18:13:03

Digimensch

Bu benim bu konuyu 3.sorusum ama bir cok sey yaziliyor kesin bir cözüm yazilmiyor.Lütfen ben nerde hata yapiyorum bana bilen arkadaslar cevap versin !!
Ben su cok basit su Devreyi PicBasit Kodlari ile olsturdugum .hex Dosyasi ile calistiramiyorum.


Yapmak istedigi su:
Bir seriport bağlantısı ve bir led bulunuyor. Çalışması oldukça basit. Bir seri terminal programı 9600 baud 8 bit No parity 1 stop bit şeklinde setup edilir. Devre PC seriportuna bağlanıp, devreye  voltaj verdikten sonra klavyeden 1 yazıp ENTER'a bastığınızda led yanacak, 0 yazıp ENTER'a bastığınızda ise led sönecek.
Simdi bu Devre Antrak'dan indirmis oldugum kendine ait su .hex dosyasi ile calisiyor.Denedim ...
:100000002D28000000000518003414088C0400346A
:10001000140892001508930000341608920017087F
:100020009300003434309200953093000034122055
:1000300020201220202012202020122020200034F6
:100040001208900013089100910B2428900B292886
:100050002C2813089100242800348501860183167A
:100060000514061283121220202001309600193048
:100070009700013094000C30950017208C0101305E
:100080009400051C3E280000000008202020051CCC
:100090003E280D20202001200310940D031C492828
:1000A0000D2020200C08303C03190612031D0616F3
:0600B000122020203E2872
:00000001FF


Fakat ben kendim bu Devre icin  PicBasic ile program yazip derleyip .hex Dosya haline getirip  bu .hex dosyasini  PIC16F84'e yazdigimda neden hic bir reaksiyon olmuyor???
Neden PIC Led lambayi yakip söndürmüyor??
Benim yazdigim Kod su:
Include "Modedefs.Bas" 
SI VAR PORTA.0       'PortA'dan giris yapiliyor
LED VAR PORTB.4   'Led lamba buraya takili
VERI VAR BYTE 
BAUD CON 84  '9600 baud olarak ayarlaniyor

TRISA= $00001 
PORTA= 1
TRISB = 0 
PORTB = 0 

LOOP: 
SERIN2 SI,BAUD,Islemler,[VERI]  
Islemler:
SELECT CASE VERI 
CASE "1"
PAUSE 10 
HIGH LED      'Led yaniyor
CASE "0" 
PAUSE 10
LOW LED       'Led sönüyor
END SELECT   
goto loop
END



Yukardaki bu devreye göre Lütfen biri bana PicBasic ile dogru Kodu yazipverebilirmi??
Neden PicBasic ile yazdigim Kod bu devreyi calistirmiyor??
Kodmu yanlis burda ne yanlis??
yukardaki .Hex Dosya ile calisiyor fakat kendim PicBasic ile Kod yazip .Hex dosyasi olusturdummmu bu .hex Dosyasi ile calismiyor !!!

z

While single-chip RS-232 level converters are common and inexpensive, the excellent I/O specifications of the PICmicro MCU allow most applications to run without level converters. Rather, inverted input (N9600..N300) can be used is conjunction with a current limiting resistor.

Serin 1,N2400,("A"),B0  'Wait until the character "A" is received serially on Pin1 and put next character into B0  

Benim anlayamadigim ne biliyormusun. Picprojede basic kullanan bir ton adam var. Neden onlardan ses cikmiyor ?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Digimensch

Bende anlamiyorum Hocam  neden bu konuda net bir cevap veren olmuyor.
Oysa PicBasic kullanan cok üye var burda.Sadece bir iki kisi disinda cevap veren olmadi.
Saolasin biri sen biride fsan arkadasimiz.
Neyse benim tahminim yukardaki .hex dosyasi asm ile yazilip derlenmis bir Dosya , PicBasic kodlari bir yerlerde eksik mi kaliyor yoksa birseyleri eklemeyi mi unutuyorum cözemedim.
saygilar

fsan

Alıntı Yap9600 baud may be unreliable with 4MHz clock

mode 84 = 9600 Driven  True  None

mode 16468 = 9600  Driven  Inverted  None

4MHz xtal kullaniyorsan 9600 değilde 2400 baud kullanirsan daha iyi olurmus galiba.

senin yukaridaki direnc ile yaptigin uygulama "Inverted" yani mode 16468 olmasi gerekiyor sanirim. (9600 baud ve Serin2 icin)
Alıntı YapHere is a complete list of the possible mode settings for PicBasic Pro's Serin2 and Serout2 commands. For more information on the meanings of the selections,
http://melabs.com/resources/ser2modes.htm

Digimensch

Baud degeri olarak hepsini denedim.
84 --- 9600
188 --- 4800
396 --- 2400
Hepsini hem Baud olarak denedim hemde ayni ayarlari Hyper Terminalde degistire degistire denedim.
yine olmuyor.
fsan acaba sen bu kücük örnegi Bread Board'da deneyemezmisin??
Eger sende olurda bende olmaz ise ozaman sorunun baska bir yerden kaynaklandigina emin olurum.

fsan

birde:
mode 16780 ;(2400 Driven Inverted  None) deneye bilirmisin?

olmazsa
direnci kaldirip pic ile pc arasina RS-232 chip/interface ile birde
mode 396     ;(2400  Driven  True  None) veya
mode 33164     ;(2400 Open True  None) dene belkide hyperterminal arada rs-232 chip olmadan calismiyordur ?
 
@bunalmis
üstat merhaba, "Driven" veya "Open" yaziyor
sence bu ne anlama geliyor?

z

Basic kullanmadığım için bilemiyorum. Bir yerlerde açıklanıyordur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Digimensch

@fsan
nasil yani söyle mi yapayim??

BAUD CON 16780

Hyper Terminalde Baudrate'yi ne vereyim??

rr

Serial haberleşmeyi kendim özel kodlar yazarak uyguladım. Serial in ni kesmesi varmı bilgi geldiğinde m.denetleyici nasıl uyanacak. o anda delay konumunda olabilir. kendi uygulamamda Rb0 int ucunu kesme kullanarak
yapmıştım. size yardımcı olabildim bilmiyorum.

ete

@Digimensch,

Sorun muhtemelen timing hatası diye düşünüyorum. Hatayı dahada minimuma düşürmek için gelen veri 0-1 olmadıkça islemler satırına geçmemek lazım gelir. En azından bir denemek için aşağıdaki satırı ilave edip bir deneyin.

Basla:   SERIN2 SI, BASUD, Ara, [VERI]

Ara:      If veri >1 then basla

Islemler:
---
---

Sonucu bildirirseniz memnun oluruz.

Bu arada aklıma geldi PC de klavyeden bastığınız 1 rakamının ASC karşılığı 49 olması gerekir. Sıfır ise 48 dir. Dolyısıyla PIC den bu karekterleri kontrol ederken select bölümüne 0 ve 1 yerine 48 ve 49 yazmanız gerekir diye düşünüyorum. Buna denerseniz sanırım birinden biri doğru sonucu verecektir.

Mesaj üstüne mesaj oluyor ama aklıma yine bir şey geldi. En azından PIC'in bir şeyler alıp almadığını ve alıyorsa ne aldığını kontrol edebilirsiniz. Bunun için aşağıdaki satırlarla birlikte sisteme bir LCD bağlayın ve gelen karekterlerin rakam karşılıklarını görün derim.

Sizin programda Islemler: bölümünün altına

LCDOUT $FE,1
LCDOUT dec veri

gerekirse araya bir Pause koyun. ancak klavyeden tuşa basarken timingi hesaba katarak ara vermeye bakın yoksa yine bir şey göremeyebilirsiniz.

Kolay Gelsin
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Digimensch

tamam bu söylediklerini bir deneyecegim.
sonucu yazarim.

ete

@digimensch,

Sorunu hallettinizmi ?
Neticeyi bekliyoruz.

Selamlar
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

oas

INCLUDE "Modedefs.Bas"
SI VAR PORTA.0       'PortA'dan giris yapiliyor
LED VAR PORTB.4   'Led lamba buraya takili
VERI VAR BYTE
BAUD CON 84  '9600 baud olarak ayarlaniyor

TRISA= 0
PORTA= 1
TRISB = %00010000
PORTB = 0

LOOP:
SerIn2 SI,BAUD,Islemler,[VERI]
Islemler:
Select Case VERI
Case "1"
Pause 10
High LED      'Led yaniyor
Case "0"
Pause 10
Low LED       'Led sönüyor
End Select  
GoTo loop
End


duzeltılmişi

Digimensch

Sorunu halletim  evet PicBasic kodunda mode olarak fsan arkadasimizinda dedigi gibi su degerleri verdim.
Alıntı Yapmode 16780 ;(2400 Driven Inverted None) deneye bilirmisin?
Birde ben Kristal olarak 3,57 MHZ  kullaniyordum bunuda Kod icerisinde belirtmem gerekliymis.Onuda söyle yaptim
DEFINE OSC 3

Böylece sorun halloldu.
Yardimci olan arkadaslara cok tesekkürler.