Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => JAL => Konuyu başlatan: koordinat - 19 Kasım 2008, 19:00:52

Başlık: jal ile ultrasonik yardımm
Gönderen: koordinat - 19 Kasım 2008, 19:00:52
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
Başlık: jal ile ultrasonik yardımm
Gönderen: Tagli - 21 Kasım 2008, 21:19:36
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ı :)).
Başlık: jal ile ultrasonik yardımm
Gönderen: futureng - 22 Kasım 2008, 09:50:06
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
Başlık: cvp
Gönderen: koordinat - 22 Kasım 2008, 14:39:27
yani iki pic kullanmam gerekiyor doğru mu?
ikinci picin bağlantıları nasıl olacak anlamadım?portlar tanımlanmamış
Başlık: jal ile ultrasonik yardımm
Gönderen: futureng - 22 Kasım 2008, 23:27:11
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.
Başlık: cvp
Gönderen: koordinat - 23 Kasım 2008, 02:35:06
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

(http://img376.imageshack.us/img376/8776/11249441al8.th.jpg) (http://img376.imageshack.us/my.php?image=11249441al8.jpg)