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: 3321
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2011. január 31. hétfő, 18:05

IR remote control signal receiver using AVR microcontroller
http://www.scienceprog.com/ir-remote-co ... ontroller/

Bascom and AVR, Encoders
http://www.qsl.net/pa3ckr/bascom%20and% ... index.html
Bascom and AVR
http://www.qsl.net/pa3ckr/index.html
:arrow:

Avatar
nagygabor679
DrótVégénSzéndarab
Hozzászólások: 36
Csatlakozott: 2011. március 29. kedd, 6:00

HozzászólásSzerző: nagygabor679 » 2011. április 13. szerda, 11:18

Sziasztok!

Az http://avrhelp.mcselec.com/index.html oldalon, az GETRC5 parancs leírásánál olvasható példaprogramot szerettem volna kpróbálni. ATmega48 -am van, így átírtam a $regfile = "m48def.dat" és $crystal = 8000000 paramétereket, mást nem módosítottam.

Azt a kapcsolást raktam össze próbapanelen, amit ott le volt rajzolva, csak SFH506 helyett ezt használtam;
http://www.datasheetcatalog.org/datasheet/infineon/2-SFH5110.pdf , ami szerintem elvileg ugyanaz, csak OSRAM gyártmány.

A GETRC5 parancs azonban sosem ad vissza semmitt csak 255-ös értékeket. Kipróbáltam, hogy 10 ms -onként egyszerűen elolvastam a PIND.3 értékét, és kiírtam soroso porton. Ebben az esetben adott életjeleket az infra érzékelő, ahogy nyomkodtam a távirányítót, jöttek 0-ák és egyek vegyesen. Ezzel így semmit nem lehet kezdeni, eléggé véletlenszerűen jöttek az adatok, nyilván időzítés, stb. kellene az értelmezéshez, de amit itt a fórumban olvastam erről az nekem még kicsit sok volt, inkább csak azért csináltam, hogy lássam, a hardver működik-e valamilyen szinten?

Mit javasolnátok, hogyan próbáljam megoldani? Szerezzek valahonann egy TSOP1736-ot? Vagy ennek is mennie kellene?

Egy SAMSUNG tv távirányítóval tudtam kipróbálni, ahogy neten láttam a SAMSUNG az RC5 szabványt használja, de nem vagyok benne biztos. Próbálta már valaki SAMSUNG távirányítóval a GETRC5 parancsot?

Köszi előre is!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. április 13. szerda, 11:23

Tipp: másik processzorral a SENDRC5-ös kódot összerakni.


A vételi hiba oka lehet hogy a 8 MHz belső RC 4...16 MHz közt bárhol lehet (alapban 8 MHz+/- 10%).


Felhúzóellenállás? 100Ohm+10uF kondi a tápszűrésen a TSOP-n?

Avatar
nagygabor679
DrótVégénSzéndarab
Hozzászólások: 36
Csatlakozott: 2011. március 29. kedd, 6:00

HozzászólásSzerző: nagygabor679 » 2011. április 13. szerda, 11:53

Robert írta:A vételi hiba oka lehet hogy a 8 MHz belső RC 4...16 MHz közt bárhol lehet (alapban 8 MHz+/- 10%).


Felhúzóellenállás? 100Ohm+10uF kondi a tápszűrésen a TSOP-n?


8 MHz-re van állítva, ez biztos. +/-10% már okozhat zavart? Külső oszcillátorok pontosabbak, érdemes azzal próbálkozni?

10 uF kondi megvan, de biztos 100 Ohm ellenállás kell?

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3321
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2011. április 13. szerda, 12:16

A 100ohm soros, Áram korlátozó ellenállás a 10u szűrés elé kel.
Felhúzónak 10Kohm kel.
Ahogy a fent idézett *.pdf Figure 2 is ábrázolja.

Próbáltad az Addres-t is kiíratni?
Mert az is változó lehet


Vagyis az: "If Address = 0 Then" feltételt kihagyni a Print előtt!

Avatar
nagygabor679
DrótVégénSzéndarab
Hozzászólások: 36
Csatlakozott: 2011. március 29. kedd, 6:00

HozzászólásSzerző: nagygabor679 » 2011. április 13. szerda, 22:07

kapu48 írta:A 100ohm soros, Áram korlátozó ellenállás a 10u szűrés elé kel.
Felhúzónak 10Kohm kel.
Ahogy a fent idézett *.pdf Figure 2 is ábrázolja.

Próbáltad az Addres-t is kiíratni?
Mert az is változó lehet


Vagyis az: "If Address = 0 Then" feltételt kihagyni a Print előtt!


Mégegyszer átnéztem, szerintem a rajz szerint csináltam.

Az "If Address = 0 Then" -t már korábban is kihagytam, de csak 255,255 -ök jönnek.

Továbbra is az van, hogy GETRC5 semmit nem csinál, PORTD.2-t olvasgatva látszik, hogy nyomkodom a távirányítót.

Egyébként levettem az órajelet 1,0 MHz-re, rámértem, az pontosan 1,00 MHz volt. De 1 MHz-en sem működött a GETRC5.

Visszatettem 8 MHz-re, megmértem az órajelet a CLKO lábon. 8,2 MHz. 0,2 Mhz eltéréstől már borulhat?

Nincs ötletem, hogyan tovább :(

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. április 13. szerda, 22:42

A távirányítód nem RC5-t ad ki :(
Hát.....

RC5 : Phillips lenne az ideális....

Avatar
nagygabor679
DrótVégénSzéndarab
Hozzászólások: 36
Csatlakozott: 2011. március 29. kedd, 6:00

HozzászólásSzerző: nagygabor679 » 2011. április 14. csütörtök, 22:26

Robert írta:A távirányítód nem RC5-t ad ki :(
Hát.....

RC5 : Phillips lenne az ideális....


GETRC5-öt feladtam, Philips távirányító nincs elérhető.

Attól tartok kicsit ovis ötlet, de csináltam egy 36 kHz-es timert. Nézegetem az adott portot, ahol az infra érzékelő van, ha 0-ra vált (távirányítót nyomkodom), elindítom a timert, és az első 128 megszakításkor a porton levő értéket eltárolom, majd 128 érték beolvasása után megállítom a timert, és kiírom a 128 db 0/1-es értéket. Azt gondoltam, hogy esetleg ugyanazt a 0/1 sorozatot fogom kapni ha ugyanazt a gombot nyomom. Hát... majdnem így is lett nagyon hasonló 0/1 sorozatokat kapok, de mindíg van 4-5 helyen eltérés a 128-ból.

Ez nagyon suta ötlet, erre nem pazaroljak több időt?

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2011. április 15. péntek, 7:15

Kisméretű, lapos távirányt akartam életrekelteni (vevője megvolt a készülékből), nagyon sok helyen használják ezeket (HIFI torony, LEDvezérlő stb.), csak a felső fólia változik. Na, persze nem RC5. Kínomban írtam egy kis prg-ot, hátha Neked is segít kideríteni, mivel is állsz szemben:

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

'Kis vacak tßvirßny kˇdok, 13byte
'Standby:
'00,55,55,44,51,11,11,45,55,45,11,11,11
'Mute:
'00,55,55,44,51,11,11,55,55,11,11,11,11
'SUB+:
'00,55,55,44,51,11,11,11,55,54,51,11,11
'SUB-:
'00,55,55,44,51,11,11,14,45,55,15,11,11
'VOL+:
'00,55,55,44,51,11,11,54,55,44,45,11,11
'VOL-:
'00,55,55,44,51,11,11,45,15,51,45,11,11


$regfile = "m128def.dat"
$crystal = 8000000
'$baud9600

' 'configure the first UART for RS232
Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Porte = Input

Config Timer1 = Timer , Prescale = 64
Stop Timer1
On Timer1 Tim1ovf
Enable Ovf1

Config Int6 = Change
On Int6 Impulzus

Dim A(200) As Word

Dim Ct As Byte
Dim Kiir As Byte
Dim Elso As Byte
Dim Kict As Byte
Dim Hanyszor As Word
Dim Kiszint As Bit
Dim Mennyi As Byte

Enable Int6
Enable Interrupts

Elso = 1
Print "Start"

Do
If Kiir = 1 Then
Kiir = 0

   Kiszint = 0
      For Kict = 1 To 100
         If A(kict) = 0 Then
         Goto Nnkict
         End If
      Hanyszor = A(kict) / 62
         For Mennyi = 1 To Hanyszor
            If Kiszint = 1 Then
            Print "1";
            Else
            Print "0";
            End If
         Next Mennyi
Toggle Kiszint
Nnkict:
Next Kict
Print

For Kict = 1 To 200                                         'T÷mb t÷rlÚse
A(kict) = 0
Next Kict
End If
Loop


Impulzus:
If Elso = 1 Then
   Elso = 0
   Timer1 = 0
   Start Timer1
   Ct = 0
   Goto Retike
End If

A(ct) = Timer1
Timer1 = 0
Incr Ct
Retike:
Return

Tim1ovf:                                                    'Timer 1 ßtfordult
Stop Timer1
Timer1 = 0
Kiir = 1
Elso = 1
Return


Ez a sorosra kiküldi binárisban a jött adatsort, persze ez csak teszt!
A tömbbe azt teszi el, hogy a Timer mennyin állt, amikor változott a bejövő jel, utána ebből egy fix érték segítségével számítja ki, hogy 1 v. 0 lehet a bit:
Hanyszor = A(kict) / 62
(itt tudod változtatni, hogy milyen hosszú jelt vegyen 1-0-nak, nálam 64 volt a határ, ezért lett 62 beírva, hogy tuttira benne legyen).
Nagyon vizsgálni nem tudtam, mert nincs tároló szkópom.
JAni
08:14

Avatar
nagygabor679
DrótVégénSzéndarab
Hozzászólások: 36
Csatlakozott: 2011. március 29. kedd, 6:00

HozzászólásSzerző: nagygabor679 » 2011. április 15. péntek, 22:12

winnerbt írta:Kisméretű, lapos távirányt akartam életrekelteni (vevője megvolt a készülékből), nagyon sok helyen használják ezeket (HIFI torony, LEDvezérlő stb.), csak a felső fólia változik. Na, persze nem RC5. Kínomban írtam egy kis prg-ot, hátha Neked is segít kideríteni, mivel is állsz szemben:


Köszi, de sajna nem jutottam előrébb, ugyanolyan szórt értékek jönnek, mint amikor valami kicsit hasonló programot írtam magam is. Valamit nagyon elszúrok, csak még azt nem tudom mit. Valószínűleg a hardver résszel nézek el folyamatosan valamit, pedig már vettem másik infra érzékelőt is. Most azon ügyködök, hogy szerezzek valahonnan kölcsön egy gyári philips távirányítót, megpróbálok külső órajelet használni, hátha az pontosabb. Ha ezeken kívűl van még valakinek ötlete, szívesen veszem....

Avatar
nagygabor679
DrótVégénSzéndarab
Hozzászólások: 36
Csatlakozott: 2011. március 29. kedd, 6:00

HozzászólásSzerző: nagygabor679 » 2011. április 16. szombat, 12:35

Robert írta:A távirányítód nem RC5-t ad ki :(
Hát.....

RC5 : Phillips lenne az ideális....



...és megint igazad volt! Szereztem egy philips távirányítót, elsőre, hiba nélkül működött. Köszi!

Avatar
Theophrast
SzínkódFestő
Hozzászólások: 78
Csatlakozott: 2011. július 17. vasárnap, 6:00

HozzászólásSzerző: Theophrast » 2011. október 8. szombat, 16:32

Sziasztok

Kis segítségre lenne szükségem.
Adott egy atmega32-es az int0 lábán egy TSOP1738 assal.
Egy adott programrészben gyönyörűen beolvassa a távirányítóval kiküldött adatot, de mi történik akkor ha egy időigényes folyamat fut és pl a távirányító jelére szeretnék visszalépni a főmenübe vagy egy változó értékét állitani?
Lehet a távirányító jelét megszakításként kezelni?
Ha valaki felhomályosítana a témával kapcsolatban azt nagyon de nagyon megköszönném. :roll:

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. október 8. szombat, 16:44

hát, a távirányítót INTként vagy lábváltozásként kezeled?
Ha INT -> semmi gond.
Ha lábváltozás: programszervezéssel....

Avatar
Theophrast
SzínkódFestő
Hozzászólások: 78
Csatlakozott: 2011. július 17. vasárnap, 6:00

HozzászólásSzerző: Theophrast » 2011. október 8. szombat, 17:04

Elvileg INT-ként ha jól értelemezem, bár a megszakitásokkal csak nemrég kezdtem el foglalkozni
A programom iylen felépítésű:

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

$lib "mcsbyte.lbx"
Config Rc5 = Pind.2
Enable Interrupts
Dim Address As Byte , Command As Byte


Menu:

Cls
Lcd "1. menüpont"
Locate 2 , 2
Lcd "2. menüpont"

'itt beolvastataom a távirányító által kiküldött jelet
Do
Getrc5(address , Command)

If Address <> 255 Then
 Command = Command And &B01111111

   If Command = 1 Then
   Goto Elso_menupont
   End If

   If Command = 2 Then
   Goto Masodik_menupont

End If
Loop

Elso_menupont:
'itt csinál valamit végtelen ciklusban


Masodik_menupont:
'itt is csinál valamit végtelen ciklusban


hogyan lehet visszatérni az első bejelentkező menübe?
ugye a getrc5-el nem lehet mert azt do loop ciklusban kellene lekérdezni és akkor nem tud mást csinálni az avr amig vár a távirányitó jelére...

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. október 8. szombat, 17:34

Hát, ez a megoldás bitwaittal megy. NEM tisztán INT alapon....

Végtelen ciklusos menüpont esetén a programszervezés nem jó. valahogy szervezd át....


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég