Sida 1 av 1

9-bitars seriell från PC till PIC

Postat: 11 september 2008, 12:51:15
av rbrakhya
Hej!
Försöker få till adressering av flera pic:ar mha EUSARTens 9-bitarsläge med adress detection. Programmerar i VB6.

Vet att PC:ns usart inte stödjer 9-bitars kommunikation, men har fått veta att man kan använda paritetsbiten för att fuska fram en 9:e bit.

Har försökt med "Mark" och "Space" som paritet i mscomm men jag får det inte att funka. När jag tittar på oscilloskopet så syns inte paritetsbiten.

Någon som har erfarenhet av detta? Stödjer alla usarts dessa paritetstyper?
PC:n är inte jättegammal, typ 4 år.

Postat: 11 september 2008, 12:54:22
av Icecap
Allvarligt: låt bli!

Det är inte besväret värd och det finns en inbyggd osäkerhet på om det fungerar i alla lägen.

Och sedan: varför alls?

Postat: 11 september 2008, 13:09:05
av Micke_s
Du får ha en PIC som brygga och kapsla in meddelandena från datorns 8bitars uart och lägga på den sista biten i pic:en

Exempel på meddelande [SOH] ADDRESS [STX] Text [ETX] [EOT]

och skicka address och text som hex eller om det är okej att skicka allt som läsbar text till noderna.

http://www.asciitable.com/

Postat: 11 september 2008, 13:26:03
av sodjan
Om du ända skriver alla program själv, så är det ju bara
att hitta på ett protokol med inbyggd adressering.

Postat: 11 september 2008, 13:27:37
av rbrakhya
Tack för svaren. Ville slippa ta interrupt från datat som skickas eftersom det kan bli upp till ett hundratal noder i systemet. Men jag kommer iofs inte att skicka så mycket data per nod..

Som ni säger, det är nog inte värt det..

Postat: 11 september 2008, 13:29:32
av rbrakhya
sodjan skrev:Om du ända skriver alla program själv, så är det ju bara
att hitta på ett protokol med inbyggd adressering.
Ja, har bara läst något kort om detta. Ska sätta mig in i det.

Tack

Postat: 11 september 2008, 13:31:24
av Micke_s
Här har du ett!
http://www.hth.com/snap/ (Vendor id 00480 :D)

Postat: 11 september 2008, 13:37:54
av Icecap
De gånger jag har behövt detta har det varit enkelt:

[STX]123,6738[ETX]
STX = 0x02
ETX = 0x03

Detta betyder alltså att jag har skickat:
0x02 '1' '2' '3' ',' '6' '7' '8' '3' 0x03

Och dekodningen är enkel: samla ihop alla bytes som kommer i en buffer, se till att den inte overflower. På en STX ska den bara nolla input-räknaren och på ETX ska den kolla med de insamlade värden om det är till "min" adress.

Om det är rätt adress utförs en funktion eller vad som ska göras.

För tillfället har jag ett projekt som förvisso är oadresserat men likaväl har ett skapligt protokoll:
[STX]Funktion, Läsa/Skriva, Index, Data[ETX]

Den delar upp datan (som är i ren text) med just ',' och det fungerar klickfritt. Att jag har Index med beror på att t.ex. temperaturer kan ställas/läsas och det finns ett antal att välja mellan.

Ska jag läsa ett värde anger jag bara '0' i de oviktiga värden samt ställer Läs/Skriv-flaggan till 'R', enkelt som fan.

Postat: 11 september 2008, 13:41:05
av Micke_s
Jo, ascii protokoll har fördelen att de är läsbara rakt av, så länge man inte är ute efter maximal hastighet så är det lungt.

Postat: 11 september 2008, 20:05:06
av lgrfbs
NMRA-DCC klarat 9999 adresser + en del annat också.
http://www.nmra.org/standards/DCC/stand ... rp921.html