RS232 két mikrokontroller között

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Cinege446
Biztosítékgyilkos
Hozzászólások: 67
Csatlakozott: 2008. július 22. kedd, 6:00

Re: RS232 két mikrokontroller között

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

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! :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RS232 két mikrokontroller között

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

Körbejárni? Ugyan. Ez csak a felszín kapargatása volt :P ...
Avatar
Cinege446
Biztosítékgyilkos
Hozzászólások: 67
Csatlakozott: 2008. július 22. kedd, 6:00

Re: RS232 két mikrokontroller között

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

Erre mondják, hogy boldogok a tudatlanok! :)
Avatar
Cinege446
Biztosítékgyilkos
Hozzászólások: 67
Csatlakozott: 2008. július 22. kedd, 6:00

Re: RS232 két mikrokontroller között

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

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ó

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
Vevő

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
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RS232 két mikrokontroller között

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

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
Avatar
Cinege446
Biztosítékgyilkos
Hozzászólások: 67
Csatlakozott: 2008. július 22. kedd, 6:00

Re: RS232 két mikrokontroller között

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

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

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
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RS232 két mikrokontroller között

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

Mert elbaltázod a küldő oldalt:

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

 Print 3
 Waitms 50 '<---Ez nagyon rövid!
 Print 1
 Wait 5
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)
Avatar
Cinege446
Biztosítékgyilkos
Hozzászólások: 67
Csatlakozott: 2008. július 22. kedd, 6:00

Re: RS232 két mikrokontroller között

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

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
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RS232 két mikrokontroller között

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

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...
Avatar
Cinege446
Biztosítékgyilkos
Hozzászólások: 67
Csatlakozott: 2008. július 22. kedd, 6:00

Re: RS232 két mikrokontroller között

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

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. :(
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Re: RS232 két mikrokontroller között

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

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?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RS232 két mikrokontroller között

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

Küldd át a hőmérő HEX chipID-jét is.

vagy

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

Print azonosito1;hofok1
Print azonosito2;hofok2
 ...
Karaktersor kiemeles: mid$
érték-string átalakítás: str; val
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Re: RS232 két mikrokontroller között

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

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?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RS232 két mikrokontroller között

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

getkey(), inkey()
ill ha a végén enter van: input()
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

Re: RS232 két mikrokontroller között

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

input(1) = A

ezzel az első karaktert vizsgálom?
Válasz küldése