ınfrared verici

Başlatan hasanb, 01 Kasım 2011, 21:55:58

ete

Yazdıklarından hiç bir şey anlamadım doğrusu.
Ete

pwm.c

PIC i değilde 7805 i uyutmayı dene bence. bu PIC den daha fazla enerji harcar. eğer bunu kapatırsan PIC de kapanmış oluyor zaten.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

pwm3434

#32
ete hocam teşekkür ederim yazılarınızdan  faydalanıyorum. konuyu baştan sona kadar okudum gayet  açık bir dil  ile  anlatmışınız. anlayamadığım  daha  doğrusu  merak ettiğim konu, IR  RX niçin  tersleyerek almak zorundadır, bu tersleme işlemiyle ne hedeflenmiştir.

not: hocam  hasan devrenin çalıştığını söyledi ama sizin anlattıklarınıza  göre az bir  eksiklik var. çünkü hasan data girişini direk olarak yani terlenmemiş olarak pic'e vermiş bunun yanında tx ve tx terslenmemiş durumda serın2 396 ve serout396  mesala: terslenmemiş serout 0 modunda gönderme yapmışsa, eğer alıcının data çıkışı pıc'e direk bağlıysa terslenmiş serout 4 modunda almalıydı, yok eğer alıcının data çıkışı bir transistör ile bağlanmış olsaydı terslenmemiş serout 0 modunda alınması gerekli değilmiydi.
yoksa konuyu iyi anlamışmıyım hocam.

ELZEMEFE

hasab kardeşim devrenin  şu an en son halini çalışan  şekli şemayı koyabilme şansın varmı _?

hasanb

şuanda fazla uraşamıyorum ama devrenin son hali diğer bilgisayarda ben şuanda izmirdeyim kayseriye dönünce atarım kardeş şuanki flas bellekte olannı atıyım.biraz incele yeniside bundan cok farklı değil haberleşmeyi sağladım ancak bazı problemler kaldı şuanda onunla uraşamadığım için fazla geliştiremedim.

hasanb

terlenmiş yada terlenmemiş olarak çalışmasını istiyorsan letin durumunu değiştirir isen devre terlenmiş olarak çalışır.bütün mesele bu ledin picin 9.bacağı yanı pwm sinyali gönderilen bacağa nasıl bağlandığı.buradan data termi düzmü gçndermek istersin bilemem şimdi ben bunu tersleyip gönderdim.şuanda haberşeşmeyi sağladım.ama 1.led yanarken 2.ledi yakmaya çalışınca pic saçmalıyor.şuanda uraşamadığım için pekfazla geliştiremedim.kusura bakmayın.ileriki versiyonlarını isteyen arkadaşlara eklerim.herkese şimdiden başarılar dilerim.

pwm3434

yardımcı olurmusunuz  ustalar  hasanın programı gibi IR  ile data  göderip-alma LCD  de gösterme.devreyi kurdum ama maaalesef çalışmadı, ekranda datayı okuyamadım eksiğim  ve  hatam  nerede olabilir. kodlar ekliyorum
 VERİCİ
@ DEVICE pic16F628                      'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
Include "modedefs.bas"     
trisa=0
trisb=0
CMCON=7

DEFINE IRSEROUT_PORT PORTA
DEFINE IRSEROUT_PIN   0
DEFINE IRSEROUT_BAUD 396

SYMBOL CIKIS=PORTA.0
VER    var  byte
Z      var  byte
PAUSE 200
  BASLA:
  FOR Z=1 TO 255
  VER=Z
  GOSUB GONDER
  PAUSE 300
  NEXT
  GOTO BASLA

GONDER:
  SerOUT2 CIKIS,396,["E",VER]'IR iletişiminde terslenmemiş olarak gönderilmeli ama alıcı terslenmiş olarak almalı.
  return
END
************************************************************
[ ALICI
@ DEVICE pic16F628                      'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
INCLUDE"LCD_tanım"
Include "modedefs.bas"

trisa=255
trisb=%00000000
PortA=0:PortB=0
CMCON=7
AL     VAR  BYTE
GIRIS  VAR  PORTA.0
LCDOUT $FE,1              'Önce Ekranı siliyoruz.
LOW PORTB.2          'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.
PAUSE 200                   ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre

BASLA:
SerIn2 GIRIS,396,[WAIT ("H"),AL]'data'yı terslenmiş olarak almalıdır aksi halde çalışmayabilir
LCDOUT $FE,$C0,#AL
PAUSE 200
GOTO BASLA
End 'Program sonu/code]

hasanb

pwm3434 kardeşim öncelikle devrende hangi malzemeleri kullandn onun bir şemasını koyamazmısın.Sonra programında ır verici olarak infrared led kullandın sanırım. alcıda tk19 var sayıyorum. tk19 38khz-39khz frekanslar dışında başka sinyalleri algılamıyor diye biliyorum bu 38-40 da ola bilir tam hatırlamıyorum datasheetine gir bak. vericin öncelikle 38khz frekans üretmeli sonra bu frekansın üstüne datayı bindirip yollamalısın. programında 38 khz üreten bir satır görmedim.
ilk olarak şifre gönderme sadece bilgi gönder yani ''H'' satırını kullanma doğrudan verini gönder. benim yaptığım programıda aşağıya eklicem.bi kontrol et eskimi yenimi bilmiyorum bu bilgisayarda bulduğum program.konunun ilk sayfadan incelemeye basla belki hatalarını bula bilirsin.

ete

IR haberleşme işinde bazı açıklamalar yaptığımı sanıyordum ama yeniden yapmakta yarar görüyorum.
IR sinyalin gün ışığı ve diğer etkenlerden etkilenmemesi için modülasyon denilen bir sistemle yollanacak bilgi bir diğer sinyalin üzerine bindirilir. Üzerine bindirilen sinyal genelde 38-40 Khz dolayında bir kare dalga dır. Bir örnekle açıklamak daha uygun olacak sanırım.
Elimizde yollanacak %10011010 şeklinde bir veri olsun. Bu bilgiyi IR ile yollamak istersek, kurulacak bir düzenekle ,
- Sıfır olan bitlerin karşılığında direk LOW sinyali
- "1" olan (HIGH) bitler için ise High süresi kadar 38Khz lik bir sinyal
verilmesi yeterli olacaktır.
Bu sinyale bir skop ile bakarsanız kesik kesik verilmiş bir 38 Khz lik kare dalga sinyali görürsünüz. Ama aslında sinyalin içinde sizin veriniz yerleşmiş vaziyettedir. Zira kesik olan yerler verinin sıfır olduğu bitleri, 38Khz lik kare dalga görülen yerlerde ise verinin HIGH olan bitleri yer almış olur.
TK19 gibi Alıcı göz dediğimiz elemanlar bu gelen sinyali ayıklarlar. Yaptıkları iş 38Khz lik sinyali direk HIGH sinyali haline sokmaktan ibarettir. Ancak yapıları gereği çıkış bir NPN transistörden verildiği için gelen sinyalin tersi çıkıştan alınır.
Sinyalin terslenmesinin bir amacı yoktur (ben öyle düşünüyorum).

Bu konu hakkında hazırlanmış en güzel belgelerden biriside Akıl Defterim2 isimli pdf dosyasıdır. Aşağıda yeniden link veriyorum.
Bu dosyayı incelerseniz IR sistemler konusunda hemen hemen her bilgiyi bulabilirsiniz.

https://dl.dropbox.com/u/25364674/Ak%C4%B1l%20Defterimv2.pdf

Ete

pwm3434

ete hocam  orhan altınbaşağın kitabında bu komutlarla 38 khz lik bir sinyalin üretiliceği hakkında  bahsetmiş, yada ben anlayamamışım.
DEFINE IRSEROUT_PORT PORTA
DEFINE IRSEROUT_PIN   0
DEFINE IRSEROUT_BAUD 396


evet hasan  ırled ve tk19 kullandım. Şu an deneyemeyeceğim LCD de sorun oldu hiç bir şey  göstermiyor yenisine bakacam boş  zaman  bulabilirsem.

pwm3434

Hasan eklediğin programda biraz değişiklik yaptım pwm ayarı ile hiç  oynamadım. sonuç şimdilik  gene olumsuz. tk19'u direkt olarak ve de transistör ilede  pic'e girdim olmadı.

pin çıkış veriyor,  kablo ile pic'den pic'e bağlantı yapınca gönderdiğim datayı  LCD'de okuyabiliyorum. gel gelelim tk19 ile datayı alamıyorum IR led ve tk19'u diğer yedek olanlarla değiştirdim ama maalesef.  ete ustam bir el atarmısınız lütfen.
@ DEVICE pic16F628                      'işlemci 16F628A                                
@ DEVICE pic16F628, WDT_on              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
    PORTA=0:PORTB=0
    TRISA=0:TRISB=0
    VERI     VAR BYTE
    CIKIS    VAR PORTA.0
   
    OPTION_REG.7=0
    TRISB.3 = 0
    CMCON=7
    '38 khz pwm band üretimi
    PR2 = 25     
    CCPR1L = 13 
    CCP1CON = %00001100 
    T2CON = %00000100
    prescale
    VERI=0
BASLA:
    VERI=8888
    SerOUT2 CIKIS,396,["B",VERI]
    SerOUT2 CIKIS,396,["B",VERI]
    pause 20
GOTO BASLA
******************************************************
******************************************************
@ DEVICE pic16F628A                      'işlemci 16F628                               
@ DEVICE pic16F628A, WDT_on              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628A, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
INCLUDE"LCD_tanım"
PORTA=0:PORTB=0
TRISA=%00000001   'A portu A.0 giriş diğerleri çıkış yapıldı.
TRISB=%00000000   'B portu tamamı çıkış yapıldı.
AL     VAR  BYTE
GIRIS  VAR  PORTA.0
   
CMCON=7
CLEAR     
PORTB=0:AL=0:GIRIS=0
LCDOUT $FE,1              'Önce Ekranı siliyoruz.
LOW PORTB.2          'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.
PAUSE 200       
BASLA:

SerIn2 GIRIS,396,[WAIT ("B"),AL]                             
LCDOUT $FE,$C0,#AL
GOTO BASLA

ete

#41
pwm3434,

Verilen programı inceleyenler yanılmasın hem verici hem alıcı programı birlikte vermiş PWM3434.
Verici yi incelerseniz yada çalıştırırsanız,  PortA.0 pininden yalnızca seri iletişim bilgisinin , PortB.3 den ise 38Khz lik kare dalga sinyalinin çıktığını görebilirsiniz.

Sistem bu hali ile istenenleri yapmakta uzak tabiiki. Zira TK19 , PortA.0 dan yollanan sinyali alır ise hiç bir şey çözemez.
Yalnızca PortB.3 den yollanan sinyalide alır ise hiç bir şey çözemez. Peki ne yapmak lazım.
Ne lazım olduğunu eklediğim isis devresinde görebilirsiniz.  EKlediğim devrede bir AND kapısı kullanarak iki sinyali birleştirdim.
AND kapsının çıkışından aldığınız sinyali modüle edilmiş sinyaldir. Bu sinyale dikkat ederseniz PortA.0 da sinyal LOW olduğu anda AND kapısı çıkışıda LOW olmaktadır. PortA.0 da sinyal HIGH olunca AND kapısı çıkışı ise 38Khz lik sinyale bindirilmiş HIGH sinyali şekline dönmüş olur.  şimdi bu modüle edilmiş sinyaliTK19'a girerseniz çıkışından aynen PORTA.0 dan çıkan sinyalin tersini alırsınız.
Bu nedenle alıcı programda SERIN komutunda ters çevrilmiş sinyal komutu verilmelidir.

Ete

Edit_1: Isis de IRLINK (IR_Göz) elemanını kullanarak yollanan verinin tersinide oluşturdum. Bu nedenle aşağıdaki RAR dosyasını yeniledim.

Edit_2:
İşi biraz daha ileri götürerek hem alıcı hemde vericiyi aynı devreye kurdum. Birinin verdiğini diğerine aldırdım. Burada dikkate dilecek husus verici devrede yollanan bilginin terslenerek yollanmasıdır. Alıcı normal alacak ama verici veriyi ters çevirerek yollayacaktır.  Buna ait dosylar yine ilişiktedir.

pwm3434

teşekkür ederim  ete hocamız yardımlarınız için.  rarları inceledim verici ve  alıcıda sadece  değişiklik olarak and kapısı verici çıkışına dahil  edililecek ve vericinin terslenmiş olarak gönderilmesini belirtmişsin hocamş eğer tk19 direkt olarak transistörsüz  olarak bağlanmışsa  ki  bu durumda verici terslenmiş olarak gönderebilsin.bu söylediklerim doğrumu hocam.   
ete şu anlık and kapısını piclerle yapabilirmiyim çünkü şimdi memleketteyim kargoya sipariş versem 3 günümü alır eğerki olmazsa malum  kargosparişi

ete

Pic ile AND kapısı yapılması zor ve zaman geciktiren bir konu. Bu nedenle AND kapısını transistörle yapmanı öneririm.  Sİmulasyonda dikkat etmek gerek. Zira AND kapısı çıkışı IR gözün LED kısmını sürmesi gerekir. Bu nedenle dirençlerin ledi sürecek akımı ve voltajı sağlayacak şekilde çok büyük seçilmemesi uygun olur

Aşağıdaki linki incele gereken bilgiler mevcut orada;

http://hyperphysics.phy-astr.gsu.edu/Hbase/Electronic/trangate.html

Ete


pwm3434

ETE hocam gönderdim data değeri 195 döngü söz konusu değilken alıcı tuhaf haller sergiliyor 195 i algılıyor ama  sıklıkla rakamların değeri düşüyor yükseliyor. alıcı doğrudan pın e bağlı verici ise senin verdiğin nand kapısı ile yapıldı  kodlar ise buyur bir bak sorunun ana kaynağı proğrandan mı yoksa devre iyi kuramama mı
VERİCİ
@ DEVICE pic16F628                      'işlemci 16F628A                               
@ DEVICE pic16F628, WDT_on              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
    PORTA=0:PORTB=0
    TRISA=0:TRISB=0
    VERI     VAR WORD
    CIKIS    VAR PORTA.0
   
    OPTION_REG.7=0
    TRISB.3 = 0
    CMCON=7
    '38 khz pwm band üretimi
    PR2 = 25     
    CCPR1L = 13 
    CCP1CON = %00001100 
    T2CON = %00000100
    prescale
    VERI=0
BASLA:
    VERI=195
    SerOUT2 CIKIS,396,["E","T","E",VERI]
    PAUSE 1
    GOTO BASLA
END
***************************************
**************************************
ALICI
@ DEVICE pic16F628A                      'işlemci 16F628                               
@ DEVICE pic16F628A, WDT_on              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628A, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
INCLUDE"tanım_LCD"
PORTA=0:PORTB=0
TRISA=%00000001   'A portu A.0 giriş diğerleri çıkış yapıldı.
TRISB=%00000000   'B portu tamamı çıkış yapıldı.
AL     VAR  WORD
GIRIS  VAR  PORTA.0
   
CMCON=7
CLEAR     
PORTB=0:AL=0:GIRIS=0
LCDOUT $FE,1              'Önce Ekranı siliyoruz.
LOW PORTB.2          'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.
PAUSE 200       
LCDOUT "RRRRRRRRRRRRRR"
BASLA:
SerIn2 GIRIS,16780,[WAIT ("ETE"),AL]                                             
LCDOUT $FE,$C0,#AL,"   ALINDI"
GOTO BASLA


Powered by EzPortal