C# i PIC

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
User avatar
mirzza
Odlično uznapredovao
Odlično uznapredovao
Posts: 722
Joined: 05-12-2006, 22:33
Location: Tuzla

C# i PIC

Post by mirzza »

Pozdrav svima,

Trenutno trebam da spojim C# i PIC preko serijskog porta. Uspio sam komunicirati, medjutim, ja kada postavim zadanu vrijednost npr 5, i onda provjeravam da li mi poslije unesena vrijednost veca od zadane (jasnije mozete viditi u koodu) nekad mi prodje na 4, na 3(a ne bi smjelo nikako), kao da ne poredi brojeve kako treba, odnosno kao da ih ne gleda brojeve. Probao sam u C# na razne nacine konvertovat pa slati, ali nema efekta. Sada me intersuje da li je neko imao slicne probleme i za li rijesenje?

KOD PBP:

Code: Select all

DEFINE HSER_RCSTA 90h 
DEFINE HSER_TXSTA 20h 
DEFINE HSER_BAUD 9600 
DEFINE HSER_SPBRG 25

 symbol led=portb.0
 symbol led1=portb.4 
 symbol pr=portb.3
 input pr
 output led1
 output led
 
 brzina var byte
 zadana var byte

 START:
'POSTAVLJANJE ZADANE VRIJEDNOSTI KADA JE PREKIDAC AKTIVAN
if pr==1 then
high led
hserin [zadana]
low led
endif
'PROVJERA DA JE POSLANA VIJEDNOST VECA OD ZADANE, AKO JESTE UPALITI LED 1 SEC
HSERIN 500, START,[BRZINA]
IF BRZINA>ZADANA THEN
high led1
pause 1000
low led1
ENDIF

goto start
end
DIO KODA C#:

Code: Select all

if (!port.IsOpen)
                    port.Open();

                port.DataReceived += new SerialDataReceivedEventHandler(OnReceived);
                //byte[] data = BitConverter.GetBytes(int.Parse(brzina.Text));
                //port.Write(data, 0, 4);
                port.Write(Convert.ToString(brzina.Text));
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: C# i PIC

Post by Kukinjos »

Ako si već definirao baud rate s:

Code: Select all

DEFINE HSER_BAUD 9600
, onda ti je ovo višak:

Code: Select all

DEFINE HSER_SPBRG 25
Osim toga pišeš u basic-u, pa su ove dvije jednakosti malo blasfemične, hi hi:

Code: Select all

if pr==1 then
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: C# i PIC

Post by Kukinjos »

Ah, naravno, prije svega trebaš napisati nešto u stilu:

Code: Select all

DEFINE OSC 8    ;za recimo kristal od 8MHz
jer kompajler mora znati koliki je sistemski clock, kako bi odredio točne parametre za baud rate generator. Evo jutro mi je malo pametnije od večeri :)
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3508
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Re: C# i PIC

Post by trax »

Problem je vjerovatno zato sto iz C# aplikacije saljes broj kao ASCII vrijednost, a u PIC-u je citas kao binarnu odnosno bajt kakav je i dosao. Znaci kada iz C# posaljes broj '5' u ASCII formatu, njega PIC primi kao broj 53.

Trebas u PIC-u da napises ovako:

Code: Select all

    DEFINE HSER_RCSTA 90h
    DEFINE HSER_TXSTA 20h
    DEFINE HSER_BAUD 9600
    DEFINE HSER_SPBRG 25

     symbol led=portb.0
     symbol led1=portb.4
     symbol pr=portb.3
     input pr
     output led1
     output led
     
     brzina var byte
     zadana var byte

     START:
    'POSTAVLJANJE ZADANE VRIJEDNOSTI KADA JE PREKIDAC AKTIVAN
    if pr==1 then
    high led
    hserin [zadana]
    zadana = zadana - 48 ' <---- OVO TI JE FALILO. OVO CE DA PRETVORI ASCII BROJ U FAKAT BROJ :-)
    low led
    endif
    'PROVJERA DA JE POSLANA VIJEDNOST VECA OD ZADANE, AKO JESTE UPALITI LED 1 SEC
    HSERIN 500, START,[BRZINA]
    IF BRZINA>ZADANA THEN
    high led1
    pause 1000
    low led1
    ENDIF

    goto start
    end
http://www.asciitable.com/index/asciifull.gif
User avatar
mirzza
Odlično uznapredovao
Odlično uznapredovao
Posts: 722
Joined: 05-12-2006, 22:33
Location: Tuzla

Re: C# i PIC

Post by mirzza »

Problem je sto sam ja sam sebi zakomplikovo u C# sa konverzijama podatka iz text box-a jednostavo je proradilo ovo:

Code: Select all

port.Write(brzina.Text);
Hvala svima pomoci!
Post Reply