PIC İLE LG TV KONTROLÜ

Başlatan onertan, 30 Temmuz 2021, 14:25:23

onertan

Merhaba arkadaşlar,
Evimdeki LG tv kontrolü için bir proje hazırlıyorum. Hazırladığım kod aşağıdadır. Fakat bir türlü çalıştıramadım. Devremin doğru hazırlandığını birçok kere test ettim yani devrede bir sorun yok. Sorun kodda. Aşağıdaki kodda televizyonu açıp kapatmaya çalışıyorum. Örnek kodu internette buldum, kendime uyarladım ama çalıştıramadım. Destek olursanız sevinirim. Veya çalıştığını bildiğiniz başka bir örnek varsa onu da deneyebilirim ama devremde pic muhakkak 18f4525 olmalı ve kristal 20Mhz olmalı (devreyi bu şekilde hazırladım)
yardımlarınız için teşekkür ederim


#include <18F4525.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(crystal=20000000)

#use pwm (output=pin_c2, FREQUENCY = 38KHz, DUTY = 25)


void send_signal(unsigned int32 number)
{
   int8 i;
   pwm_on();
   delay_ms(9);   //9ms başlangıç sinyali
   pwm_off();
   delay_us(4500); // 4,5 ms bekleme sinyali
   for(i=0; i<32; i++)
   {
      if(bit_test(number, 31 - i))
      {
         pwm_on();
         delay_us(560);
         pwm_off();
         delay_us(1680);
      }
      else{
         pwm_on();
         delay_us(560);
         pwm_off();
         delay_ms(560);
      }
   }
}


void main()
{
   
   while(TRUE)
   {
      if(input(pin_b4))                     // Butona basıldığında kodu gönder
      {
         send_signal(0x20DF10EF);           //LG TV On/Off kodu
      }
   }
}

gokhan1500

Tv nin kullandığı bir protokol ve burdaki sinyallerin zamanlamaları vardır. Devren sinyal üretiyormu diye ir lede telefom kamerası ile bakabilirsin. PIC Config ayarlarında kullanılan kristale göre tip seçimi yapmalısın. Harici osilatör kullanıyorsan HS olmalıdır.

sadogan

Kristal ayarı yok
kristaliniz 20MHZ ise
#use delay(clock=20MHz,crystal=20MHz)
Bu şekilde düzenleyin.

ete

Kodlardan anlaşıldığı üzere TV, NEC protokolü kullanıyor.
Nec protokolünde format şöyle, 9 ms HIGH biti (Header sinyali oluyor) ardından 4,5 mslik LOW biti (Header_End biti) yollanıyor.
Bu sinyalin ardından 8 bitlik Cihaz Kodu peşine yine 8 bitlik aynı cihaz kodu ters çevrilerek yollanıyor (Terleniyor).
Peşine 8 bitlik Tuş kodu ve yine peşine 8 bitlik tuş kodu terslenerek tekrarlanıyor.
Böylece toplam 32 bitlik bir sinyal aktarılmış oluyor.
Olayı rakamlarla ifade edecek olursak, Cihaz kodu $20 olsun yollanacak tuş kodu ise $1F olsun.
Önce 9ms lik "1" sinyali ardından 4,5ms lik "0" sinyali yolladıktan sonra, %0010 0000, ardından %1101 1111 ardından $0001 1111 ve ardından %1110 0000 yollanır.
Toplam sinyali birlikte verecek olursa 00100000110111110001111111100000

Burada dikkat edilecek olursa %00100000 olan cihaz kodu terslenirse (not işlemi) %11011111 halini almaktadır.
Bir konua daha değinmek isterim.
NC protokolünde tuş kodları nı araştırdığımda POWER_ON=$1F , POWER_OFF=$1E kodlarını buluyorum.
Programda ise bu değer $10 olarak verilmiş. POWER ile ilgili bir diğer tuş kodu ise POWER_TOGGLE olması gerekir ki buda $07 olarak verilmiş.

Bir diğer konu da verilen bitlerin LSB yani en düşük değerlikli bitden başlayarak verilmesidir.
Bu açıklamaya uygun olarak yukarıda verilen örneği doğru bit sırası ile yeniden verecek olursak,
9ms("1"),4,5ms("0"), 00000100 11111011 11111000 00000111  (Veriliş yönü ===> şeklinde olup en sağdaki bit en son verilen bit olacaktır)

Bu açıklama üzerinen programa bakacak olursak muhtemel hatalar şunlar olabilir.
Başta power on yada OFF kodu olan $10 yanlış kullanılmış diyebilirim. TV on yapılacak ise bu kod $1F yada TV off yapılacak ise bu kod $1E olarak verilmeli.
Diğer bir muhtemel hata ise bitlerin veriliş sırası olabilir. C dilinden çok iyi anlamasamda kod da yer alan (31-i) ifadesi bitlerin MSB den başlanarak verildiğini bana çağrıştırıyor. Bu konuda emin değilim ama kontrol edeilmesinde yarar olduğunu düşünüyorum.

Ete

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