Sida 1 av 3

Simpel RS232 VB(A)<->PIC. Komplicerat?

Postat: 3 oktober 2007, 09:27:28
av Tottish
Jag kan börja med att varna för att min fråga här snarare rör VB-programering än PIC så om tråden passar bättre i till exempel "Övrigt" så är det bara att flytta.

Det jag vill åstadkomma är lite kommunikation mellan PC och PIC över RS232. Kan i princip ingenting om VB-programering men jag håller på att lär mig så smått. Framförallt tycker jag att det är trevligt att Hin Onde (Microsoft) integrerat VB i till exempel Excel, som man faktiskt kan göra en hel del nyttiga spreadsheets i. Har dock förstått att VBA (VB for Application) är en något bantad version av "vanliga" VB.
För att börja experimentera med det här så tänkte jag först att jag skulle försöka sända över lite enkla data (kanske bara 2-3 byte) från VBA till en mottagande PIC. Hur svårt är detta egentligen?
När jag googlat så har jag för det mesta stött på påståenden som att "det är extremt svårt utan extern mjukvara eller dyrköpta bibliotek". Detta budskapet kommer väl i och för sig främst från tillverkare av dessa och deras anställda.

Men vad säger ni som kan det här? Är det knepigt? Som sagt så är det väldigt enkla data jag tänkt skicka och, till en början, enkelriktad kommunikation det rör sig om.

Tackar!
/Tottish

Postat: 3 oktober 2007, 09:40:05
av thepirateboy
Ett annat alternativ är C#, det håller jag själv på med just nu. Det är rätt enkelt (allt är förstås enkelt när man kan det). Det räcker med några få kodrader för att skicka data ut på en serieport.

Visual C# Express är gratis från Microsoft.

Postat: 3 oktober 2007, 09:54:14
av Tottish
OK. Tack pirateboy. Kanske tar en kik på det men det är just att kunna skicka data "från ett excel-ark" till PICen (och vice versa) som jag tror skulle kunna öppna stora möjligheter att göra nyttiga applikationer på ett effektivt sätt för mig. Kanske går att anropa någon C#-applikation från Excel och ta det den vägen men det verkar onödigt krångligt, beroende på hur svårt det här med RS232 från VBA visar sig vara, förstås.

/Tottish

Postat: 3 oktober 2007, 11:06:15
av 74
Det finns en ActiveX kontroll som heter MSComm32.ocx för att hantera serieporten, om den går att använda i VBA vet jag ej.
Ett annat sätt kan vara att anropa Windows API, vet ej om detta fungerar från VBA heller.

Det borde vara relativt enkelt att skapa ett program i VB Express, som för övrigt är gratis, som skriver till en *.xls fil, se länk nedan

http://msdn2.microsoft.com/en-us/express/default.aspx

Postat: 3 oktober 2007, 11:17:30
av anlamotte
Det borde inte vara några problem...
Lägg till en userform...
Högerklick på 'verktygslådan' --> fler kontroller...
Leta upp MsComm32.ocx (Micrsoft communications controller...)
Lägg till en MsComm kontroll på userformen (ser ut som en telefon)

För att skicka data använder du t.ex

Mscomm1.PortOpen = True
MsComm1.Output = chr(100)
MsComm1.PortOpen = False

Detta skickar värdet '100'

Postat: 3 oktober 2007, 11:33:17
av Tottish
OK, då får vi väl hoppas att det går att stuva ner MsComm32.ocx i verktygslådan och sen kunna köra på som man skulle gjort i VB. Undrar om det finns något enkelt sätt att skicka "bitar" från VB via RS232? Säg att man till exempel vill sända h'F6'...
Får väl läsa på lite om VB och försöka få det att fungera med VB Express (tack för det tipset!) först och sen försöka göra exakt samma sak i VBA. Borde bli lättast att felsöka då.

Tack för hjälpen, allihop! Fyll gärna på om ni har lite info som skulle kunna gagna mitt syfte.

MVH
/Tottish

Postat: 3 oktober 2007, 11:42:23
av H.O
Hej,
Här en ganska 'basic' tutorial för kommunikaton mellan VB och en mikrokontroller. Dom använder VB6 och MSComm32 vilket nog är det närmsta VBA man kan komma. Efter VB6 to MS bort möjligheten att på ett enkelt sätt kommunicera med COM-porten ända till VB2005 kom. Har aldrig använt MSComm med VBA men det borde väl funka.

/H.O

Postat: 3 oktober 2007, 11:42:34
av sodjan
> skicka "bitar" från VB via RS232? Säg att man till exempel vill sända h'F6'...

*Måste* du göra det ?
Generellt sätt är det enklare att hålla sig till "skrivbara" tecken.
T.ex att skicka "F" och "6" som vanliga ASCII tecken. Sedan tar man hand
om konverteringen i varje ände. Bl.a blir det mycket enklare att testa
kommunikation med t.ex en vanlig terminalemulator (Hyperterm eller likn.)
eftersom man kan skriva (och läsa!) hela kommunikationen i klartext.

Postat: 3 oktober 2007, 14:41:08
av Tottish
H.O: Tack! ska kolla in den och så får vi se om det funkar med VBA. Hur tror du att det funkar med VB Express som jag nyss installerat efter ett tidigare tips? Med tanke på det du skrev om att enkel COM-ports-åtkomst førsvann en tid, menar jag. Ær VB Express tillræckligt ny (eller gammal)?

Sodjan: Nja, det måste jag væl inte. Det var mest att jag tænkte, i mitt førsta projekt med RS232, skicka øver rena "Scan-Codes" (AT / PS/2) till PICen. Så kunde jag lagra den databyten jag fick från PCn i PICen før att sedan sænda samma byte till PS/2-tangentbordsporten (på samma eller en annan PC) med min hemmasnickrade, och faktiskt fungerande, tangentbordsemulator.
Men om du tror att det ær bættre att skicka typ, ASCII-tecken (till PICen) och anvænda ett "smart" PIC-program som tolkar innehållet i den mottagna datan, istællet før att helt blint lagra den, så ær jag fullt beredd att testa det konceptet istællet. Idag så vill jag ju lægga mer krut på PIC-programering æn något annat så det ær væl det bæsta alternativet.
Så då ska jag alltså skriva ett program som øversætter ASCII-koder till AT-ScanCodes. Att kunna felsøka med till exempel Hyperterminalen ær ju inte heller fel. Det ær førsta gången som jag jobbar med asynkron seriell dataøverføring så det borde vara så lætt som møjligt att felsøka.

Tack igen gott folk!
/Tottish

Postat: 3 oktober 2007, 14:44:39
av sodjan
Det räcker ju med lite kod som "översätter" ett 8 bitars byte till två HEX tecken
och tvärtom. Den rutinen behöver inte veta något om "scan codes"...

Postat: 3 oktober 2007, 15:19:49
av Tottish
Ja, så kan man ju se på det men om vi tar PIC-koden så ska den ju øversætta två bytes som den tar emot. Till exempel ASCII koden før "F" och "6" kommer in och PICen ska då lagra h'F6' i læmpligt register.
Då har den ju faktiskt øversatt det till en "ScanCode".
Eller har jag missat något i ditt resonemang hær?

Postat: 3 oktober 2007, 15:24:49
av H.O
Express-versionen har återfått "inbyggt" stöd för RS232 kommunikation. Du hittar den i "verktygslådan" under Components / Serial Port. Men som sagt, räkna inte med du gör i VB 2005 (Express) funkar rakt av i VBA.

Det går också att "prata" med Excel direkt från VB2005, allt man kan göra i Excel kan man också göra från andra applikationer.

/H.O

Postat: 3 oktober 2007, 21:28:17
av persika
Jag gjorde ett simpelt "terminal-program" i Excel kommunicerade PIC-kretsar och även med en Palm-pilot med ett annat terminalprogram.

Skrivet i VBA för Excel med hjälp av XMCommCRC.

Kolla på:
http://www.jbgizmo.com/page29.htm
http://home.comcast.net/~hardandsoftware/Downloads.htm
http://home.comcast.net/~hardandsoftware/xmcomm.htm

Postat: 4 oktober 2007, 00:13:57
av sodjan
> Till exempel ASCII koden før "F" och "6" kommer in och PICen ska då lagra h'F6' i læmpligt register.

Precis. Och tvärtom när man skickar.
Men, jag vet för lite om vilka krav du har för att säga att det är så du *ska* göra...

Postat: 4 oktober 2007, 06:54:32
av Tottish
Tack før de lænkarna persika. Verkar ju vara precis vad jag letat efter. Lite konstigt att han gør en ActiveX-kontroller som innehåller ett verktyg (MSComm32.ocx) som man bara får med vissa VB-versioner bara før att han "wanted to make MSComm features available to non-VB5/VB6 Professional or Enterprise edition users". Låter ju lite lurigt, men han vet sækerligen vad han håller på med.
Man kanske skulle børja brænna ut Wndows-skivor och lægga dom i en hembyggd førpackning och skylla på att man "wanted to make MSPaint features available to non-XP supporters". =)

/Tottish