Infra távirányító
Tapasztalat:
Hátha egyszer valakinek segítség lehet...
Ma volt időm foglalkozni egy picit az infra digitalizálással.
Vevő oldal továbbra is a BPW41 fotodióda.
Jelenleg Az első felfutó éllel kezd futni a timer.
Majd a le és felfutó élek megszakítást csinálnak, és ezeknek az értékét változókban tárolom le. (Max 50 Fel és 50 Lefutó él.)
(Elvileg ennek kényelmesen elégnek kell lennie)
Ezután a le és felfutó élek időkülönbségét tárolom a belső eprom-ba.
Egy minta:
Lefutó - és Következő felfutó értékét nem szamítattam ki. így is tisztan latszik. Viszont Volt egy távrangató ami IVERZ-ben nyomta!
Ott már szükség lehet rá.
Sorszám: Felfuto: Lefuto: Kulonbseg:
1: 0 114 114 'Itt jol latszik hogy az adott kodot kesleltetve kuldi....
2: 129 191 62
3: 206 269 63
4: 284 346 62
5: 361 398 37
6: 413 449 36
7: 465 501 36
8: 516 553 37
9: 568 630 62
10: 645 682 37
11: 697 734 37
12: 749 785 36
13: 800 837 37
14: 1940 2054 114 'Ismetel
15: 2069 2131 62
16: 2147 2209 62
17: 2224 2286 62
18: 2302 2338 36
19: 2354 2389 35
20: 2405 2441 36
21: 2457 2493 36
22: 2508 2622 62
23: 2586 2622 36
24: 2638 2673 35
25: 2689 2725 36
26: 2741 2776 35
27: 3881 3992 111 'Ismetel
28: 4010 4070 60
29: 4087 4147 60
30: 4165 4224 59
31: 4242 4276 34
32: 4294 4328 34
33: 4346 4379 33
34: 4397 4431 34
35: 4449 4508 59
36: 4527 4560 33
37: 4578 4612 34
38: 4630 4663 33
39: 4682 4715 33
40: 34555 34665 110 'Ismetel illetve hasztalan toredek
41: 34685 34743 58
42: 34762 34820 58
43: 34840 34898 58
44: 34917 34949 32
45: 34969 35001 32
46: 35020 35052 32
47: 35072 35104 32
48: 35124 35182 58
49: 35201 35233 32
50: 35253 35285 32
Elvileg a kód vége akkor van, amikor a szunet a jel hossz 2x-e.
Így elég addig a pontig letarolnunk az idoziteseket, majd aszt a szakaszt "Visszajatszani".
Észrevételeket szívesen fogadok!
Hátha egyszer valakinek segítség lehet...
Ma volt időm foglalkozni egy picit az infra digitalizálással.
Vevő oldal továbbra is a BPW41 fotodióda.
Jelenleg Az első felfutó éllel kezd futni a timer.
Majd a le és felfutó élek megszakítást csinálnak, és ezeknek az értékét változókban tárolom le. (Max 50 Fel és 50 Lefutó él.)
(Elvileg ennek kényelmesen elégnek kell lennie)
Ezután a le és felfutó élek időkülönbségét tárolom a belső eprom-ba.
Egy minta:
Lefutó - és Következő felfutó értékét nem szamítattam ki. így is tisztan latszik. Viszont Volt egy távrangató ami IVERZ-ben nyomta!
Ott már szükség lehet rá.
Sorszám: Felfuto: Lefuto: Kulonbseg:
1: 0 114 114 'Itt jol latszik hogy az adott kodot kesleltetve kuldi....
2: 129 191 62
3: 206 269 63
4: 284 346 62
5: 361 398 37
6: 413 449 36
7: 465 501 36
8: 516 553 37
9: 568 630 62
10: 645 682 37
11: 697 734 37
12: 749 785 36
13: 800 837 37
14: 1940 2054 114 'Ismetel
15: 2069 2131 62
16: 2147 2209 62
17: 2224 2286 62
18: 2302 2338 36
19: 2354 2389 35
20: 2405 2441 36
21: 2457 2493 36
22: 2508 2622 62
23: 2586 2622 36
24: 2638 2673 35
25: 2689 2725 36
26: 2741 2776 35
27: 3881 3992 111 'Ismetel
28: 4010 4070 60
29: 4087 4147 60
30: 4165 4224 59
31: 4242 4276 34
32: 4294 4328 34
33: 4346 4379 33
34: 4397 4431 34
35: 4449 4508 59
36: 4527 4560 33
37: 4578 4612 34
38: 4630 4663 33
39: 4682 4715 33
40: 34555 34665 110 'Ismetel illetve hasztalan toredek
41: 34685 34743 58
42: 34762 34820 58
43: 34840 34898 58
44: 34917 34949 32
45: 34969 35001 32
46: 35020 35052 32
47: 35072 35104 32
48: 35124 35182 58
49: 35201 35233 32
50: 35253 35285 32
Elvileg a kód vége akkor van, amikor a szunet a jel hossz 2x-e.
Így elég addig a pontig letarolnunk az idoziteseket, majd aszt a szakaszt "Visszajatszani".
Észrevételeket szívesen fogadok!
A hozzászólást 2 alkalommal szerkesztették, utoljára Sanci 2008. július 4. péntek, 8:04-kor.
A belső EEPROM olvasását én változótömbbe olvasnám, és úgy kezelném le...
A kiolvasás elvileg gyors, de jópár utasítás a háttérben.
De egyszerű:
És ezt megnézni szimulátorban, hogy mennyi időt vesz igénybe....
Sajna nincs bascom most a közelemben...
A kiolvasás elvileg gyors, de jópár utasítás a háttérben.
De egyszerű:
Kód: Egész kijelölése
$regfile = "m48def.dat" ' specify the used micro
$crystal = 8000000 ' 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
Dim S As String * 5 , B As Byte , I As Byte , W As Word
Dim Eb As Eram Byte At 13 , Ei As Eram Integer At 14 , El As Eram Long At 16 , Es As Eram String * 10 At 20
'Now read 5 bytes from the EEPROM
'I is the address to read from and the lowest address is 0
'Note however that address 0 can be trashed during reset or start up.
'This is a fault in the AVR design.
For I = 0 To 4
Readeeprom B , I
Print B
Next
'Now write something from code into EEPROM
'assign variable
S = "abcde"
W = 10000
'write string
Writeeeprom S , 5
'Since length is 5 and we also need the ending null byte the next free address
'is 11
'write word
Writeeeprom W , 11
'Now reset the variables
W = 0
S = ""
'Read back
Readeeprom S , 5
Print S
Readeeprom W , 11
Print W
'Now write a byte to EEPROM
B = 10
Eb = B
'read it back
B = Eb
Print B
'Now write string
Es = S
S = ""
S = Es
Print S
'We dont do anything with the normal DATA in this example
'Restore Lbl
'Read b
'Print b
End
'The $EEPROM directive tells the compiler that the data lines that
'follow, must be written to a <prog>.EEP file
'This file can be programmed into the EEPROM
$eeprom
'Now we want to use 5 bytes
Data 1 , 2 , 3 , 4 , 5
'Normally a DATA statement will place the data in the flash ROM.
'So a $DATA statement is not necesarry.
'BUT since we used an $EEPROM directive above, we need to switch
'back to the normal default
$data
'The label named LBL will be used with the RESTORE statement
Lbl:
'Now define the DATA that will be placed in Flash ROM together with your program code
Data 10 , 12
És ezt megnézni szimulátorban, hogy mennyi időt vesz igénybe....
Sajna nincs bascom most a közelemben...
Sziasztok!
Olyanra lenne szükségem, hogy amíg nyomom a táv gombját addig egy kimenet 1 legyen, a másik meg 0.
Sajnos az alábbi módon csak átbillenteni tudom, de úgy marad a kimenet.
Hogyan kellene?
Getinfra
Getrc5(Address , Command)
If Address = 0 Then
Command = Command And &B10111111
Select Case Command
Case 16:
pind.4 = 0
pind.5 = 1
Case 17:
pind.5 = 0
pind.4 = 1
End Select
Olyanra lenne szükségem, hogy amíg nyomom a táv gombját addig egy kimenet 1 legyen, a másik meg 0.
Sajnos az alábbi módon csak átbillenteni tudom, de úgy marad a kimenet.
Hogyan kellene?
Getinfra
Getrc5(Address , Command)
If Address = 0 Then
Command = Command And &B10111111
Select Case Command
Case 16:
pind.4 = 0
pind.5 = 1
Case 17:
pind.5 = 0
pind.4 = 1
End Select
Esetleg Igy:
Kód: Egész kijelölése
Getinfra
Getrc5(Address , Command)
If Address = 0 Then
Command = Command And &B10111111
Pind.4 = 0 'Ha Addres = 0
pind.5 = 1
Select Case Command
Case 16:
Case 17:
End Select
Else 'Ha Addres = !0
pind.5 = 0
pind.4 = 1
End If
Akkor:
Kód: Egész kijelölése
Getrc5(Address , Command)
If Address = 0 Then
Command = Command And &B10111111
Select Case Command
Case 16:
Pind.4 = 0
Pind.5 = 1
Case 17:
Pind.5 = 0
Pind.4 = 1
End Select
Else 'Ha nincs jel kikapcsol
Pind.4 = 0
Pind.5 = 0
End If
Tiszteletem!
Adott egy kapcsolás, abban egy atmega8-as aminek a bemeneteit (portb0-3) szoftveresen felhúztam, a többi kimenetként üzemel.
A bemeneteket egy optós kapcsolással húzom alacsony szintre egy kapcsolóval tehát a bemenetek vagy H vagy L szinten vannak és ennek függvényében vezérlik a kimeneteket.
Akkor így nézne ki a vezérlés
Ez eddig egyszerű, de itt egy kicsit nehezítenék egy kis infrával.
Ha , akkor már ne vegye figyelembe a PortB.0=0-t, csak akkor ha 1 re változik és akkor már ennek a kritériumnak kellene megfelelnie, hogy
Adott egy kapcsolás, abban egy atmega8-as aminek a bemeneteit (portb0-3) szoftveresen felhúztam, a többi kimenetként üzemel.
A bemeneteket egy optós kapcsolással húzom alacsony szintre egy kapcsolóval tehát a bemenetek vagy H vagy L szinten vannak és ennek függvényében vezérlik a kimeneteket.
Akkor így nézne ki a vezérlés
Kód: Egész kijelölése
Ha PortB.0=0 akkor a PortC.0=0
Ha PortB.0=1 akkor a PortC.0=1
Ez eddig egyszerű, de itt egy kicsit nehezítenék egy kis infrával.
Ha
Kód: Egész kijelölése
PortB.0=0 akkor a PortC.0=0 ,de itt ha a PortC.-t infrával 1 re állítom
Kód: Egész kijelölése
PortB.0=1 akkor a PortC.0=0