|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
rizzo Neznanec
Pridružen-a: Pon 13 Jan 2014 22:54 Prispevkov: 3 Aktiv.: 0.02
|
Objavljeno: Sre Avg 05, 2015 9:46 am Naslov sporočila: BASCOM Uart komunikacija. |
|
|
Pozdravljeni. Imam problem pri pošiljanju podatkov po serial portih. Načeloma komunikacija deluje problem nastane v tem ko mi naprava pošlje nek ukaz v mikrokotroler ta zadevo premelje in jo pošlje nazaj v sistem. No tu nastane problem ker v tem času ko mikrokontroler pošlje podatke se oglasi tudi sistem in prav tako pošlje v mikrokontroler podatke.
Gre za enožično komunikacijo ki jo z posebnim vezjem ločim na rx tx. Tako da rx in tx v tem primeru ne moreta istočasno delovati.
Moralo bi delovati tako da ko želim poslati podatke mora mikrokontroler najprej preveriti na rx-u če kaj dobiva če je vse tiho pošlje podatek v sistem.
Baje se da to rešiti z nekimi interupti samo nevem kako. Uporabljam Bascom AVR in pa ATMEGA 32 DIL
|
|
Nazaj na vrh |
|
|
besoft Član
Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.99 Kraj: Žižki - Prekmurje
|
Objavljeno: Čet Avg 06, 2015 8:03 am Naslov sporočila: |
|
|
Če maš komunikacijo sprejema v interuptu, potem pri pojavu podatka na vhodu postaviš eno zastavico, ki ti v glavni zanki prekine pošiljanje oziroma ti v glavni zanki spremlja dogajanje.
Kako pa ima naprava rešeno? tudi posluša kaj se dogaja na liniji ?
Lahko kaj malo veš napiše ?
|
|
Nazaj na vrh |
|
|
rizzo Neznanec
Pridružen-a: Pon 13 Jan 2014 22:54 Prispevkov: 3 Aktiv.: 0.02
|
Objavljeno: Čet Avg 06, 2015 5:59 pm Naslov sporočila: |
|
|
Gre za komunikacijski protokol v vozilu tako imenovan LIN BUS.
Komunikacija po kateri se moduli pogovarjajo in poslušajo po eni žici.
Gre za niz podatkov v hex obliki v katerem je naziv govornika ki pove kateri napravi opravi neko operacijo. Sepravi ko želi neka naprava nekaj povedati preveri linijo če je ta prosta pošlje paket podatkov.
No pri meni je problem ker jaz ne poslusam linije samo posljem v tem casu se pa oglasi neka naprava in se mi nekaj ukazov ne izvede.
Sr pravi rabil bi pred posiljanjem ukaza preverjanje linije ce je ta prosta.
|
|
Nazaj na vrh |
|
|
frenki Moderator
Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6553 Aktiv.: 29.42 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Pet Avg 07, 2015 2:18 pm Naslov sporočila: |
|
|
V naslovu teme malce zavajaš. V tem primeru gre sicer res za serijski prenos podatkov, je pa na LIN vodilu kar natančno definiran protokol prenosa in struktura podatkovnih paketov. Brez upoštevanja specifikacije ne bo šlo. Prilagam specifikacijo vodila, kjer je sam protokol natančno opisan.
Opis: |
|
Download |
Ime datoteke: |
LIN_Specification_Package_2.2A.pdf |
Velikost datoteke: |
3.49 MB |
Downloadano: |
14 krat |
|
|
Nazaj na vrh |
|
|
rizzo Neznanec
Pridružen-a: Pon 13 Jan 2014 22:54 Prispevkov: 3 Aktiv.: 0.02
|
Objavljeno: Pet Avg 07, 2015 3:22 pm Naslov sporočila: |
|
|
Že samo me zanima kako bi spisal program da ko se nekaj na RX vhodu v mikrokontroler nekaj dogaja da takrat ne pošilja po TX.
Skratka pred pošijanjem bi moral preveiti na RX če so kakšni podatki po LIN-busu če jih ni pošlje...
|
|
Nazaj na vrh |
|
|
besoft Član
Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.99 Kraj: Žižki - Prekmurje
|
Objavljeno: Pet Avg 07, 2015 4:20 pm Naslov sporočila: |
|
|
Na forumu je kar nekaj primerov kako izvest komunikacijo z interuptom..ko to imaš, preverjaš če je v sprejemnem buferju kaj ..ali je prazen. V kolikor je prazen lahko delaš kar koli, v primeru, da se v buferju kaj pojavi pa pač prekineš ostali del programa in poslušaš..
Čeprav priporočam, da preštudiraš link do specifikacij protokola.
|
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.07 Kraj: KOPER
|
|
Nazaj na vrh |
|
|
stursc Član
Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.45
|
Objavljeno: Tor Nov 10, 2015 3:52 pm Naslov sporočila: |
|
|
Nerazumljiva dogajanja so me pognala po pomoč.
Za spremljanje programa imam SW-UART. Na testni plošči je vse delovalo.
Ko sem vse prenesel na delovno ploščo, tukaj sem moral zaradi razporeda zamenjati pin
za SW_UART (prej je bil na pinb.6 , sedaj na pina1).
Vse lepo deluje dokler imam konektor programatorja na pinih delovne plošče, ko snamem
konektor programatorja, SW-UART neha delovati, ostali del programa deluje b.p.
Pametne ideje več nimam, zato prosim za kak komentar, ki bi me približal rešitvi
Hvala
LP, stursc
|
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.67 Kraj: Mengeš
|
Objavljeno: Tor Nov 10, 2015 5:18 pm Naslov sporočila: |
|
|
Jaz bi najprej dal kakšen pull-up ali pull-down upor. Itak ga je dobro imeti, da ne vleče preveč motenj.
|
|
Nazaj na vrh |
|
|
stursc Član
Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.45
|
Objavljeno: Tor Nov 10, 2015 9:34 pm Naslov sporočila: |
|
|
Da se malo dopolnim
Vsi pini imajo zunaje pullup 10K upore. Poskušal sem zmanjšati pullup na 5K, razlike ni.
Potem sem odstrali pullup upor, razlike ni.
Vrnil sem se nazaj na testno ploščo in ugotovil enako stanje, namreč na testni plošči (minipin) ni bilo potrebe odstranjevati programatorja in teh težav nisem opazil. Sedaj sem tudi na testni odstarnil programator (COM kabel) in terminal na SW UART ne dela več. Če priklopim programator nazaj na COM port, SW-uart spet normalno izpisuje.
Nadaljnih idej mi je zmanjkalo (vsaj za danes). Premeril sem morebitne slabe povezave, predvsem GND, vse OK.
Vsakega pregloga, komentarja bom vesel, predvsem, ker sem tak sistem komunikacije že uporabil in še danes deluje, tukaj se je pa nekaj zapletlo.
LP, stursc
|
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.67 Kraj: Mengeš
|
Objavljeno: Tor Nov 10, 2015 9:40 pm Naslov sporočila: |
|
|
Daj ledici na TX in RX, da vidiš, ali kaj utripajo v enem in drugem primeru.
Pa poskusi dati upor na maso (pull-down). Probat ni greh...
A ostalo pa dela? Da ni AVR v stanju reseta ? (daj upor z reseta na maso) na en pin sprogramiraj utripanje ledice, da vidiš, če AVR sploh teče. Jaz sem imel bogate težave na EasyAVR, ko se mi je na 3.3V po cca 15 sekundah AVR ustavil. Na koncu sem ugotovil, da progrmator nekako na polovico potegne reset gor, ravno dovolj, da se ustavi. Dodatni pull-down upor je pomagal...
|
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.04 Kraj: Dragomer
|
Objavljeno: Sre Nov 11, 2015 1:19 pm Naslov sporočila: |
|
|
Torej, če je komunikacija obojesmerna in ni nekoga, ki bi upravljal promet na liniji, je potrebno predvideti, da pride do čim manj kolizije - zaletavavanja telegramov na liniji, to se zgodi, ko več udeležencev linije želi oddati podatke.
Kot vidim iz sheme, (Lin2.1book stran 111) lahko iz ene žicel ločiš TX in RX signala
Sam uporabljam dvožično RX485 komunikacijo na sledeč način:
RX vežem izključno na hardware uart RX. Ta omogoča serial interrupt.
V serial interrupt rutini lovim bajte iz linije in sestavljam telegram, podatek v spremenljivko tipa string.
Ko ugotovim, da je telegrama konec, prenesem cel string v drugo polje, da s tem sprostim prvi string za sprejemanje novih podatkov. Postavim zastavico glavnemu programu, da obdela podatek.
Pri sprejemu vsakega bajta rx interrupt rutina postavi števec časa na nič.
Ta števec časa poriva naprej timer prekinitveni podprogram, tako vem, koliko časa je bila na liniji tišina, ni nihče nič oddajal.
Pri pošiljanju podatkov v linijo, najprej čakam neko slučajnostno vedno drugo število - čas. Na samo oddajanje bajtov grem šele, ko ugotovim, da je bila na liniji tišina toliko časa, kot je generator slučajnih števil predlagal za to oddajo.
Kolizija telegramov s tem ni izključena, a s pravilnim uglaševanjem je verjetnost kolizije tako majhna, da je zadeva uporabna.
Opis: |
|
Velikost datoteke: |
18.07 KB |
Pogledana: |
7403 krat |
|
_________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
stursc Član
Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.45
|
Objavljeno: Sre Nov 11, 2015 9:06 pm Naslov sporočila: |
|
|
Hvala za vse komentarje, vsak je dobrodošel.
Napako se odkril naključno, slaba masa na vmesniku, ki ga sicer uporabljam že 3 leta.
Se zgodi, da moraš kaj popraviti za sabo. Torej komunikacija deluje in sedaj lahko ugotavljam tudi druge napake.
Takoj sem ugotovil naslednjo napako (povezano z komunikacijo).
Ta je sigurno "softwerska", vendar še nisem našel rešitve, namreč gre za sistem in povezavo z GSM modulom TC35 in ATmega 32.
Kaj se dogaja? Modulu pošljem SMS z vsebino za opravljeno delo. SMS je vredu prebran, zahtevana naloga se izvede OK, potem gre program v podprogram brisanje SMS sporočila (Bascomaši vedo, da je to ukaz AT+CMGD=id_sms)
Problem je le brisanje tega sporočila po izvedeni zahtevi.
Da bi se prepričal o kompatibilnosti ukaza, sem dodal tipko za prehod v ta del podprograma, ki ob prehodu dejansko zbriše določeno sporočilo.
Ukaz (gosub brisi_sms) po izvedeni zahtevi SMS sporočila, ki jo solidno opravi, sicer gre v sam podprogram (vidno iz izpisa podatkov), vendar sporočila ne briše.
Nabiram si šele izkušnje z tem modulom, zato so vaše izkušnje dobrodošle.
Hvala za sodelovanje
LP, stursc
|
|
Nazaj na vrh |
|
|
arksi Član
Pridružen-a: Sre 03 Sep 2008 10:19 Prispevkov: 741 Aktiv.: 3.90 Kraj: Dolenjska
|
Objavljeno: Čet Nov 12, 2015 7:56 am Naslov sporočila: |
|
|
stursc je napisal/a: |
................... Modulu pošljem SMS z vsebino za opravljeno delo. SMS je vredu prebran, zahtevana naloga se izvede OK, potem gre program v podprogram brisanje SMS sporočila (Bascomaši vedo, da je to ukaz AT+CMGD=id_sms)
Problem je le brisanje tega sporočila po izvedeni zahtevi.......................
LP, stursc |
Sporočila na sim kartici se ti kopičijo do zapolnitve spomina. Ko je sim kartica polna ne sprejme modem več sporočila. Potrebno je brisati sporočilo ali vsa sporočila, da naredimo prostor za sprejem novega SMS.
Sedaj ne vem kako ti to sporočilo brišeš oz. bom vprašal drugače.
Kako veš na kateri lokaciji je sporočilo za brisanje? Dobiš lokacijo sporočila tako, da ti jo posreduje sam modem, ali imaš narejeno tako, da vedno brišeš prvo ali kakšno drugo lokacijo sim kartice? Ukaz AT+CMGD=id_sms naj bi bil pravi, saj imajo, verjetno, vsi modemi standardizirane ukaze.
Ukaz AT+CMGD=1 torej izbriše sporočilo na lokaciji 1.
Ukaz AT+CMGD=2 torej izbriše sporočilo na lokaciji 2.
...........
Nekateri modemi so malo "leni" in potrebujejo med posameznimi ukazi malo pavze. Npr. pri nekaterih modemih zadostuje cca 100ms med posameznim ukazom in potem stvar deluje.
LP
|
|
Nazaj na vrh |
|
|
stursc Član
Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.45
|
Objavljeno: Čet Nov 12, 2015 10:01 am Naslov sporočila: |
|
|
arksi je napisal/a: |
Sporočila na sim kartici se ti kopičijo do zapolnitve spomina. Ko je sim kartica polna ne sprejme modem več sporočila. Potrebno je brisati sporočilo ali vsa sporočila, da naredimo prostor za sprejem novega SMS.
LP |
Saj, zato pa brišem sporočila takoj po obdelavi. Če je sporočilo od "pravega Clipa", ga obdeluje, drugače ga kar briše. Ker berem le 2X na minuto obstaja možnost prejema več sporočil med branjema. Naredil sem tako, da kontroliram do 9 sporočil (če je več kot eno), obdela vsakega, če je pošiljatelj "pravi" in potem briše, tako vse do zadnjega.
Ukaz je že pravi, saj mi ga na prehodu v podprogram z simulirano tipko normalno briše.
Se bo treba še malo poigrati. Vsak komentar včasih le pripelje do rešitve.
LP,stursc
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|