RS232 két mikrokontroller között
Re: RS232 két mikrokontroller között
Nem-nem, én sem akarok a belső órajellel kínlódni, ez most csak egy kényszermegoldás volt, amíg a külső kvarc órajelével be nem tudom indítani. Mindenesetre nagyon szépen köszönöm a segítségedet! Sikerült jó alaposan körbejárnom az adatátvitel témaköreit!
Re: RS232 két mikrokontroller között
Körbejárni? Ugyan. Ez csak a felszín kapargatása volt ...
Re: RS232 két mikrokontroller között
Erre mondják, hogy boldogok a tudatlanok!
Re: RS232 két mikrokontroller között
Ismét megakadtam. Időközben áttértem az m328-as IC-re, de ez semmit sem változtatott, mivel az eddig működő programok most is mennek. A baj ott van, hogy több adatot külön-külön változóba nem tudok lementeni! A célom az lenne, hogy elküldök két számot (C, D) külön üzenetként, majd ezek összegével megegyező számban villantok fel egy LED-et. A programra adott válasz voszont a következő. Először felvillan 3-szor a LED, majd 1-szer és ettől kezdve csak 3-at hajlandó villanni. Az én zavaros fejemben logikusan ez úgy futna le, hogy a vevő várja az első adatot, azt lementi a "C" változóba, újabb adatra vár, az lesz a "D", majd elvégzi velük a szükséges műveleteket, felvillantja a LED-et 4-szer, és kezdi ezt előlről. Próbáltam az inputtal és a waitkey utasítással is, de egyik sem működött.
Adó
Vevő
Adó
Kód: Egész kijelölése
$regfile = "m328pdef.dat"
$crystal = 1000000
$baud = 4800
Echo Off
Do
Print 3
Waitms 50
Print 1
Wait 5
Loop
Kód: Egész kijelölése
$regfile = "m328pdef.dat"
$crystal = 1000000
$baud = 4800
Echo Off
Dim A As Word
Dim B As Word
Dim C As Byte
Dim D As Byte
Config Portc.5 = Output
Ki Alias Portc.5
Do
C = Waitkey()
D = Waitkey()
A = Val(c)
B = Val(d)
A = A + B
For D = 1 To A
Set Ki
Waitms 300
Reset Ki
Waitms 300
Next
Wait 1
Loop
Re: RS232 két mikrokontroller között
A waitkey az 1 gombot vár.
A "print 1" az bizony 3 gomb: 1, <10>,<13>.
Vagy
a, waitkey és print 1;
vagy
b, input és print valami
A "print 1" az bizony 3 gomb: 1, <10>,<13>.
Vagy
a, waitkey és print 1;
vagy
b, input és print valami
Re: RS232 két mikrokontroller között
"A waitkey az 1 gombot vár."
Nekem pont ez lenne a jó! Ha az adó elküldi az 1 10 13 kombinációt, akkor abból nekem a 10 és a 13 szükségtelen, így én azt hittem, hogy azt nemes egyszerűséggel figyelmen kívül fogja hagyni.
Átírtam a programot úgy, hogy a teljes karakterláncot fogadja a vevő, majd kiválasztom az első elemet és ezzel végzem el az összegzést, de csak a legelső üzenetet fogadja, vagyis a 3-ast, és ennyiszer villantja meg a LED-et, utána pedig nem csinál semmit.
A vevő kódját erre módosítottam:
Nekem pont ez lenne a jó! Ha az adó elküldi az 1 10 13 kombinációt, akkor abból nekem a 10 és a 13 szükségtelen, így én azt hittem, hogy azt nemes egyszerűséggel figyelmen kívül fogja hagyni.
Átírtam a programot úgy, hogy a teljes karakterláncot fogadja a vevő, majd kiválasztom az első elemet és ezzel végzem el az összegzést, de csak a legelső üzenetet fogadja, vagyis a 3-ast, és ennyiszer villantja meg a LED-et, utána pedig nem csinál semmit.
A vevő kódját erre módosítottam:
Kód: Egész kijelölése
$regfile = "m328pdef.dat"
$crystal = 1000000
$baud = 4800
Echo Off
Dim A As Word
Dim B As Word
Dim E As Word
Dim C As String * 7
Dim D As String * 7
Dim F As String * 1
Dim G As String * 1
Config Portc.5 = Output
Ki Alias Portc.5
Do
Input C
F = Mid(c , 1 , 1)
Input D
G = Mid(d , 1 , 1)
A = Val(f)
B = Val(g)
A = A + B
For E = 1 To A
Set Ki
Waitms 300
Reset Ki
Waitms 300
Next
Wait 1
Loop
Re: RS232 két mikrokontroller között
Mert elbaltázod a küldő oldalt:
Waitkey()-re a kiküldést a "Print szám;"-ként küld ki, ahol a szám 2...9 lehet.
És a vevőprogramba hiányzik a config serialin (Számolj időt és rájössz: a másodszori kiküldés megtörténik, mielőtt az első kiküldés LED villogtatása feldolgozásra kerülne. Az AVR belső soros vételi buffere 1 v. 3 karakteres (függően a chiptől: M328:3; M16: 1)
Kód: Egész kijelölése
Print 3
Waitms 50 '<---Ez nagyon rövid!
Print 1
Wait 5
És a vevőprogramba hiányzik a config serialin (Számolj időt és rájössz: a másodszori kiküldés megtörténik, mielőtt az első kiküldés LED villogtatása feldolgozásra kerülne. Az AVR belső soros vételi buffere 1 v. 3 karakteres (függően a chiptől: M328:3; M16: 1)
Re: RS232 két mikrokontroller között
Robi! Kíváncsi vagyok a véleményedre ezt a programot illetően! Megkerültem a serialin konfigolását és így műxik! A végét ne figyeld, az csak egy amolyan visszajelzés a számomra, hogy hol van a villogás vége. Nem akartam ott is for ciklusolni, ezért írtam meg ilyen csúnyán
Kód: Egész kijelölése
$regfile = "m328pdef.dat"
$crystal = 1000000
$baud = 4800
Echo Off
Dim Per As Byte
Dim A(6) As Byte
Dim B(6) As Word
Dim E As Byte
Config Portc.5 = Output
Ki Alias Portc.5
Do
For Per = 1 To 6
A(per) = Waitkey()
Next
For Per = 1 To 6
B(per) = Val(a(per))
Next
E = B(1) + B(4)
For Per = 1 To E
Set Ki
Waitms 300
Reset Ki
Waitms 300
Next
Set Ki
Waitms 50
Reset Ki
Waitms 50
Set Ki
Waitms 50
Reset Ki
Loop
Re: RS232 két mikrokontroller között
Csúnya és hibás:
- építesz arra, hogy a két chip egyszerre kapcsolódik be.
- építesz arra, hogy nincs hibás csomag
- veszel jelet (1. adatsor) berakod tömbbe és eldobod a végét. Pazarlás
A serialin bufferen és sima inputra futhastsz. Esetleg inkey() és timeout - megvalósítás sokkal gyakorlatibb megoldás lenne...
- építesz arra, hogy a két chip egyszerre kapcsolódik be.
- építesz arra, hogy nincs hibás csomag
- veszel jelet (1. adatsor) berakod tömbbe és eldobod a végét. Pazarlás
A serialin bufferen és sima inputra futhastsz. Esetleg inkey() és timeout - megvalósítás sokkal gyakorlatibb megoldás lenne...
Re: RS232 két mikrokontroller között
Azért építek rá, mert a két IC valóban egyszerre kapcsolódik be, az adatátvitelben valóban nincs egyetlen hiba sem és szerencsére a pazarlást jelen esetben megengedhetem magamnak. A serialin pufferelés valóban elegánsabb lenne, próbáltam is megvalósítani, de azzal valahogyan nem vergődtem zöld ágra.
Re: RS232 két mikrokontroller között
Nekem is soros porti gondom lenne.
3db ds18b20 hőmérőchip adatait méri 1db atmega8+4*20 lcd
Szeretném soros porton átküldeni egy másik atmega8 chipnek a hőmérsékletadatokat.
Ami kijelzi a bejövő adatokat.
Hogyan tudom megoldani azt hogy a vevő chip azonosítani tudja hogy melyik hőmérőchip adata jött?
A hw készen van.
Arra gondoltam hogy az adatok elé egy karaktert kiírni és vizsgálva az első karaktert evő oldalon azonosítható a csomag.
Ezt Bascomban hogyan lehet kivitelezni?
3db ds18b20 hőmérőchip adatait méri 1db atmega8+4*20 lcd
Szeretném soros porton átküldeni egy másik atmega8 chipnek a hőmérsékletadatokat.
Ami kijelzi a bejövő adatokat.
Hogyan tudom megoldani azt hogy a vevő chip azonosítani tudja hogy melyik hőmérőchip adata jött?
A hw készen van.
Arra gondoltam hogy az adatok elé egy karaktert kiírni és vizsgálva az első karaktert evő oldalon azonosítható a csomag.
Ezt Bascomban hogyan lehet kivitelezni?
Re: RS232 két mikrokontroller között
Küldd át a hőmérő HEX chipID-jét is.
vagy
Karaktersor kiemeles: mid$
érték-string átalakítás: str; val
vagy
Kód: Egész kijelölése
Print azonosito1;hofok1
Print azonosito2;hofok2
...
érték-string átalakítás: str; val
Re: RS232 két mikrokontroller között
Köszi Robi!
A vevő oldali vizsgálat érdekelne.
Hogyan olvasom be az első karaktert, és hogyan társítom hozzá a hőfok értékét?
A vevő oldali vizsgálat érdekelne.
Hogyan olvasom be az első karaktert, és hogyan társítom hozzá a hőfok értékét?
Re: RS232 két mikrokontroller között
getkey(), inkey()
ill ha a végén enter van: input()
ill ha a végén enter van: input()
Re: RS232 két mikrokontroller között
input(1) = A
ezzel az első karaktert vizsgálom?
ezzel az első karaktert vizsgálom?