Vezérlés infra porton (infra távirányító)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Vezérlés infra porton (infra távirányító)

Hozzászólás Szerző: kapu48 »

Hali!
Most ismerkedek az Atmel procik lehetőségeivel!
Távszabályzóból kb 1 tucat van a lakásban!
Ezért gondolom ez izgalmas, mást is érdeklő téma!
A távszabályzón van 26 működő gomb.
Összehoztam kezdésnek az alábbi programot.
A vezérlő része kidolgozásra vár!
Oda ki mit tenne? Vagyis ti mit vezérelnétek vele?
Van még pár szabad lába az M16-nak. Jöhetnek az ötletek:
A LED villogást és hangokat nem tudom bemutatni.
De a végcél nem is ez lenne!
Néhány gomb. Futás eredmény:
Waiting for RC5...Power Kilép!
0 1
0 9
0 32
Fel
0 28
OK
0 16
Hangero +
0 17
Hangero -
0 55
Piros
0 12
Kikapcs!
END!
:arrow:


Infra port , az az IrDA soros kommunikáció. Az amiről itt szó van, az Infra távirányítás, infravevő kockával (TSOP17xx/TSOP18xx).
szerk:Admin.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Kód: Egész kijelölése

'-------------------------------------------------------------------
'Vezérlés infra portón.  RC5.BAS
'Vezérlő: Relook400 műhold vevő távszabályzója TV állásban. Működik 25 gomb.
'Ezt találtam amivel működöt is.
'Alaplap: Megaboard Chr
'Proci: Mega16
'Rc5 = PIND.3
'Fordító: Bascom AVR 1.11.9.0
'Dátum: 2008 10
'Írta: Kapu48
'Mem foglalás: 26%
'-------------------------------------------------------------------

$regfile = "m16def.dat"
'use byte library for smaller code
'$lib "mcsbyte.lbx"

$crystal = 14745600
$baud = 19200


'This example shows how to decode RC5 remote control signals
'with a SFH506-35 IR receiver.

'Connect to input to PIND.3 for this example
'The GETRC5 function uses TIMER1 and the TIMER1 interrupt.
'The TIMER1 settings are restored however so only the interrupt can not
'be used anymore for other tasks


'tell the compiler which pin we want to use for the receiver input

Config Rc5 = Pind.3
Config Portd.5 = Output                                     'LED a PortD.5
Portd.5 = 1
Config Porta.6 = Output                                     'Csípogó

'the interrupt routine is inserted automatic but we need to make it occur
'so enable the interrupts
Enable Interrupts

'reserve space for variables
Dim Address As Byte , Command As Byte , I As Byte , Hz As Word , Hossz As Byte
Print "Waiting for RC5...Power Kilép!"

Do
  'now check if a key on the remote is pressed
  'Note that at startup all pins are set for INPUT
  'so we dont set the direction here
  'If the pins is used for other input just unremark the next line
  'Config Pind.3 = Input
  Getrc5(address , Command)

  'we check for the TV address and that is 0
  If Address = 0 Then
     'clear the toggle bit
     'the toggle bit toggles on each new received command
     'toggle bit is bit 7. Extended RC5 bit is in bit 6
     Command = Command And &B01111111
     Print Address ; "  " ; Command
     Hz = Command * 100
     Hossz = Command * 10
      Select Case Command
         Case 0 : Gosub 0_gomb
         Case 1 : Gosub 1_gomb
         Case 2 : Gosub 2_gomb
         Case 3 : Gosub 3_gomb
         Case 4 : Gosub 4_gomb
         Case 5 : Gosub 5_gomb
         Case 6 : Gosub 6_gomb
         Case 7 : Gosub 7_gomb
         Case 8 : Gosub 8_gomb
         Case 9 : Gosub 9_gomb
         Case 10 : Gosub Epg_gomb
         Case 12 : Gosub Pover_gomb                         'Itt Kilépünk
         Case 13 : Gosub Mute_gomb
         Case 16 : Gosub Volumep_gomb                       'Jobbra
         Case 17 : Gosub Volumem_gomb                       'Balra
         Case 28 : Gosub Ok_gomb
         Case 32 : Gosub Fel_gomb
         Case 33 : Gosub Le_gomb
         Case 50 : Gosub Sarga_gomb
         Case 52 : Gosub Kek_gomb
         Case 54 : Gosub Zold_gomb
         Case 55 : Gosub Piros_gomb
         Case 56 : Gosub Felvetel_gomb
         Case 57 : Gosub Rcl_gomb
         Case 60 : Gosub Text3_gomb
         Case 63 : Gosub Text2_gomb
      End Select
  End If
 Loop Until Command = 12
 Print " END! "
'...
End

0_gomb:                                                     '0
   For I = 0 To 1                                           'Command
      Toggle Portd.5
      Sound Porta.6 , 10 , 10                           'Hossz , Hz
      Waitus 200
   Next I
Return

1_gomb:                                                     '1
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

2_gomb:                                                     '2
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

3_gomb:                                                     '3
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

4_gomb:                                                     '4
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

5_gomb:                                                     '5
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

6_gomb:                                                     '6
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

7_gomb:                                                     '7
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

8_gomb:                                                     '8
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

9_gomb:                                                     '9
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Epg_gomb:                                                   '10
   Print " EPG "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Pover_gomb:                                                 '12
      Print " Kikapcs! "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Mute_gomb:                                                  '13
      Print " Mute "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Volumep_gomb:                                               '32
   Print " Hangero + "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Volumem_gomb:                                               '33
   Print " Hangero - "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Ok_gomb:                                                    '28
   Print " OK "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Fel_gomb:                                                   '32
   Print " Fel "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Le_gomb:                                                    '33
   Print " Le "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Sarga_gomb:                                                 '50
   Print " Sarga "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Kek_gomb:                                                   '52
   Print " Kek "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Zold_gomb:                                                  '54
   Print " Zold "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Piros_gomb:                                                 '55
   Print " Piros "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Felvetel_gomb:                                              '56
   Print " Felvétel "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Rcl_gomb:                                                   '57
   Print " RCL "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Text3_gomb:                                                 '60
   Print " Text 3. "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

Text2_gomb:                                                 '63
   Print " Text 2. "
   For I = 0 To Command
      Toggle Portd.5
      Sound Porta.6 , Hossz , Hz
      Waitus 200
   Next I
Return

' RELOOK400 Recevier TV Address = 0:
'Gomb       Command     Gomb        Command
'1          1           Ki/Be       12
'2          2           Némitás     13
'3          3           Pg +        32
'4          4           Pg -        33
'5          5           Menü        59
'6          6           Hang +      16
'7          7           Hang -      17
'8          8           Nyil <      16
'9          9           Nyil >      17
'0          0           Nyil A      32
'EPG        10          Nyil V      33
'RCL        57
'piros      55          Ok          28
'zöld       54
'sárga      50          TXT alsó sor
'kék        52          2.gomb      63
'recevie    56          3.gomb      60

' RELOOK400 Recevier VCR Addres 5:
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2008. október 15. szerda, 19:09-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Kérdés hogyan lehetne hangolni, a fenti programot?
Hogy más távszabályozóval is működjön?

:?:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ezen működik mind a 43 gomb. Alapbeállításban TV1.
Aránylag olcsón beszerezhető.
De lehet próbálkozni más tanítható RC-vel is!

Tipus: 8 in 1 universal Remote Control CK-888. TV1 mód.

Kód: Egész kijelölése

'  Tipus: 8 in 1 universal Remote Control CK-888. TV1 mód.
' Kódok:
'Gomb          Command      Gomb         Command
' 1            1            Play          43
' 2            2            Peuse         14
' 3            3            Rec           44
' 4            4            Stop          41
' 5            5            ~             45
' 6            6            >>            63
' 7            7            A             24
' 8            8            B             22
' 9            9            C             26
' 0            0            D             35
' 1-/11        10          E (sárga)      25
' 2-/12        40          F (piros)      23
' >.<          14          G (zöld)       27
' >.           30          H (kék)        36
' CH-P/C       11          Kontraszt +    29
' Vissza       11          Kontraszt -    28
' Előre        10          Fényerő +      18
' Power Ki/Be  12          Fényerő -      19
' Némítás      13          Szín +         20
' Hang + >     16          Szín -         21
' Hang -  <    17
’ Program le	56
’ Program fel	57 

'
:arrow:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Üdv!
Elkészítetem a fenti 8 In 1-es RC, „Select Case Command” listáját is.
De mivel nem mutatkozik érdeklődés a téma iránt, nem merem untatni vele a Nagyérdemű közönséget! De ha valaki tudna valami dokumentációt, RC protokollról légyszíves közölje!

:lol:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Távszabályozók protokollja:
-ITT Protocol
-JVC Protocol
-NEC Protocol
-Nokia NRC17
-Sharp Protocol
-Sony SIRC
-Philips RC-5
-Philips RC-6
-Philips RC-MM
-Philips RECS80
-RCA Protocol
-X-Sat

Az RC5 a legelterjedtebb.

Hangolás nem lehet, beépített az RC5 rutin.

NECre van a mintáim közt:

Kód: Egész kijelölése

'********************************************************************
'* Program név: ATTiny2313-11.bas                                   *
'* Fordító    : BASCOM AVR, (V.1.11.7.9)                            *
'* Dátum      : 2005-11-26                                          *
'* Honlap     : http://avr.tavir.hu                                 *
'*                                                                  *
'* Írta       : Cseh Róbert                                         *
'* E-mail     : csehrobert@tavir.hu                                 *
'********************************************************************
'ATTiny2313 mintapanel kiegészítő program:
'
'IR URCR vevő

'--- Alapadatok ---
$regfile = "ATtiny2313.dat"
$crystal = 7372800
$baud = 57600
'$baud = 9600

'Int0 beallitasa
Config Pind.2 = Input                                       'INT 0

Dim Kiir As Byte
'Dim Length As Byte
Dim New_signal As Byte
Dim Temp As Word
New_signal = 0


'Timer beallitasa (eltelt idore leolvasasi ciklusoke)
'Timer1 16 bites
Config Timer1 = Timer , Prescale = 1024

'Kvarc=7372800, Prescale=1024
'1 tick=1,38*10e-4 (~13,88 msec)
'1 Overflow= 9,1 sec
Config Int1 = Falling
On Timer1 Beolv
On Int0 Irvetel
Timer1 = 60000

Enable Interrupts
Enable Int0
Enable Timer1
Start Timer1

Do
'itt nem csinal semmit:)
Loop


Irvetel:                                                    'Int0
Temp = Timer1
Timer1 = 60000
Temp = Temp - 60000
Kiir = Temp
If New_signal > 0 Then
      Print Str(kiir)
   Else                                                     'Az elso jelet eldobjuk, nem ismert a starthelyzete
      New_signal = 1
      Kiir = 0
      Print Str(kiir)
End If
Gifr = 128                                                  'ne legyen ujraint (ne duplázzon)
Return

Beolv:                                                      'Timer OF
Timer1 = 60000
New_signal = 0
Return
Gyakorlatilag a 4szögjel le és felfutó éleit írja ki.
Ha pontos mérés kell, akkor a $baudot növeld meg!
A sorosportra kiírás meghamisítja kicsit a mérést.


SONY van: www.mcselec.com

Megvan! Protokollok: http://www.sbprojects.com/knowledge/ir/nec.htm
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Tessék akár a versenyre is nevezni az eredményekkel (a publikáció nem zárja ki a nevezést)....


Mire jó?
- Távirányítós 230V-s ki/bekacsoló
- Színes lámpavezérlés
...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Köszönöm a segítséget, meg a biztatást is!
Olyan nagyobb 230V fejlesztésbe nem akarok belemenni.
Mert ott már életvédelem + leválasztás gondok is vannak.
És magának elkészítheti az ember. De publikálni már nagy fellelőség!
Az asztalon bemutatható kapcsolások. Ledek, relék vezérlése megoldható.
Hogy a relére ki mit köt az már az Ő magán ügye!
Esetleg két áramkör is kommunikálhat egymással ínfra adó-vevővel vezeték nélkül.
Vannak lehetőségek benne, kinek kinek igényei szerint.
:D
Más probléma!
A Bascomban nem lehet szimulálni a külső perifériák működését!
Ezt csak élesben lehet kipróbálni. Valamit olvastam, hogy soros portón vagy Jtagon, lehet debugolni. Csak ezt hogyan kel csinálni? Ezt még nem értem!
:?:
Hooligan01

Hozzászólás Szerző: Hooligan01 »

A soros port debug egyszerűen csak annyi, hogy kiíratod bizonyos regiszterek tartalmát, ill. bármit a futó programban, majd terminalban nézed.
Bascom súgó: "Debug" címszó.

De használhatsz még feltételes fordítást is:

Kód: Egész kijelölése

..
...
Const bug = 3 'ezzel feltételeket állíthatsz

#if bug > 2                        'a feltétel. Nem kell Then ! 
Print "ami itt van, azt belefordítja a bascom"
...
...
#endif                               'egybeírni!

#if bug > 6                        
Print "ami itt van, azt nem.."
...
...
#endif                               
...
Tehát feltételekkel lehet befolyásolni hogy mi forduljon le a kódból.
A többi már csak fantázia kérdése :)

A Bascom sajnos nem támogatja a JTAG (Boundary Scan - google a barátod, wiki a barátnőd) eljárást, sem programozásra, sem futásidejű hibakeresésre.. :(
Csak az AvrStudio.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

némi tipp:

Hibakeresés
Szimulátor alfejezet....
A hozzászólást 1 alkalommal szerkesztették, utoljára Robert 2008. október 18. szombat, 10:58-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ahh de jó! Ez a feltételes fordítás új a számomra!
Eddig a debug sorok elé kézzel raktam ki, vagy töröltem a ’-őt!
Ennek szerintem is érdemes jobban utána olvasni, + kicsit gyakorolni!

:idea: :D
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Hali!

Ki tudja, hogy így egymásba ágyazva használható?

' Feltételes forditás tszt!

Const bug = 3 'ezzel feltételeket állíthatsz

#if bug > 2 'a feltétel. Nem kell Then !
Print "ami itt van, azt belefordítja a bascom"
'...
'...

#if bug > 6
Print "ami itt van, azt nem.."
'...
'...
#endif
Print "ami itt van, azt megint belefordítja a bascom"

'...
#endif 'egybeírni!
:?:
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2008. október 23. csütörtök, 21:15-kor.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

$sim

' Feltételes forditás tszt!

Const bug = 3 'ezzel feltételeket állíthatsz

#if Bug > 2                                                 'a feltétel. Nem kell Then !
Print "ami itt van, azt belefordítja a bascom"
'...
'...
#endif 'egybeírni!

#if Bug > 6
Print "ami itt van, azt nem.."
'...
'...
#endif


Print "ami itt van, azt megint belefordítja a bascom"

'...
End
kisebb-nagyobb jel megfordítva :P

Teszt: Bascom 1.11.9.2.003 Reg.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

$sim

' Feltételes forditás tszt!

Const Bug = 3                                               'ezzel feltételeket állíthatsz

#if Bug > 2                                                 'a feltétel. Nem kell Then !
Print "ami itt van, azt belefordítja a bascom"
'...
'...
'#endif                                                      'egybeírni!
'Ez kiREMelve!

#if Bug > 6
Print "ami itt van, azt nem.."
'...
'...
#endif

#endif                                                      'egybeírni!
Print "ami itt van, azt megint belefordítja a bascom"

'...
End
Lefordította a Bascom....
Melyik verzióban dolgozol?


Azért ennyire nem biztos hogy jó egybeágyazgatni.....
Szóval óvatosan.....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Kijavítva!
Csak lefuttattam:
ami itt van, azt belefordítja a bascom
ami itt van, azt megint belefordítja a bascom
ami itt van, azt belefordítja a bascom
ami itt van, azt megint belefordítja a bascom

Ezek szerint működik!
Mondjuk először jól összekevertem!
:!:

Fordító: 1.11.9.0.001
Válasz küldése