2 pic 16f84a arasında haberleşme problemi

Başlatan jashua, 12 Mayıs 2006, 18:44:12

jashua

aşapıdaki şemayla proteusla süimule edince sorun yok ama devreyi yapınca sorunla karşılaştım bir kontrol edermisiniz hatam nerede?




alıcı icin :

TRISA=%00100
TRISB=%00000000
include "modedefs.bas" 
GIRIS VAR PORTA.2
AL VAR BYTE
e var byte
e=0
'------------------------------------------------------------------------------

PORTB=%00000000
porta=%00000

      	                             
'-------------------------------------------------------------------------------
START : 
Serin GIRIS,t9600,[ "A" ],al
IF (AL=255) Then 
high portb.2
low portb.1
pause 500
high portb.3
low portb.2
pause 500
high portb.2
low portb.3
pause 500
high portb.1
low portb.2
pause 500
low portb.1
pause 500
else 
goto b
   endif

 end  
   b:
   while e<10
   e=e+1
   high portb.6
   pause 500
   low portb.6
   pause 500
   wend
   end





verici icin:
include "modedefs.bas" 

TRISB=%01111111
OPTION_REG.7=1    'pull-up lar iptal
'-------------------------------------------------------------------------------
CIKIS VAR PORTb.7
VER VAR BYTE

'-------------------------------------------------------------------------------
start :

ver = 5
	SerOut CIKIS,T9600,[("A"),VER,13]
    SerOut CIKIS,T9600,[("A"),VER,13]  
    SerOut CIKIS,T9600,[("A"),VER,13]  
    SerOut CIKIS,T9600,[("A"),VER,13]  
      
	GoTo START	

END



yazılımını kullanıyorum.

ete

Birinci olarak, gönderirken 5 rakamını gönderiyorsun ama alırken 255 alınırsa bir takım şeyler yap diyorsun. Acaba o if AL=225  yerine if AL=5 yazılması gerekmezmi?.

İkinci konu şayet osilatör frekansları 4 MHZ ise 9600 baudluk haberleşme hızı pic için sınır noktasının biraz altında kalmaktadır. Bu nedenle hızı 2400 olarak denemeni öneririm.

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

jashua

dediğin doğru koşulu tamamlamak için 5 göndermem gerek ama orada
if - else endif kullandığım icin bu bir şey değiştirmez sanırım her durumda bir şeyler olması gerek. peki şemada bir sorun varmı yani gönderici pic icin bağlantı eksik yada fazlamı?

ete

Şemayı ben teorik bir şema olarak kabul ettim. Normalde iki pici bağlarken OSC ucunu birleştirmen gerekmez. Senkronu komut sağlayacak zaten.

Belkide RF kullanıyorsundur arada.
Vericide zaten hiç bir şey yok tek çıkış ucu var oda yeterli.
Sen frekans üzerinde oyna bence.

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

jashua

arkadaşlar 3 gündür uğraşıyorum hiç bir ledi yakamadım delireceğim neden olmuyor bir el atın. yukarıdaki yazılımdan devam ediyorum olmuyor bir türlü veri gitmiyor. veri hızlarınıda değiştirdim yine olmadı.

ama neden proteusta calışıyor sistem?

ete

Hala gerçekte nasıl bir devre düzenlediğini belirtmedin. Bilmeden nasıl fikir yürütebiliriz?.

İsis deki şemanın aynısını mı yaptın yoksa RF mi kullandın?.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

jashua

son yaptığım devre şeması asağıdaki aynen onu yaptım:




rf bir şey yok direkt kablo bağlantısı yapıyorum. son yazdığım değişikliklerle alıcı ve gönderici pic icin yazılımlar aşağıda.

veri gönderen pic

include "modedefs.bas" 

TRISB=%01111111
'-------------------------------------------------------------------------------
CIKIS VAR PORTb.7
VER VAR BYTE

'-------------------------------------------------------------------------------
start :

ver = 2
	SerOut CIKIS,t2400,["A",VER,13,10]
	GoTo START	

END



veri alan pic
TRISA=%00000
TRISB=%10000000
include "modedefs.bas" 
GIRIS VAR PORTb.7
AL VAR BYTE
e var byte
e=0
'------------------------------------------------------------------------------
 portb=%00000000
 porta=%00000
   	                             
'-------------------------------------------------------------------------------
START : 
Serin GIRIS,t2400,["A"],al
IF (AL=255) Then 

high portb.2
else 
goto b
   endif

 end  
   b:
   while e<10
   e=e+1
   high portb.1
   pause 500
   low portb.1
   pause 500
   wend
   end

ete

Şayet iki devrenin GND lerinide birleştirmez isen bu devre çıkış vermez.
Ayrıca veri gönderen programı şöyle yap;
start :

ver = 2
   Serout CIKIS,t2400,[REP 170\5,REP 0\5,REP 255\5]
   SerOut CIKIS,t2400,["A",VER,13,10]
   SerOut CIKIS,t2400,["A",VER,13,10]
   SerOut CIKIS,t2400,["A",VER,13,10]
   SerOut CIKIS,t2400,["A",VER,13,10]
   GoTo START   

END


Veri alan programıda şöyle değiştir (yalnızca veri alan kısmı yazıyorum diğerleri aynı);

START:
SerIn2  GIRIS,t2400,[WAIT ("A"),AL]
If AL=255 Then
...
..


Dediğim gibi şaseleri birleştirmez isen sistem çalışmaz. Yani tek kablo yerine çiftli kablo kullanman gerek.

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

jashua

asağıdaki satır icin pbp " bad expression " hatası veriyor.

Serout CIKIS,t2400,[REP 170\5,REP 0\5,REP 255\5]

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

jashua,

Aslında komut şöle olmalı;
Serout2 CIKIS,396,[REP\$AA\5,REP\$00\5,REP\$FF\5]
Firefox kullananlarda dolar işaretleri çıkmıyor. Buyüzden decimal değerlerini yazmış idim. Birde belli olsun diye araya REP den sonra boşluk koydum. Bunu beğenmemiş olabilir. Ancak komut boşluğu zaten istiyor.  bu sefer HEX değerlerini yazın. Başlarına Dolar işareti koyarak;

Serout2 CIKIS,396,[REP 170\5,REP 0\5,REP 255\5]
veya
Serout2 CIKIS,396,[REP \$AA\5,REP \$00\5,REP \$FF\5]

Bu arada Serout2 yerine Serout yazmışım onuda düzeltiverin artık.

Ayrıca Serin2 komutuda aşağıdaki şekilde yazılmalı
Serin2 GIRIS,396,[wait "A",AL]


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

jashua

herşey icin sağolun devrede mcrl ve osilatör bacaklarını birbirlerine bağlayınca sistem kendi yazdığım kodlarlada calıştı.

bu arada sormak istediğim başka bir şey var

TRISA=%01000
TRISB=%00000000
include "modedefs.bas" 
GIRIS VAR PORTa.3
AL VAR BYTE
e var byte
e=0
tick var byte
saniye var byte
dakika var byte
saat var byte


'------------------------------------------------------------------------------
 portb=%00000000
 porta=%00000
   	                             
'-------------------------------------------------------------------------------
START : 
Serin GIRIS,t2400,["A"],al
    read 1,dakika
    read 2,saat 
    If AL=0 Then 
      goto menua
        endif
          if al=10  and (dakika+saat < 1) then
            goto menud
             endif
             if al=10 and (dakika+saat >0)then
             goto menub
             endif
          if al=1 then 
        goto menuc
       endif
       if al= 5 then
       high portb.5
       endif
       goto start
    end  
   menua:
   while e<5
   e=e+1
   high portb.7
   pause 500
   low portb.7
   pause 500
   wend
   dakika = 0
   write 1,dakika
   call c
   saat = 0
   write 2,saat
   goto sayac
   end
   
   menub:
   while e<5
   e=e+1
   high portb.7
   pause 500
   low portb.7
   pause 500
   wend
   goto sayac
   end
   
   menuc:
   high portb.7
   high portb.6
   call c
   dakika = 0 
   write 1,dakika
   saat = 0 
   write 2,saat
   call c
   call c
   call c
   low portb.6
   low portb.7
   end
   
   menud:
   end
   
   
   
   
   sayac:
   high portb.6
   high portb.5
   tick = 0
   tick = tick + 1 
If tick < 61 Then sayaccik       
     tick=0 
       saniye =saniye+1 
        if saniye<61 then 
         saniye=0
         read 1,dakika
         dakika=dakika+1
         write 1,dakika
          if dakika>=0 then 
           dakika=0
           read 2,saat
           saat=saat+1
           write 2,saat
            if saat>=24 then   
            saat=0
            low portb.6
            low portb.5 
           endif
        endif
      endif  
sayaccik: INTCON.2 = 0    
          
   end


bu yazılımı yüklediğimde saatin dakikaları ve saatleri eproomuna yazmasını istiyorum. elektrik gittiğinde bir önceki dakika ve saati hafızasına almasını istiyorum.

ayrıca takıldığım bir durum sayac devam ederken pic başka hicbir işlem yapmıyor bunu nasıl aşabilirim.

yazılımda farklı olasılıklar söz konusu, sayaç sırasında bu olasılıkları nasıl değerlendirtebilirim.