9-bitars seriell från PC till PIC
9-bitars seriell från PC till PIC
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.
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.
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/
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/
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.
[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.
NMRA-DCC klarat 9999 adresser + en del annat också.
http://www.nmra.org/standards/DCC/stand ... rp921.html
http://www.nmra.org/standards/DCC/stand ... rp921.html