Fórum témák

» Több friss téma
Cikkek » Infra távirányítós lámpa
Infra távirányítós lámpa
Szerző: sonajkniz, idő: Jan 20, 2019, Olvasva: 13370, Oldal olvasási idő: kb. 3 perc
Lapozás: OK   4 / 6

Előszőr nézzük az adó programját:

  1. ;*******************************************************************************
  2. ;* Infrás kapcsoló adó *
  3. ;*******************************************************************************
  4. LIST P=PIC10F322 ; lista megadasa
  5.  RADIX hex ; alapertelmezett szamrendszer megadasa
  6.  #include "p10F322.inc"
  7.  
  8.  __CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
  9.  
  10.  CBLOCK 0x40
  11.  ADATBYTE
  12.  CIKLUS
  13.  CIKLUS2
  14.  CIKLUS3
  15.  ENDC
  16.  
  17.  
  18. WAIT MACRO MENNYIT
  19.  MOVLW MENNYIT
  20.  MOVWF CIKLUS2 ;A késleltetés makrója a T2 időrelén alapul.
  21.  BTFSS PIR1,1 ;Ez nem csak kényelmi megoldás, hanem az adás
  22.  GOTO $-1 ;pontossá és egyszerűvé tétele miatt van.
  23.  BCF PIR1,1
  24.  DECFSZ CIKLUS2
  25.  GOTO $-4
  26.  ENDM
  27.  
  28.  
  29.  org 0x0000
  30.  nop
  31.  
  32. INICIALIZALAS
  33.  CLRF LATA
  34.  CLRF ANSELA
  35.  CLRF ADCON
  36.  MOVLW B'00001000' ;RA3 bemenet. minden egyéb kimenetnek állítva
  37.  MOVWF TRISA
  38.  CLRF OPTION_REG ;Option reg törölve, hogy engedélyezze a WPUA-t
  39.  MOVLW B'00001000' ;RA3 belső felhúzó ellenállása bekapcsolva
  40.  MOVWF WPUA
  41.  MOVLW B'01010000' ;Oscillátor 4MHz-re állítva.
  42.  MOVWF OSCCON
  43.  MOVLW B'00000100' ;T2 bekapcsolása. Elő és utóosztó nincs.
  44.  MOVWF T2CON ;T2 időzítő (PWM periódus ideje) 25-re állítva,
  45.  MOVLW .25 ;(ami valójában 26) így a PWM frekvencia kb
  46.  MOVWF PR2 ;38,5 KHz.
  47.  MOVLW B'10000000' ;PWM2 kiválasztása.
  48.  MOVWF PWM2CON
  49.  CLRF PWM2DCL
  50.  MOVLW .13 ;Kitöltés beállítása
  51.  MOVWF PWM2DCH
  52.  MOVLW .20
  53.  MOVWF CIKLUS3
  54.  ;---------------
  55. MAIN
  56.  WAIT .250 ;Adatküldés előtti és küldések közötti kb. 13msec-es
  57.  WAIT .250 ;várakozás
  58.  MOVLW .112
  59.  MOVWF ADATBYTE
  60.  CALL KULDES ;Első adat küldése
  61.  WAIT .10 ;Az adatok küldése között van kb. 250 usec várakozás
  62.  MOVLW .25
  63.  MOVWF ADATBYTE
  64.  CALL KULDES ;Második adat küldése
  65.  WAIT .10
  66.  MOVLW .52
  67.  MOVWF ADATBYTE
  68.  CALL KULDES ;Harmadik adat küldése
  69.  WAIT .10
  70.  MOVLW .250
  71.  MOVWF ADATBYTE
  72.  CALL KULDES ;Negyedik adat küldése
  73.  DECFSZ CIKLUS3 ;Adatcsomag visszaszámláló. 20 küldés után befejezi
  74.  GOTO MAIN ;az adást.
  75.  CLRF PWM2CON
  76.  CLRF LATA
  77.  GOTO $-0
  78. KULDES
  79.  MOVLW .8 ;Ciklusszámlálót feltöltöm 8-al.
  80.  MOVWF CIKLUS
  81. KULDES1
  82.  WAIT .10 ;Az adatbyte elküldése egyszerűsítve van. A WAIT
  83.  BSF PWM2CON,6 ;időzítő a PWM periódusait számolja. Bit küldés előtt
  84.  WAIT .10 ;10 periódust kivár, majd engedélyezi PWM kimenetét.
  85.  BTFSS ADATBYTE,7 ;Újabb 10 periódus után megnézi, hogy az adatbyte 7-es
  86.  BCF PWM2CON,6 ;bitje mi. Ha alacsony, lekapcsolja a PWM kimenetet.
  87.  WAIT .15 ;Ezután újabb 15 periódust kivár, majd függetlenül a
  88.  BCF PWM2CON,6 ;PWM kimenet állapotától, lekapcsolja azt.
  89.  RLF ADATBYTE ;Ezután eggyel balra tolja az adatbyte bitjeit.
  90.  DECFSZ CIKLUS ;Végül levon egyet a ciklusszámláló értékéből.
  91.  GOTO KULDES1 ;Ha ciklusszámláló még nem 0, akkor ciklus elejére, ha
  92.  RETURN ;0, akkor a meghívási pontra ugrik.
  93. ;-------------------------------------------------------------------------------
  94.  END

Most pedig az ígért részletes leírás:

A konfigurációs beállítások és a cblock elemeinek beállítása után a 18. sortól a 24. sorig található egy makró. Ez a makró a programon belüli késleltetések egyszerűbb létrehozásáért készült.
A timer 2-es időrelén alapul, annak ciklusait számolja. Timer 2 az infra adó frekvenciájáért felel, de ezt majd később.

Az inicializálást nem részletezem, mert azt szerintem mindenki érti, aki bármilyen nyelven is 
írt már programot, de azért érdemes a beállításokat megnézni.

Maga a tényleges program egy 13 msec-os várakozással kezdődik. Mivel az adás többször
is lemegy, ezért az adások közt kell egy kis szünetet tartani. Ennek a szünetnek a vevő programjában van igazán jelentősége. Ott majd látni fogjátok, miért épp ennyi ez a szünet.

Az 52. sortól kezdődik az adatok elküldése. Két byte küldés között is van egy rövid szünet. Ennek igazából nincs jelentősége jelen esetben, de ha nagyobb adatmennyiséget küldenénk, akkor a vevő programja más volna, és két byte között akkor már kell a szünet. 
A 73. sorban lévő ciklusszámláló lejártáig ismétlődik a program. Ezt követően lekapcsol a
kimenet és a 77. sorban gyakorlatilag unatkozik a PIC. 

Most pedig jöjjön a küldő rutin. Ez igényli a legtöbb magyarázatot, mert eléggé eltér a megszokott
megoldásoktól.

A 79-80-as sor még szokásos, feltölti a ciklusszámlálót a byte elküldéséhez.
Utána jön a tényleges adás, ami egy szünettel kezd. Bár ez a szünet elvben lehetne a rutin végén
is, de akkor az első PWM impulzus kimaradna. Maga a szünet 10 PWM ciklus hosszú. Az adás rutin 
egyik érdekessége, hogy időzítések helyett a kiküldött impulzusokat számolja. 
Tehát a szünet után bekapcsolja a PWM kimenetet, azaz a beállításoknak megfelelő ütemben és
ideig villogtatja a LED-et. 10 impulzust kivár, majd megnézi, hogy a küldendő byte 7. bitje milyen. 
Ha alacsony, lekapcsolja a PWM kimenetet, ha magas, békén hagyja. Ezután vár újabb 15
impulzust, és függetlenül attól, hogy az előbb lekapcsolta-e vagy sem a PWM kimenetet, most megteszi. Ezt követően 1-el balra tolja az adatbyte bitjeit, majd levon egyet a ciklus számlálóból.
Amennyiben még nem járt le, úgy a rutin elejére ugrik, ha lejárt visszatér a meghívási pontra.

Ezzel a módszerrel egyfelől nagyon egyszerű az adás rutin, másfelől a vevő számára mindig
pontos mennyiségű impulzus érkezik, azaz az időzítésekben nem keletkezhet elcsúszás.


A cikk még nem ért véget, lapozz!
Következő: »»   4 / 6
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem