Infra távirányító

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Sanci
Bitmanipulátor
Hozzászólások: 105
Csatlakozott: 2008. március 14. péntek, 6:00

HozzászólásSzerző: Sanci » 2008. június 19. csütörtök, 17:09

Nagyon köszönöm!

Avatar
Sanci
Bitmanipulátor
Hozzászólások: 105
Csatlakozott: 2008. március 14. péntek, 6:00

HozzászólásSzerző: Sanci » 2008. július 2. szerda, 23:07

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!
A hozzászólást 2 alkalommal szerkesztették, utoljára Sanci 2008. július 4. péntek, 8:04-kor.

Avatar
Sanci
Bitmanipulátor
Hozzászólások: 105
Csatlakozott: 2008. március 14. péntek, 6:00

HozzászólásSzerző: Sanci » 2008. július 4. péntek, 8:03

Az lenne a kérdésem hogy a belső eprom olvasási sebessége vajon megfelelő ? az adott timer értékek kiolvasására, vagy azt is olvastassam vissza változokba és úgy használjam?

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

HozzászólásSzerző: Robert » 2008. július 4. péntek, 8:07

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ű:

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...

Avatar
Sanci
Bitmanipulátor
Hozzászólások: 105
Csatlakozott: 2008. március 14. péntek, 6:00

HozzászólásSzerző: Sanci » 2008. július 4. péntek, 8:49

Nagyon köszönöm. Én is valahogy így képzeltem el.
Ha minden jól megy akkor csak az időkülönbségek lesznek letárolva. Azzal is egyszerűsítve a kódot, és rövidítve a felhasznált eeprom trületet.

Avatar
Ragen
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2010. július 16. péntek, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: Ragen » 2010. július 17. szombat, 8:33

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

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

HozzászólásSzerző: Robert » 2010. július 17. szombat, 8:42

Necces....

A távirányító LED-jét nézd meg, hogy nem ad egyfolytában.
1 sec alatt 1...3 alkalommal küldi el az adatcsomagot.


Tipp:
Programban nézed, hogy adott időben jött-e csomag.
Ha igen: - még égjen a LED.
Ha nem: - kioltható mind2.

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

HozzászólásSzerző: kapu48 » 2010. július 17. szombat, 10:54

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

:?:

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

HozzászólásSzerző: Robert » 2010. július 17. szombat, 12:02

Rajzolj folyamatábrát...


jel van -> Igen/nem
volt jel elotte? -> Igen/nem
Az utolso jel ota eltelt x ido?

Ezek fuggvenyeben mit tegyek?

Avatar
Ragen
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2010. július 16. péntek, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: Ragen » 2010. július 17. szombat, 13:17

Lehet, hogy kicsit félreérthető voltam.
Egy motor vezérléshez kell, amit lehet jobbra-balra forgatni vagy áll. Szóval egyik kimeneten van jel, akkor balra, ha a másikon van jel, akkor jobbra forog.

Kipróbálom, ha csak 1/10 mp-re teszek be egy várakozást utána nullázom a kimenetet..

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

HozzászólásSzerző: Robert » 2010. július 17. szombat, 14:44

És ezt 2 gombbal kell megtenni....
Figyelned akkor is kell, hogy a távirányító darabos jelet ad ki!

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

HozzászólásSzerző: kapu48 » 2010. július 17. szombat, 14:51

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

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

HozzászólásSzerző: Robert » 2010. július 17. szombat, 15:07

getrc5 átlép tovább, ha nem jön jel?
Nem találtam a súgóban.....


A prg-be beraknék egy annyi wait-et, hogy ne rángasson a távirányító impulzuscsomagjai miatt....

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

HozzászólásSzerző: kapu48 » 2010. július 18. vasárnap, 21:04

Elvileg igen! Különben leállna az egész program, ha nem nyomod a távpöckölőt! :lol:

Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

HozzászólásSzerző: gerry » 2010. augusztus 1. vasárnap, 15:10

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

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
, 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

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

PortB.0=1 akkor a PortC.0=0



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