Infra jelek dekódolása

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

Igen ez így nagyon frankó, működik oda vissza mindkettő chipről és közben látom is a bascomban a küldött adatokat. Viszont valami érdekes jelenségggel állok szemben.

itt van a két kód:

adó:

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

$regfile = "m168def.dat"
$crystal = 16000000
$baud = 9600

Echo Off

Dim Code As Bit

Code = 1

Do
   Print Code
   Wait 2
Loop

End
Vevő:

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

$regfile "attiny2313.dat"
$crystal = 16000000
$baud = 9600

Echo Off

Dim Code As Bit
Config Portd.6 = Output

Code = 0

Do
Input Code
   If Code = 1 Then
      Toggle Portd.6
      Waitms 200
      Toggle Portd.6
      Else
         Toggle Portd.6
         Waitms 100
         Toggle Portd.6
         Waitms 100
         Toggle Portd.6
         Waitms 100
         Toggle Portd.6
   End If
Code = 0
Loop

End
Lehet hogy nagyon félrenézek valamit de két másodpercenként villan kettőt a led pedig a bascomban egyértelműen látom az 1-eseket.
Ha kihagyom az Input Code parancsot pedig folyamatosan villog 100ms-enként.
Tehát akkor az input parancs megvárja a jelet és csak akkor megy tovább a program. Na ezt nem tudtam és erre voltam nagyon kíváncsi.
ha felcserélem a vevőben a 0-1 értékeket akkor pedig 2 másodpercenként villan egy hosszút.
De mi lehet a baj?
Köszönöm.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Tessék byte alapon kezelni a CODE-t....


A 2. prgben az If-Else részt nézd meg.... Ezért villog....
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

Igen biztos hogy azzal van a baj de mi? Ennyire nem látok valamit?
Ha a code 1 és 1-et is kap akkor miért futtatja le az else részt?
Mindjárt megpróbálom másképp.
Holnap kipihent fejjel meg lehet kiröhögöm magam milyen hulye voltam. :)
THX
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Robi meg írta neked!
Nem!: Dim Code As Bit
Hanem : Dim Code As Byte
1 Bit-et nem lehet sorosporton átküldeni!
A legkisebb érték a 1 Byte.

:D
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

Persze az volt az első hogy átírtam byte-ra de még mindig kettő rövidet villan.
Itt valami más is van. Már sejtem hogy mi.
Köszi
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

Beleírtam az epromba a kapott értéket.
Elvileg 101-et küldök de mikor kiolvasom csak 10-et ír.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ha látnánk a kódokat, talán még segíthetnénk is! :wink:
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

Bocsi.
Előszőr ezt futtattam a vevőn:

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

$regfile = "attiny2313.dat"
$crystal = 16000000
$baud = 9600

Dim Eprom As Eram Byte
Dim Code As Byte

Config Portd.6 = Output

Do
   Wait 2
   Toggle Portd.6
   Wait 1
   Toggle Portd.6
   Wait 1
   Toggle Portd.6
   Wait 1
   Toggle Portd.6
   Wait 1
   Input Code
   Eprom = Code
   Wait 1
   Toggle Portd.6
   Waitms 200
   Toggle Portd.6
   Waitms 200
   Toggle Portd.6
   Waitms 200
   Toggle Portd.6
   Wait 10
Loop
Aztán ezzel olvastam ki:

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

$regfile = "attiny2313.dat"
$crystal = 16000000
$baud = 9600

Dim Eprom As Eram Byte
Dim Code As Byte

Config Portd.6 = Output

Do
   Waitms 500
   Code = Eprom
   Print Code
   Wait 1
Loop
Az adó változatlan maradt csak a code-ot átírtam 101-re.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Elképzelhető több hibalehetőség is!

1.: A 16MHz qkvarcnak 9600 Baudon van 0.16% ERROR eltérése!
Ha 14.746MHz kavicsot használsz 0.0% a hiba eltérés.
Soros adat átvitelnél erre oda kel figyelni!

2.: EEPROM H0000-cimet ne használd mert nem megbízható! (Bizonyos hardver hibák miatt.)
Javaslom így kihagyni:
Dim Epr_kuka As Eram Byte ’Elsö Byte Kuka
Dim Eprom As Eram Byte ’2.-tól használjad

3.: A két külön program nem biztos, hogy ugyanarra a címre teszi Eprom Byte-t.

4.: Ne tegyél szabadon futó ciklusba EEPROM írást! Mert pillanatok alatt túllépi a maximális írások számát, és utána használhatatlanná válik az a terület!

Ezenkívül lehetnek még különböző HW hibák, amit így távolról nehéz kiszűrni.
Kitartás müködni fog az!
:wink:
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

Ok köszi.
Megpróbálom ezeket a lehetőségeket.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Esetleg próbáld meg ezt a rövid vevő rutint:

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

Dim Code As Byte , I As Byte

Config Portd.6 = Output

Do
   Code = 0
   Code = Inkey()                                           'get Byte value from serial port
'   Code = Waitkey()                                         'Ez Megvárja a beérkező jelet ha nem villog valami hiba van
   If Code > 0 Then
      For I = 1 To Code
         Toggle Portd.6
         Waitms 200
         Toggle Portd.6
         Waitms 200
      Next I
   End If
Loop

End
Ez folyamatosan újra olvass a soros portot, és ha 0-nál nagyobb értéket kap annyi szór villog.
Mondjuk így a bejövő 0-át nem jelzi, de tesztelésnek jó lesz.
'Ha felcseréled a ’-jelet. Megvárja a beérkező jelet.
Ha nem villog valami hiba van
8)
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

Egyre reménytelenebb a helyzet

Rátettem a rutint az attinyre és ez történt:

Ha ezeket az értékeket küldöm ezt kapom:

5 - 76
6 - 77
1 - 72
15 - 115
16 - 116

Hiba biztos nincs mert mindegyiket 3x elllenőriztem és ugyanazt adták miníg. Már vibrál a szemem a sok led villogástól.

Nem lehet hogy az a baj hogy a miniboardról küldöm az adatokat az pedig usb-keresztül van a gépen? Mert arról kepja mindkettő a tápot.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ja azt elfelejtettem írni, hogy csak 1 adatot küldjél utána hosszú-hosszú szünet!
Mert a vevőben a sok villogás olyan hosszú időbe telik, hogy a közben bejövő újabb adat folyamatos villogást fog eredményezni! És nem látod hol a kettő határa.
Legjobb lenne az adóra is tenni 1 LEDet, ami villan adáskor. És utána kel a vevőnek elkezdeni villogni.
:idea:

Az USB tápja Én nálam ennél jóval nagyobb rendszert is elbír!
Avatar
Allspark
Bitmanipulátor
Hozzászólások: 106
Csatlakozott: 2009. július 9. csütörtök, 6:00

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

A kapcsolatot rögtön bontottam mikor átment a jel, és a miniboardon a programozást mutató led villog a jelek küldésénél.

Az USB-nél arra gondoltam hogy az is sorosport átalakítón keresztül kommunikál és látom is közbe a terminal emulatorban hogy folyamatosan azt a jelet küldi amit neki kell. valahogy rosszul fogja fel a vevő vagy nem tudom.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Vagy tehetsz még 1 LEDet PortD.5-re és az jelzi a ciklus idő tartalmát.
Hozzá való program:

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

Dim Code As Byte , I As Byte

Config Portd.6 = Output
Config Portd.5 = Output
Do
   Code = 0
   Code = Inkey()                                           'get Byte value from serial port
'   Code = Waitkey()                                         'Ez Megvárja a beérkező jelet ha nem villog valami hiba van
   If Code > 0 Then
      Toggle Portd.5
      For I = 1 To Code
         Toggle Portd.6
         Waitms 200
         Toggle Portd.6
         Waitms 200
      Next I
      Toggle Portd.5
      Waitms 200
   End If
Loop

End
Válasz küldése