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

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

HozzászólásSzerző: Cinege446 » 2013. július 30. kedd, 17:48

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: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. július 30. kedd, 18:01

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

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

HozzászólásSzerző: Cinege446 » 2013. július 30. kedd, 20:31

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

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

HozzászólásSzerző: Cinege446 » 2013. augusztus 2. péntek, 12:00

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: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. augusztus 2. péntek, 13:50

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

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

HozzászólásSzerző: Cinege446 » 2013. augusztus 2. péntek, 19:51

"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: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. augusztus 3. szombat, 6:14

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

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

HozzászólásSzerző: Cinege446 » 2013. augusztus 4. vasárnap, 11:25

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: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. augusztus 4. vasárnap, 14:08

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

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

HozzászólásSzerző: Cinege446 » 2013. augusztus 4. vasárnap, 14:41

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: 168
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

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

HozzászólásSzerző: Kotesz » 2013. október 5. szombat, 11:08

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: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. október 5. szombat, 11:41

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: 168
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

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

HozzászólásSzerző: Kotesz » 2013. október 5. szombat, 20:41

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: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. október 5. szombat, 20:48

getkey(), inkey()
ill ha a végén enter van: input()

Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 168
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

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

HozzászólásSzerző: Kotesz » 2013. október 6. vasárnap, 16:55

input(1) = A

ezzel az első karaktert vizsgálom?


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