jal ile ultrasonik yardımm

Başlatan koordinat, 19 Kasım 2008, 19:00:52

koordinat

arkadaşlar bu program ultrasonik sensör için kendi robotunu kendin yap kitabından fakat seri port  yerine 2*16 lık lcd ye göndemem için kodu yazabilirmisiniz?
include 16f628_4i
include jlib
include jmath
include h_rs232

-- Ultrasonic mesafe algılayıcısı JAL programı

disable_a_d_functions

var volatile byte TMR1L           at 0x0E
var volatile byte TMR1H           at 0x0F
var volatile byte T1CON           at 0x10
var volatile bit  PIR1_TMR1IF		  at PIR1	 :	0
var volatile bit  T1CON_TMR1ON		at T1CON :	0

var volatile bit tx1		          is	pin_a1
var volatile bit tx1_dir		      is	pin_a1_direction
var volatile bit tx2		          is	pin_a2
var volatile bit tx2_dir		      is	pin_a2_direction
var volatile bit led		          is	pin_b0
var volatile bit led_dir		      is	pin_b0_direction
var volatile bit echo 	          is	pin_b7
var volatile bit echo_dir         is	pin_b7_direction

var byte  r1, r0

led       = low
led_dir   = output
tx1       = low
tx1_dir   = output
tx2       = low
tx2_dir   = output
echo_dir  = input

t1con = 0b00_00_0000

procedure burst is
var byte x = 4
assembler
local t1
 t1:
   movlw 0x02
   movwf port_a
   nop nop nop nop nop nop
   nop nop nop nop nop
   movlw 0x04
   movwf port_a
   nop nop nop
   nop nop nop nop
	 decfsz x,f
	 goto t1
   bcf tx1
   bcf tx2
end assembler
end procedure

function usr_oku ( byte out cm1, byte out cm0 )return bit is
 var byte x1, x0

   burst

   TMR1L  = 0 TMR1H = 0
   PIR1_TMR1IF  = false
   T1CON_TMR1ON = on

   while (echo == low) & (PIR1_TMR1IF  == false) loop   end loop

   x0 = TMR1L
   x1 = TMR1H
   T1CON_TMR1ON = off

   divide_16b ( x1, x0, 0, 58,cm1, cm0  )
   if PIR1_TMR1IF then cm1 = 0xff cm0 = 0xff end if
   return ! PIR1_TMR1IF
end function

serial_setup ( 192 )
forever loop
 if usr_oku ( r1, r0 ) then
  if r1 == 0 then
    if r0 <= 255 then h_asynch = r0 end if
    if r0 < 154  then led = high    end if
  end if
 end if
 delay_100ms
 led = low
end loop

Tagli

Söz konusu kitabın yazarı yazdığı programlara yorum da eklese güzel olurmuş... Belki de programdan önce gerekli açıklamayı yapmıştır tabi onu bilemem. Bir ihtimal de JAL bilmediğim için anlamamış olabilirim  :lol: .

if r0 <= 255 then h_asynch = r0 end if
Gönderme işi bu satırda oluyor gibi. JAL'da LCD'ye yazmak için hazır fonksiyonlar var mı? Eğer varsa bu satırdaki h_asynch (ki sanırım bu h_rs232 içinde tanımlanmış bir ifade) yerine LCD için bir ifade yazarsan, ve tabi program başında da gerekli tanımlamaları yaparsan istediğin olur bence.

serial_setup ( 192 )
Bu 19200 boud rate mi acaba? Eğer seri bağlantının özellikleri bilinirse bu programla oynamadan dışardan başka bir PIC bağlayıp gelen seri veriyi LCD'ye aktaracak şekilde kullanabilirsin. Pek mantıklı bir çözüm değil ama istediğin dili kullanabilmene olanak sağlar. Mesela JAL bilmeyen biri olarak bu uygulamayı yapsaydım bir 16F628A alır ve bu şekilde programlardım (veya komple baştan yazardım programı :)).
Gökçe Tağlıoğlu

futureng

Seri olarak gönderilen ultrasonik bilgisini seri o larak alıp 16f877 ye bağlanan bir LCD ekranda gösteren kodlar:

include 16f877_4
include jlib
include hd447804
include h_rs232


var byte  veri
serial_setup ( 192 )
hd44780_clear
hd44780 ="S" hd44780 ="o" hd44780 ="n"  hd44780 ="a" hd44780 ="r"
delay_1s hd44780_clear
forever loop
  hd44780_line1
    if h_asynch_poll (veri) then
       print_decimal_3 ( hd44780, veri,"0")
    else
       hd44780 = "-" hd44780 = "-"  hd44780 = "-"
    end if
  hd44780 = " " hd44780 = "c"  hd44780 = "m"
  delay_200ms
end loop
GimpTR.COM: Hayal Gücünüzün Gerçek Dünyadaki Görünüşü  http://www.gimptr.com

koordinat

yani iki pic kullanmam gerekiyor doğru mu?
ikinci picin bağlantıları nasıl olacak anlamadım?portlar tanımlanmamış

futureng

Normalde tek pic de kullanabilirsin. mesela sadece 16f877 ile de yapabilirsin. Buradaki seri iletişim kütüphanesi donanımsal seri iletişimi kullanıyor. 16f877 Pic' inin datasheet ine bakarsanız Donnaımsal seri iletişim bacakları TX ve RX yani 25 ve 26. cı bacaklar. "include" denen kütüphane dosylaraının içlerine bakarak bulabilirsin.
GimpTR.COM: Hayal Gücünüzün Gerçek Dünyadaki Görünüşü  http://www.gimptr.com

koordinat

ayrıca gönderdiğiniz kodla
böyle bir sonuç  çıkıyor proteusta
yoksa simüle edilemez mi bu?yanlış mı yapıyorum
bozuk karakterlerin nedeni ne olabilir?
bide  
print_decimal_3 ( hd44780, veri,"0")
ne yapar?
teşekkürler