HEX KOD DEĞERLEDİRME

Başlatan levo_levent, 22 Haziran 2014, 15:03:33

levo_levent

ÖNCELİKLE FORMA YENİ KATILDIM  İYİ GÜNLER DİLERİM

PİC PROGRAMLAMA İLGİMİ ÇEKTİ VE PROGRAMLAMAYLA İLGİLİ HİÇ BİLGİM YOK AMA ÖĞRENMEK İSTİYORUM

AMACIM PİYASADA LCD TV LERDE KULLANILAN KLAVYELİ KUMANDALAR VAR BUNLAR RF SİNYALİYLE ÇALIŞIYOR
ALICISININ ÇIKIŞ UCUNU RS232 ÜZERİNDEN  BİLGİSYARA BAĞLAYARAK HEX KODLARI GÖREBİLİYORUM
RS232 AYARI BAUND HIZI 115200
BU HEX KODLAR HER TUŞ İÇİN 14 TANE GELİYOR

ÖRNEĞİN
01-02-03-04-05-06-07-08-09-10-11-12-13-14                     13=TUŞ İSMİ
--------------------------------------------------------------------------
FE 09 4A 05 03 01 04 00 92 02 02 01 00 D3                     00=ok
FE 09 4A 05 03 01 04 00 92 02 02 01 01 D2                     01=yukarı
FE 09 4A 05 03 01 04 00 92 02 02 01 02 D1                     02=aşağı
FE 09 4A 05 03 01 04 00 92 02 02 01 03 D0                     03=sol
FE 09 4A 05 03 01 04 00 92 02 02 01 04 D7                     04=sağ
FE 09 4A 05 03 01 04 00 92 02 02 01 09 DA                     09=menü


BİR PİC KULLANARAK BU 14 HEX KOD ARASINDAN SADECE 11-12-13 CÜ HEX DOKLARI DEĞERLEDİRİP
ÇIKIŞ UÇALRINDAN BİRİNE KOMUT GÖNDEREBİLİRMİ
OK BASILDIĞINDA (02-01-00) HEX KODU GÖRÜNCE BİR LED YAKILABİLİRMİ ?

acemdiyarı

#1
İstediğin şey malesef olacak bir şey değil arkadaşım.

Kolaygelsin.

Düzeltme ben sanırım tv üzerindeki eepromdan bu bilginin alınması ve değiştirilmesi  şeklinde düşündüm, hocanın dedigi gibi olur.

ete

Aslında olacak bir şey tabiiki söyledikleri doğru ise. Ama sorun kimin yapacağı?
Bu amaçla bir rf alıcı sistemi yapılması gerekiyor. Yada direk bağlantı ile yapılırsa sorunsuz alınabilir bu bilgiler. Önemli olan bu bilgileri nasıl alınacağı. Onu hallederim dersen geriye bilgi değerlendirme kalıyor. Bir program yazılacak . Programda bilgi alma kısmına beklenen işaretçi olarak data paketinin ilk başında yer alan 3 bilgi, FE , 09, 4A yazılır. Program bu bilgileri aldıktan sonra 9 byte daha alır ve ardından 10 nolu byte ise asıl tuş kodunu içerdiğinden değerlendirilecek byte bu olur.
Sonra gerisi ledi yakmaya kalır. Hepsi bu.
Bütün bunları yapacak durumda değil isen oturup çalışmaya başlaman gerek.

Ete

levo_levent

Alıntı yapılan: ete - 23 Haziran 2014, 08:40:15
Aslında olacak bir şey tabiiki söyledikleri doğru ise. Ama sorun kimin yapacağı?
Bu amaçla bir rf alıcı sistemi yapılması gerekiyor. Yada direk bağlantı ile yapılırsa sorunsuz alınabilir bu bilgiler. Önemli olan bu bilgileri nasıl alınacağı. Onu hallederim dersen geriye bilgi değerlendirme kalıyor. Bir program yazılacak . Programda bilgi alma kısmına beklenen işaretçi olarak data paketinin ilk başında yer alan 3 bilgi, FE , 09, 4A yazılır. Program bu bilgileri aldıktan sonra 9 byte daha alır ve ardından 10 nolu byte ise asıl tuş kodunu içerdiğinden değerlendirilecek byte bu olur.
Sonra gerisi ledi yakmaya kalır. Hepsi bu.
Bütün bunları yapacak durumda değil isen oturup çalışmaya başlaman gerek.

Ete
HOCAM CEVABINIZ İÇİN TEŞEKKÜRLER DEDİĞİNİZ GİBİ OTURUP ÇALIŞMAYA BAŞLADIM :)  ANCAK ÇOK ARAŞTIRDIM  ÖRNEK ÇALIŞALAR  BOTONLA LED YAKMA   RX TX BİLİ DEĞERLENDİRMEYLE İGİLİ  BİR İPUCU BULAMADIM EN AZINDAN YARDIMCI OLSANIZ BANA SADECE 1 PORT GİRŞİNDEN   FE 09 4A 05 03 01 04 00 92 02 02 01 00 D3                    02 01 00=ok  TUŞUYLA  LED YAKAN BİR PROGRAM YAZABİLİRMİSİNİZ  (02 01 00) OKUYUNCA LED YANSA
YADA BİLDİĞİNİZ BİR ÖRNEK ÇALIŞMA VARMIDIR

YARDIMLARINIZ İÇİN TEŞEKKÜRLER

ete

#4
Ete projelerinde Rf termometre programında istediklerin mevcut. Ayrıca seri heberleşme mantığını kavraman için algoritma ve program çözümleri kısmında çalışılmış olan master slave ilişkisi konusunuda incele. Bu iki konu bir şeyler biliyorsan istediğin şeyi yapmak için yeterlidir. Yapman gereken yalnızca usart kesmesini aktive edip gelecek bilgileri almak alırkende işaretçiyi senin data formatının İlk 3-4 karekteri olarak belirlemek ardından gelecekleride değişkenlere aktarmak olmalıdır.

Ete

levo_levent

#5
Ete hocam sizin projenizde değişiklikler yaparak istediğimi başardım emekleriniz için teşekkürler projeleriniz çok yardımcı oldu
bir konuda yardıma ihtiyacım var  IF Cnt=$0A then       $0A  DATA SINA   $00  yapınca   hSerIn , [WAIT ($02,$01),INPUTDATA] yı beklemeden çıkış yapıyor ve sürekli bunu nasıl çözerim


PORTC=0:TRISC=%10000000 
DEFINE OSC 20           
DEFINE HSER_RCSTA 90h   
DEFINE HSER_TXSTA 24h   
DEFINE HSER_SPBRG 10     
Cnt       VAR BYTE 50   
inputData var Byte 51'   
TEMP      var BYTE 52
SYMBOL GIE  =INTCON.7 
SYMBOL PEIE =INTCON.6   
SYMBOL RCIE =PIE1.5     
SYMBOL RCIF =PIR1.5     
RCIE=1                 
PEIE=1                 
GIE=1                   
INTCON=%11000000         
ON INTERRUPT GOTO INT

       PAUSE 2000
       HSEROUT  [$FF,$FE,$CD,$01]
       PAUSE 100
       GOTO START
             
START:                   
      IF Cnt=$0A then   
          HSEROUT  ["A"]
          pausE 100
          cnt=0
          endif   

      if CNT=$0B then
        HSEROUT ["BEN"]
        pause 100
        cnt=0
      endif
     
      IF Cnt=$0B then   
      HSEROUT  [''DENEME'']
      pausE 100
      cnt=0
      endif
      goto start

           
DISABLE
INT:
    GIE=0                 
    hSerIn , [WAIT ($02,$01),INPUTDATA]
    Cnt=inputdata       
    TEMP=RCREG         
    GIE=1
    Resume
enable

END

ete

Sorunu çok iyi anlamadım. Bu nedenle yeniden açıklamanı istiyorum.
Programda bir iki kusur var. Birincisi;
    if CNT=$0B then
        HSEROUT ["BEN"]
        pause 100
        cnt=0
      endif
     
      IF Cnt=$0B then   
      HSEROUT  [''DENEME'']
      pausE 100
      cnt=0
      endif
      goto start

komut satırlarına bakarsan iki if komut satırıda aynı şeye işaret ediyor CNT=$0B ise aynı şey çin iki ayrı if satırı kullanılmamalıdır.
Burada bir hata olduğunu düşünüyorum. tekrardan incele istersen.

İkinci konu ise programında USARt kesmesi kullanıyorsun ama programında bir sürü PAUSE komutu mevcut.
Kesme olan programlarda Pause kullanmak sakıncalıdır. BASLA satırından sonra gelen bütün O pauseleri sil yerine ;
GOSUB BEKLE yaz.

Disable satırından evvel de;
BEKLE:
FOR W=0 to 2000:next
RETURN
satırlarını ilave et. Süre az gelirse 2000 rakamını dahada artırabilirsin.
Değişken tanımlama bölümüne de;
W  VAR WORD satırını ilave et.

Sorunu anlamadım ama tahmin üzerine bir çözüm önerisi yapayım.
Değişken tanımlama kısmına ALDI VAR BIT satırını ilave et
HSERIN satırından sonra ALDI=1 komutunu ilave et.
O dediğin beklemeden dallanma kısmında ise Dallanma kısmında ise
IF ALDI=1 then dallan yani nereye gidecek ise oraya yönlendir istersen.
Tabiiki gidilen yerde ALDI=0 demen gerekiyor.

Ete

levo_levent

HOCAM DOĞRUDUR IF KOMUTU YANLIŞ OLMUŞ SİZE ÖRNEK GÖNDERMEK İÇİN YAZARKEN OLMUŞ KUSURA BAKMAYIN
DEDİKLERİNİZİ UYGULUYCAK CEVABINI YAZARIM ÇOK TEŞEKKÜRLER

levo_levent

SORUNU AÇIKLAMAYI UNUTTUM  :)  IF KOMUTLRINDAN BİRİNE $00 DATASINI GİRMEM LAZIM   YANİ   GİRİŞİ  $02,$01,$00  GİRİCEK

AMA $02,$01, GİRMEDEN RX DAHA HİÇ DATA GİRİLMEDEN   IF Cnt=$00 then  KOMUTU VARSA PIC AÇILINCA  DİREK IF Cnt=$00 then
ALTINA NE YAZARSAM ONU GÖNDERMEYE BAŞLIYOR

ete

İki türlü konumda CINT=0 olur. Birincisi ilk çalıştırmada (açılışta) , ikinciside gerçekten usart dan  0 data sı geldiğinde. Bu ikisini birbirinden ayırd etmek gerekiyor işte  bunun için aldı isimli bit değişkenide kullandım.

Hserin [wait ($02,$01),inputdata] komut satırı altına
Aldı=1 yazdık
Ardından ana program bölümünde de şunları yaptık,
If CNT=$0A and aldi=1 then
Aldi=0
....
...
Endif

If CNT=$00 and Aldi=1 then
Aldi=0
.....
....
Endif
Şeklinde yaparsan söylediğin olumsuzlukları yaşamazsın.
Bu algoritmanın açıklaması şöyle,
Gerçekten seri port dan bir bilgi gelmiş ise istenenleri yap değilse yapma.

Hepsi bu.

Ete

Powered by EzPortal