Infra távirányító

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
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:42

Köszönöm. Megpróbálkozok vele.
és ha betennéák az int1 re egy nyomógombot és ezt lenyomva egy változó értékét 0 ra állitanák amit az időigényes végtelen ciklusban lekérdezgetek folyton és ha érzi hogy 0 akkor visszaállitja 1 re és viszsaugrik az előző menüpontba?
hmm -- azthiszem az estémet a próbapanel mellett fogom eltölteni.

Am hogy lehet az infrát tisztán INT alapon kezelni?
Bocsánat hogy enniyt kérdezek de a tudásszomj :roll:

Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00
Tartózkodási hely: Perbál
Kapcsolat:

HozzászólásSzerző: tetye » 2011. november 27. vasárnap, 0:44

Azt meglehet csinálni valahogy hogy fut egy ciklus amiben sok minden történik néha megáll kicsi majd tovább megy, tehát idő igényes, azt kellene megoldanom ha már rc5 és int0 timer2 mert atmega644, hogy ha távon megnyomok egy gombot és megkapja az rc5 kódot akkor rögtön hagyjon abba mindent és nézze meg a kapott kódot és csak utána foglalkozzon azzal amivel addig. Futó do-loop ból rögtön ugorjon ki és pl írja kijelzőre amit kapott.
Köszi!

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. november 27. vasárnap, 11:18

Sajnos akkor a do-loop ciklusodba sokszor be kell szúrni, hogy figyelje azt a bitet, amivel az INTben azt jelzed, hogy bejött egy adat az infrán. Másik lehetőség, hogy amikor az infra INT-ed megtudja, hogy bejött egy teljes adat, akkor ott azonnal megcsinálja, amit akarsz, de pl. LCD kezelést INTben elég veszélyes csinálni a hosszú futásidő miatt. (no meg akkor, ha a fő do-loop is írogat a kijelzőre, akkor abból semmi jó nem fog származni)
JAni

Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00
Tartózkodási hely: Perbál
Kapcsolat:

HozzászólásSzerző: tetye » 2011. november 27. vasárnap, 11:36

Intben elvileg csak az rc5 ből kapott értéket adnám váltózónak. nem időznék sokat de amíg ott van addig ki kéne kapcsolni hogy abból a megszakításból ne zökkentsék ki.
Másik lehetőség, hogy amikor az infra INT-ed megtudja, hogy bejött egy teljes adat, akkor ott azonnal megcsinálja, amit akarsz,

Erre lenne szükségem, ez hogy kivitelezhető?

Avatar
Gerifield
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2011. szeptember 19. hétfő, 6:00

HozzászólásSzerző: Gerifield » 2011. november 27. vasárnap, 11:53

Interrupt (megszakítás) kell neked.
Sajnos arról, hogy ez AVR-en mint és hogy működik nem sokat tudok, de itt találtam egy leírást, ami esetleg segíthet valamit: http://www.windmeadow.com/node/19

(Eddig azt is csak sejtettem, hogy ilyet tud egyáltalán. Inkább számítógépeken programoztam idáig... :) )

Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00
Tartózkodási hely: Perbál
Kapcsolat:

HozzászólásSzerző: tetye » 2011. november 27. vasárnap, 11:56

c-ül nem tudok. avr magszakításokat pedig használtam már sokat, de ilyen környezetben még nem, ehhez kellene segítség.

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. november 27. vasárnap, 12:19

Az RC5 INT-et nem tudja megszakítani más INT, mert az AVR-ekben nincs prioritásos megszakításkezelés. Tehát ha bejött egy adat, akkor nyugodtan bepakolhatod más változóba, aztán RETURN-nél majd végrehajtódnak azok az esetlegesen beszaladó más INT-ek.
Kommunikációs INTeknél azért arra vigyázni kell, hogy ha több byte-nyi adat jön be, akkor duplán puffereld.

de az eredeti dolog, hogy fő do-loop-ból végrehajtani valamit, akkor az csak normál INT, de ha ennek exit-et kell okoznia, akkor nincs mit tenni, figyelni kell egy jelzőbitet (amit az INT állít), sok helyen.

Persze mivel a feladatot nem ismerem, így ez csak találgatás.

JAni

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. november 27. vasárnap, 12:26

jaj, asszem kapizsgálom, mijagondja.
Szóval a beépített GetRC5 utasítás használatakor jó lenne ráülni erre a belső rutinra, ami INT-es ugyebár és ott még valamit csinálni?
Azért nem ugrott be nekem a gond, mert én infrára saját rutint használok.
JAni

Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00
Tartózkodási hely: Perbál
Kapcsolat:

HozzászólásSzerző: tetye » 2011. november 27. vasárnap, 12:53

Igen valami ilyesmi.
Mert most úgy néz ki hogy kiíratok az lcdre időt dátumot hőfokot és ez folyamatos, ellenben ha a tavon megnyomok egy gombot, nem szeretnék várni 1-2 mp et amire lefut az épp aktuális rutin és megnézi hogy volt e valami, hanem megnyomom és rögtön kiugrik abból a ciklusból és belép egy menübe.

Avatar
xsugix
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2008. május 8. csütörtök, 6:00
Tartózkodási hely: Debrecen

HozzászólásSzerző: xsugix » 2012. január 18. szerda, 18:37

Sziasztok!

Olyan problémám lenne, hogy adott egy tiny2313 sfh 36kHz-es vevő, és egy LCD kijelző.
Megcsináltam a bascom help alapján a kapcsolást, átírtam LCD kiirtaásra. Egy univerzális távirányítót Philipsre állítottam. Megy is rendesen, kiírja a kódot az LCD-re, DE! Ha lenyomok egy gombot, akkor kiír egy kódot (power gomb - 17), viszont ha ismét lenyomom, akkor egy másik kódot ír (pl. 139) következő gombnyomásra ismét az elsőt írja. Ezt minden egyes gombbal ugyanúgy csinálja. Kipróbáltam másik távirányítót is, azzal is ezt produkálja.
Kipróbáltam 2-4-6-8-20 MHz-en járatni az Attiny-t, ugyanaz a jelenség.
Tud valaki segíteni?

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 » 2012. január 18. szerda, 19:19

Standard kérdés: Programkód/minta?

Tipp: az IR kód 7. bitje az un TOGGLE bit. Ez jelszi, hogy az adat eloszor lett kuldve, vagy ismetelt adat...

Avatar
xsugix
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2008. május 8. csütörtök, 6:00
Tartózkodási hely: Debrecen

HozzászólásSzerző: xsugix » 2012. január 18. szerda, 20:50

Jelenleg ezt használom. Viszont nekem az a toggle bit nem sokat mond, még annyira nem értek a programozáshoz, nem mélyültem el benne eléggé.

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

Config Rc5 = Pind.2

Dim Address As Byte , Command As Byte

Enable Interrupts

Cursor Off
Cls


Do
     Getrc5(address , Command)
   Locate 1 , 1
   Lcd Address
   Locate 2 , 1
   Lcd Command
Loop
End

Igaz, ez nem teljesen ugyanaz mint a Bascom helpben, de működik.
Egyébként a kikopizott kóddal is ezt produkálja.

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

$regfile = "2313def.dat"                                   ' specify the used micro
$crystal = 4000000                                         ' used crystal frequency
$baud = 19200                                               ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
'use byte library for smaller code
$lib "mcsbyte.lbx"
 
'This example shows how to decode RC5 remote control signals
'with a SFH506-35 IR receiver.
 
'Connect to input to PIND.2 for this example
'The GETRC5 function uses TIMER0 and the TIMER0 interrupt.
'The TIMER0 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.2
 
'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
Print "Waiting for RC5..."
 
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.2 = 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
End If
Loop
End

print átírva LCD-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 » 2012. január 18. szerda, 20:58

Itt a kulcs:

'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

Avatar
xsugix
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2008. május 8. csütörtök, 6:00
Tartózkodási hely: Debrecen

HozzászólásSzerző: xsugix » 2012. január 18. szerda, 21:18

Csak nagyjából sejtem, hogy mit jelent. Ez benne is van a helpes kódban, ahogy írtam, ezzel is ugyanezt produkálta. Vagy itt kellene változtatnom valamit? :oops: Kicsit még láma vagyok ehhez.. :(

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 » 2012. január 18. szerda, 21:38

Igen. A 7 bit mondja meg, hogy ismétlődő a jel v. sem.


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