Sorosport rejtelmei (rádiós modulokkal is helyenként)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10033
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Sorosport rejtelmei (rádiós modulokkal is helyenként)

HozzászólásSzerző: Robert » 2007. augusztus 25. szombat, 18:40

Sorosporti küzdésem története....

Ugye adott a HW UART a chipben. Ezt szintillesztővel illik a PCre kötni.
DE: ha nem invertálom a jelet (a MAX232 elhagyása mellett), akkor a kimeneti TTL szinteket megeszi a PC. Így baromijó debug eszközhöz jutink egyszál dróttal:). A kontroller TX lába a PC RXD lábára kötendő persze a GND-GND sem maradhat el...

Viszont az invertálás beállítása a sorosportnál a "config com1..." résszel megy. Én meg ezzel nem akartam küzdeni, így maradt a SW alapú sorosport. Viszont ezt nem illik rárakni az eredetileg is HW-es sorosport lábra...
Buktató!
Ha a sor benn van a programban a BASCOM automatikusan HW-sorosportként konfigurálja! Így ezt a program elejéről hagyd ki!

A SW alapú sorosportra a

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

Open "comd.1:9600,8,n,1,INVERTED" For Output As #1   
Print #1, "mit irokki"
Close #1

részlettel gyönyörűen lehet írni....

Természetesen bármelyik lábra konfigurálható a SW sorosport...

Az input rész nem ilyen egyszerű, ott szintillesztő is kell (+/-12V jön ki a PC-ből)...
A hozzászólást 1 alkalommal szerkesztették, utoljára Robert 2008. április 5. szombat, 20:43-kor.

Avatar
robsy
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2006. augusztus 23. szerda, 6:00

HozzászólásSzerző: robsy » 2007. november 20. kedd, 14:37

Üdvözlet.

A soros porttal kapcsolatban a következő időben tervezem, hogy két chippet - atmega8 és attiny2313 - arra szeretnék rávenni, hogy egymással kommunikáljanak. At attiny gyűjtene bizonyos adatokat, eseményeket, átküldené az atmegának, amelyik azt eltártolná és kijelzi egy lcd-n.
Több leírást is találtam tőled úgy, hogy egy chip és egy pc van összekötve. Van valami konkrét tapasztalatatod erre is? vagy szerinted kezdőként is megtudom oldani.

robsy

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

HozzászólásSzerző: Robert » 2007. november 20. kedd, 15:30

HW sorosport használatánál:

A vételi oldalon ha megoldható használd a Config Serialin részt. Így nem veszik el adatod, mert a bufferba kerül be. Az írás a
print a;
sorral, míg a vétel az Inkey() vagy a waitkey() függvénnyel történjen. Ha a vételnél ráfuthatsz arra, hogy csak vár akkor használd az $timeout deklarációt...


A slave (irányított) eszköz mit csinál? A soros adat csak másodlagos, vagy foglalkozni is kell vele azonnal és/vagy mást is csinál nem csak adatara vár és feldolgozza?


A feladat ismeretében lehet igazán javaslatot adni...
Túl sok variáció lehet...

Avatar
robsy
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2006. augusztus 23. szerda, 6:00

HozzászólásSzerző: robsy » 2007. november 21. szerda, 14:42

Kösz a segítséget.

Konkrét alkalmazása majd csak később (egy lakás felügyeleti rendszerének egyes elemeinek összekötése) most csak gyakorlatnak szánom, pld. pinceajtó körüli események - megközelítés, kódzár, stb. - kezelése és ezen állapotok központba történő továbbítása, vagy vegyes és gázkazán hőfokok, szelepek és huzatszabályozás és ezeknek a központi rendszerre történő továbbítása.

Már a multkor is említetted, hogy ezen problémákra célszerűbb lenne más protokol, de a gyakorlat miatt lépésről-lépésre szeretek haladni, "csak játszom". :lol:

robsy

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

HozzászólásSzerző: Robert » 2007. november 21. szerda, 15:26

RS485 és BenBusz protokoll...

Most készül egy fejezet.
Akkor csak simán TxRx láb keresztbe összeköt.


Már csak azt tűálád ki h a kliens az figyel amíg nem jön valami, és ha jön akkor gyűjti az infót, vagy gyűjti és kérésre leadja....

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

HozzászólásSzerző: Robert » 2007. november 22. csütörtök, 16:32


Avatar
Gova
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2008. február 14. csütörtök, 7:00

Soros port

HozzászólásSzerző: Gova » 2008. március 21. péntek, 10:55

Szia.
Lenne egy olyan kérdésem, hogy mit is jellent pontosan hogyan kell szeperátorkaraktert küldeni, mert erre még nem tudtam rájönni. Nem tudom, hogy foglalkoztál-e más programozási nyelvel pl. Delphi, mert az a problémám, hogy az AVR chipröl közöel egy időben küldök két adatott a print parancsal, de nem tudom őket a delphiben külön választani.
Ha tudsz valamiben segiteni, azt megköszöném.

Szia Jocó.

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

HozzászólásSzerző: Robert » 2008. március 21. péntek, 13:05

Szeparátorkarakter. NEM küldendő, hanem küldeni _lehet_. Azzaz a TE programod ebből tudja hogy 2 adat jön. egy példán át:

AVR küld:12 és 38-as értéket

Print "12"
Print "38"


Ekkor a kimenő karakterlánc:
1 2 ASC10 ASC13 3 8 ASC10 ASC13
ASC10: Cr
ASC13: LF
soremelés+kocsivissza


Itt a "szeparátor" a 10+13 karakter.

De küldheted:
Print "12;"#";"38"

A sorvége ekkor is a 10+13, de az átadott karakterlánc a 12#38. Itt a szeparátor a # ez mondja meg hogy 2 külön adatod jött... Ennek feltétele, hogy a szeparátor _nem_ lehet a hasznos adattartalomban is!

Én ezért küldözgetem az adatokat HEXben (0...9;A...F) vagy Decimális szzámként írva (0...9). Így ha ezen kívüli karakterek jönnek, akkor az biza adatátviteli hiba...
Szövegként meg a ASC32...ASC127-t használom (illetve a 125/128/127-t nem, mert az a Bootloader inicializáló karaktere (lsd Bootloader fejezet).

Talán követhető volt így...


Amúgy amiben programozok: Liberty Basic (néha Visual Basic) / programoztam: Pascal, delphi. asm....

Avatar
Gova
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2008. február 14. csütörtök, 7:00

Soros port

HozzászólásSzerző: Gova » 2008. március 21. péntek, 16:37

Szia.

Köszönöm a segitséget, most már sikerült valami, még mindig nem tökéletes, de már haladás. Lenne egy következő kérdésem. A számitott értékem singel tipusú ezt, átalakitottam a Fusing parancsal, hogy csak két tizedes jegyet irjon ki, de az a gondom, hogy nem tizedes veszöt rak hanem tizedes pontot, hogyan tudom azt megcsinélni,hogy a pont helyett vesző legyen, mert a Delphiben egy adatbázisba akarom elmenteni az adatott, de ott a számot csak úgy fogadja el, hogy vessző van a tizedes jegyek elött a pontnál hibát irki és leáll. Na ezt hogyan tudom megoldani?
Ha tudsz segits elöre is köszi.

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

HozzászólásSzerző: Robert » 2008. március 21. péntek, 16:48

Megkeresed a stringben és csere.

for i = 1 to len (mibenkeresekstring)
if mid(mibenkeresek,i,1)="." then mid(mindenkeresek,i,1)=","
next i

Fejből írtam, de ez a legegyszerűbb. De ezt nem egyszerűbb a bejövő adatban formázni a PC-n? Az mégis erőforrással ellátottabb... És az angoloknál pont van, a Hun-ban van a vessző. ez meg ugye nem kontroller, hanem PC-függő. és a PC programól meg lekérhető az oprendszer illetve az adatbáziskezelés nyelve....

Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

HozzászólásSzerző: 7kaz » 2008. március 29. szombat, 8:47

Holott glbtech-et is kerestem emiatt privátban, még nem válaszolt, ezért ide is beírok, hátha tudtok segíteni!

Van egy rf modul, amit UART-on keresztül lehet kezelni (Telecontrolli, RXQ2-868). Ennek a modulnak 12 konfigurációs byte-ja van, melyeket úgy lehet átírni, ha a modul "Config" lábát "0"-ra állítom, és a modul az RX lábán megkapja ezt a 12 byte-ot. (Ezen kívül még van egy "PD" láb is, amely ha logikai magas szinten van, akkor "él" a modul).

A modul 3,3V-os, procinak 5V-os M88-at használok. A modul bemeneti lábai a szokásos 2,2k-3,3k ellenállásosztóval védve vannak. Az M88 hardveres UART-ját használom, 19,2kbs sebességgel.

A modul adatlapjában az áll, hogy az UART-nak így kell kinéznie:
1 start bit
8 adat bit
1 stop bit
nincs paritásbit, és "flow control".

Ha jól tévedek, a hUART alapból így megy.
A modul "Config" lábát szintén az M88 kezeli, ellenállásosztón keresztül.

Ám hiába állítom a "Config" lábat 0-ra, hiába van beállítva az UART, nem változnak meg a config byte-ok.

Próbáltam simán Print-tel, Printbin-nel, pontosvesszővel és anélkül, nem megy a dolog. Az "echo"-t is kikapcsoltam, bár itt aligha kavar be.

Ugyanakkor az alapbeállításokkal az M88-cal küldött adatcsomagot kezeli a modul ("kimegy az éterbe")!
Itt az adatlapja: http://www.telecontrolli.com/pdf/transceivers/RXQ2.pdf

Valamit rosszul csinálok?

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

HozzászólásSzerző: Robert » 2008. március 29. szombat, 9:00

PD láb High legyen (PowerDown különben).
Config láb GND-n, ha azt állítod be....


Tipp:
A config lábat ~5-10 mseccel előbb húzd a GNDre, mint a konfig adatküldés megtörténne! Ugyanígy az adatküldés után is várj kb. ennyit!
Cts, Rts lábakat bizgeted? Elvileg az a FlowControll kezelője...

Azt hiszem az RTS-t 0-ba, a CTS szintén oda kötendő. Ez jelszi vissza, hogy a modul Busy-e....

A tápszűrésben a modulhoz közel egy tantál 10uF kondi nem árt (<10mV ripple a tápban!)

A 4. oldalon az operation részen ott van, mit hogyan kell rángatni. Naná, hogy az időket nem találtam:(.


Kérdés: modul mit tud? PCre kötve, direktben?

Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

HozzászólásSzerző: 7kaz » 2008. március 29. szombat, 9:28

Hát, a tápszűréssel aligha lehet gond, arra mostanában különös gondot fordítok.

A PD és a Config lábak kezelése az adatlapnak megfelelően történik. Config adatok küldése előtt és után 50ms-ot vár a program, azzal nincs gond.

"Cts, Rts lábakat bizgeted? Elvileg az a FlowControll kezelője... "

Elvileg nem kell piszkálni a config-hoz. Txd/Rxd lábakon is működik a modul. Azért lenne jó, ha glbtech végre jelentkezne, mert ő használ ilyen modulokat AVR-rel. Biztosan tudna segíteni.

Időket azért nem találsz, mert a modul lelke az nRF9E5 chip (Nordic). Az a kisebb IC a modulon meg egy EEPROM. Nézd meg az adatlapját, most szinte minden nevesebb rf-linkeket gyártó cég ezzel a chippel építi a moduljait.

Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

HozzászólásSzerző: 7kaz » 2008. március 29. szombat, 12:50

Amennyire kibogarásztam glbtech honlapján a saját áramkörének fotóit (merthogy kapcs. rajz nincs róluk), a CTS lábat nem kötötte a uC-re, az RTS láb pedig a GND-re van kötve fixen. A CONFIG lábat kezeli, de hogy a uC és a modul között mi van még azon a vezetéken, az nem látszik a fotón.

Szóval, ha neki ment CTS/RTS nélkül, akkor elvileg nekem is mennie kellene, de nem megy. :(

glbtech, jelentkezz! :)

Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

HozzászólásSzerző: 7kaz » 2008. március 31. hétfő, 9:02

Van különbség a kétféle szintaktika UART-beli végrehajtása között?

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

Print &H01 ;

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

Print Chr(01) ;


A TX lábon ugyanúgy 01 lesz kiküldve mindkét esetben, vagy valami különbség mégis van?


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