www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

RS232 Bascom

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.63
Kraj: Dravograd

PrispevekObjavljeno: Sob Maj 26, 2012 9:20 pm    Naslov sporočila:  RS232 Bascom Odgovori s citatom

Prosim za malo pomoči. Z trminalom pošljem na mikrokontroler npr. 235 in dobim nazaj po en bayt 50 51 53 z uporabo "chr" pać dobim 2 3 5 bayt po bayt, kak pa naredim da bom lahko izpisoval 235?? Hvala

B = Ischarwaiting(#2)
If B = 1 Then
A = Inkey(#2)
Print #2 , A
End If
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Sob Maj 26, 2012 10:06 pm    Naslov sporočila:   Odgovori s citatom

S terminalom pošlješ '2' '3' in '5'.

Vprašanje ni najbolj jasno.
Če bi kot rezultat rad vrednost 235, potem rabiš nekaj podobnega:
Koda:


A=0
Vrednost_vnesena=0   
zanka:
    B = Ischarwaiting(#2)
    If B = 1 Then
        TMP_ZNAK = Inkey(#2)
        if TMP_ZNAK = ZNAK_ZA_KONEC_PRENOSA then
            goto izhod_iz_zanke     
        else
             Vrednost_vnesena=1  ' opcija, da lahko ločiš '0','ZNAK_ZA_KONEC_PRENOSA' od 'ZNAK_ZA_KONEC_PRENOSA'
             A= 10*A
             A = A + (TMP_ZNAK - 48)  ' 48 = '0' , tole bo treba napisat v več vrsticah, ker:
                           ' bascom ne prežveči dveh operacij v isti vrstici in
                           ' bascomu ne bodo všeč tipi spremenljivk. Po potrebi  uporabi še kakšno spremenljivko, ter ASC in CHR
        End if
    End If
goto zanka
:izhod_iz_zanke
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.63
Kraj: Dravograd

PrispevekObjavljeno: Sob Maj 26, 2012 11:19 pm    Naslov sporočila:   Odgovori s citatom

S terminalom pošljem npr. 235 skupaj v mk pa dobim bayt po bajt. Gre za to da bi rad v mk vpisal neko vrednost. Ne znam pa teh bayto združit v eno spremenljivko. Upam da sem bolj razumljivo napisal. Hvala
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Ned Maj 27, 2012 12:23 am    Naslov sporočila:   Odgovori s citatom

Če v terminal vtipkaš 235, si poslal (vsaj) tri znake ASC("2"), ASC("3") , ASC("5") + morebiti 13 in 10.
Če bi rad to pretvoril v število, upoštevaš, da je
ASC("0") = 48
x = ASC("x") - ASC("0") -> x = ASC("x") - 48 , kjer je x = [0 - 9] in "x" =["0" - "9"]
in
235 = 2*100 + 3*10 +5

Ker na splošno dolžina ni znana, lahko vtipkaš "2", "3", "5" , ENTER
ZNAK_ZA_KONEC_PRENOSA je v tem primeru 13 (ENTER = 13)


Če bi rad s terminalom poslal en byte, ki ima vrednost 235, vključi "num lock", pritisni in drži tipko Alt, na numerični tipkovnici odtipkaj 235, spusti tipko Alt.

Na ta način lahko pošlješ vrednosti, ki predstavljajo natisljive znake [32 -127]. V večini primerov delujejo tudi [128 - 255] (obvezno 8 bitna komunikacija).
Večina vrednosti manjših od 32 predstavlja kontrolne znake. Kaj se bo zgodilo, je odvisno od vrednosti (znaka) terminalskega programa in njegovih nastavitev.

Ta trik ne deluje s tipko Alt Gr.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Ned Maj 27, 2012 12:39 am    Naslov sporočila:   Odgovori s citatom

Ok, imaš še dve bolj enostavne možnosti:

Če si lahko privoščiš, da program čaka na vpis spremenljivke, uporabi INPUT.

V nasprotnem primeru prihajajoče znake vpiši v string, ter uporabi VAL.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.63
Kraj: Dravograd

PrispevekObjavljeno: Ned Maj 27, 2012 1:10 am    Naslov sporočila:   Odgovori s citatom

Mislim da razumem kaj misliš. Sam ne vem od kod poberem te tri bayte v mk da jih lahko pol pretvorim v neko spremenljivko??

Komunikacijo bi rad naredo z LabVIEW-em. Sem probal tudi INPUT (uporabil prekinitev) in z terminalom dela v LB mi pa program obstoji ko pošljem neko vrednost. Seveda pa nisem na koncu poslal CR,šele zdaj sem se spomnil in zato verjetno obstoji.

Think
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Ned Maj 27, 2012 11:21 am    Naslov sporočila:   Odgovori s citatom

Jaz berem rx pin mikroprocesorja vedno v interrupt rutini, ki ujamo bajt po bajt in jih lepo zlaga po vrsti v nek character array.
Posebno je občutljiva na znak CHR(H0D), takrat postavi bit 'prebrano', in glavni program potem, ko zazna da je ta bit postavljen, obdela informacijo

Koda:
Si_rtn:
    ' Preberemo znak
    Y(x) = Udr
    If Y(x) = &H0D Then set Prebrano   ' postavi bit Prebrano
    If Y(x) = &H0A Then Decr X                              ' ignore cr
    ' sledeči znak naj zaključi niz: (niz mora biti zaključen z binarno ničlo)
    Incr X
    Y(x) = 0

Return

_________________
Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Ned Maj 27, 2012 11:44 am    Naslov sporočila:   Odgovori s citatom

toncibalonci je napisal/a:
Sam ne vem od kod poberem te tri bayte v mk da jih lahko pol pretvorim v neko spremenljivko??

Koda:
    B = Ischarwaiting(#2)
    If B = 1 Then
        TMP_ZNAK = Inkey(#2)    ' tukaj se izvede branje znaka


ja, INPUT potrebuje ENTER na koncu.
INPUT v prekinitveni rutini je slaba ideja, ker program v prekinitvi čaka na (ostale) znake.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.63
Kraj: Dravograd

PrispevekObjavljeno: Ned Maj 27, 2012 11:56 am    Naslov sporočila:   Odgovori s citatom

Ja ja saj vem kje se izvede branje znaka,sam jih je potrebno nekam zložit (v array tak kot vilko pravi) in jih pol prebrat. To mi ni glih jasno.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
besoft
Član
Član



Pridružen-a: Ned 01 Apr 2012 10:22
Prispevkov: 585
Aktiv.: 4.01
Kraj: Žižki - Prekmurje

PrispevekObjavljeno: Ned Maj 27, 2012 12:04 pm    Naslov sporočila:   Odgovori s citatom

int47 je napisal/a:
toncibalonci je napisal/a:
Sam ne vem od kod poberem te tri bayte v mk da jih lahko pol pretvorim v neko spremenljivko??

Koda:
    B = Ischarwaiting(#2)
    If B = 1 Then
        TMP_ZNAK = Inkey(#2)    ' tukaj se izvede branje znaka


ja, INPUT potrebuje ENTER na koncu.
INPUT v prekinitveni rutini je slaba ideja, ker program v prekinitvi čaka na (ostale) znake.


poskusi takole:
TMP_ZNAK =TMP_ZNAK + Inkey(#2)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Ned Maj 27, 2012 12:21 pm    Naslov sporočila:   Odgovori s citatom

besoft je napisal/a:
poskusi takole:
TMP_ZNAK =TMP_ZNAK + Inkey(#2)

Po sprejemu "235" bo TMP_ZNAK = 50 + 51 +52 = 153 , oz -103 pri uporabi predznačene spremenljivke.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Ned Maj 27, 2012 3:50 pm    Naslov sporočila:   Odgovori s citatom

toncibalonci je napisal/a:
Sam ne vem od kod poberem te tri bayte v mk da jih lahko pol pretvorim v neko spremenljivko??


Seveda samo ugibam, kaj bi ti rad.
Če števila 51, 52 in 53. vsebine treh bajtov, kadar le ti predstavljajo znake 3,4 in 5
in bi rad število 345 dal v neko spremenljivko, je najprej potrebno da v četrti bajt, ki sledi bajtu z vsebino 53 vpisati ničlo, ki markira konec niza znakov.
Potem je potrebno definirati string spremenljivko preko teh štith bajtov
potem lahko z funkcijo val (glej help in primere) kjer je argument ta nova string spremenljivka dobiš vsebino 345 v variabli, ki je na levi strani funkcije.

Seveda pa samo ugibam, kje imaš tiste tri bajte, in kako si jih poimenoval.

_________________
Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.63
Kraj: Dravograd

PrispevekObjavljeno: Pon Maj 28, 2012 6:52 pm    Naslov sporočila:   Odgovori s citatom

Hvala za odgovore. Kak bo čas bom to probal. Javim rezultate oz. bolj verjetno postavim novo vprašanje Very Happy
Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pirpy
Član
Član



Pridružen-a: Ned 30 Maj 2004 21:57
Prispevkov: 770
Aktiv.: 3.47
Kraj: Topolšica

PrispevekObjavljeno: Sob Sep 07, 2013 5:51 am    Naslov sporočila:   Odgovori s citatom

Lp
Da ne odpiram nove teme bom kar tule vprašal

rad bi poslal znak preko rs232 brez da uporabim ukaz print saj ukaz print čaka dokler se byte ne pošlje in če je baudrate počasen cel procesor stoju in čaka na konec pošiljanja šele potem nadaljuje z programom
nikakor ne najdem primera kako to narediti z prekinitvami in z pisanjem byta ki ga hočem oddati direkt v register
prekinitev je utxc
register za oddajanje pa bi naj bil ucr1a kot je opisano tule
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=20767

vendar se mučim že nekaj časa a zadeva ne deluje kot tu piše ??
prosim za pomoč
B
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group