Simpel RS232 VB(A)<->PIC. Komplicerat?
Jag ska labb med det hær i helgen och så får vi se hur det går. Tror jag førsøker fixa ihop en egen VBAkod istællet før att låna din. Annars kanske det blir lite fuskigt =). Jag ser det så klart som en chans att læra mig lite VB också. Tur før mig att det hær med RS232 inte verkar vara særskilt krångligt från VB. Jag kanske klarar av att få något up'n'running i helgen. Postar i den hær tråden då.
...och så kan du ju hålla øgonen øppna, OM det skulle vara så att det døk upp ett PM med ett blygsamt førslag om att skicka en viss .xls-fil till min maildress. =)
...och så kan du ju hålla øgonen øppna, OM det skulle vara så att det døk upp ett PM med ett blygsamt førslag om att skicka en viss .xls-fil till min maildress. =)
OK, då har man suttit och knåpat halva dagen och det har väl gått, ganska precis, halvbra.
Har inte kommit igång med VB alls utan knepar fortfarande med kommunikationen till PICen.
Använder Hypertrm som jag i övrigt inte har någon erfarenhet av. Att skicka ASCII-tecken från PICen går som en dans. Värre blir det om man ska försöka få han att ta emot något.
Använder mig av (även här första gången) den inbyggda USART-modulen.
Mitt testprogram är ett "eko-program". Det går ut på att man sänder en "bokstav" (ASCII-kod) till PICen som när man trycker på en knapp ska eka samma bokstav tillbaks till PCn.
Kodurdrag:
Raden som jag märkt med "(TEST!!)" la jag till bara för att se så att det inte var fel i koden. Med den raden så sänder PICen mycket riktigt ett "e" till datorn. men utan den raden så sänder den inget när man trycker på knappen. sänder NULL vilket alltså borde tyda på att RCREG är tomt.
Jag använder den lilla MAX232-modulen som Sodjan säljer och eftersom kommunikationen funkar åt ett håll så tror jag att vi kan utesluta felkoppling.
CREN-biten i RCSTA-registret är 1 och i övrigt samma inställnignar som när sändning fungerar så jag vet inte vad som skulle vara fel här.
Jag undrar hur jag sänder enklast från Hypertrm. Har använt "Send textfile" och förökt knappa direkt i fönstret men inget ger något resultat förutom att hypertrm krachar om man kladdar för mycket på tangentbordet.
Thoughts, anyone?
MVH
/Tottish
Har inte kommit igång med VB alls utan knepar fortfarande med kommunikationen till PICen.
Använder Hypertrm som jag i övrigt inte har någon erfarenhet av. Att skicka ASCII-tecken från PICen går som en dans. Värre blir det om man ska försöka få han att ta emot något.
Använder mig av (även här första gången) den inbyggda USART-modulen.
Mitt testprogram är ett "eko-program". Det går ut på att man sänder en "bokstav" (ASCII-kod) till PICen som när man trycker på en knapp ska eka samma bokstav tillbaks till PCn.
Kodurdrag:
Kod: Markera allt
Recieve
banksel PORTC
btfss PORTC, 2
goto Recieve
banksel RCREG
movfw RCREG
movlw b'01100101' (TEST!!)
movwf TXREG
goto Recieve
Jag använder den lilla MAX232-modulen som Sodjan säljer och eftersom kommunikationen funkar åt ett håll så tror jag att vi kan utesluta felkoppling.
CREN-biten i RCSTA-registret är 1 och i övrigt samma inställnignar som när sändning fungerar så jag vet inte vad som skulle vara fel här.
Jag undrar hur jag sänder enklast från Hypertrm. Har använt "Send textfile" och förökt knappa direkt i fönstret men inget ger något resultat förutom att hypertrm krachar om man kladdar för mycket på tangentbordet.
Thoughts, anyone?
MVH
/Tottish
-
- Inlägg: 138
- Blev medlem: 12 maj 2007, 11:24:24
- Ort: Sjöbo
Sodjan :"Hur *vet* du att det faktiskt har kommit något till RCREG ???"
Som jag skrev så pekar allt på att det INTE kommit något till RCREG. Det var därför jag undrade om mina sätt att sända med Hypertrm var riktiga.
"OK, men hur vet PIC'en när du trycker på knappen att det faktiskt
har kommit in ett tecken ? Varför kollar du inte det också ?"
Det vet den inte. Det är jag som får se till att försöka sända en bokstav innan jag trycker. Annars sänder den NULL. Jag vet inte om en kontroll skulle ge så mycket eftersom jag, som jag skrev, kan sätta in ett värde i TXREG "manuellt" och det fungerar då alldeles utmärkt. (Se raden märkt "(TEST!!)" i koden med understående beskrivning.)
Med detta test så anser jag, i min okunskap, att man kan anta att RCREG (i lästillfället) är noll, då PICen sänder NULL när RCREG laddats till TXREG. Skulle det kunna vara så att PICen misslyckas att läsa RCREG och därför läser det som noll? Vet inte om detta kan hända men det är det enda undantaget som jag kan se från att RCREG faktiskt skulle vara tom. Vilket betyder att sändningen(Från PC)/mottagningen(i PICen) misslyckats.
Skulle någon kunna verifiera att mitt handhavande med Hypertrm är korrekt? Mitt/mina sätt att sända text tänker jag då på. Har inget O-Skop inkopplat så jag kan inte spana på vågformer ut från serie-porten.
Edit: Sodjan: Bör man använda pullups till RS232-modulen som jag köpt av dig eller sköts detta intärnt i modulen? Blir ingen nämnvärd potentialförändring på benen om jag kopplar in svaga pullups så jag antar att det finns starkare dito inbyggda. Kanske rent av i RS232 kretsen eftersom jag inte ser några motstånd på PCBn. Hmmm, lite skumma potentialvärden jag kommer fram till här... ska mäta lite till... återkommer.
MVH
/Tottish
Som jag skrev så pekar allt på att det INTE kommit något till RCREG. Det var därför jag undrade om mina sätt att sända med Hypertrm var riktiga.
"OK, men hur vet PIC'en när du trycker på knappen att det faktiskt
har kommit in ett tecken ? Varför kollar du inte det också ?"
Det vet den inte. Det är jag som får se till att försöka sända en bokstav innan jag trycker. Annars sänder den NULL. Jag vet inte om en kontroll skulle ge så mycket eftersom jag, som jag skrev, kan sätta in ett värde i TXREG "manuellt" och det fungerar då alldeles utmärkt. (Se raden märkt "(TEST!!)" i koden med understående beskrivning.)
Med detta test så anser jag, i min okunskap, att man kan anta att RCREG (i lästillfället) är noll, då PICen sänder NULL när RCREG laddats till TXREG. Skulle det kunna vara så att PICen misslyckas att läsa RCREG och därför läser det som noll? Vet inte om detta kan hända men det är det enda undantaget som jag kan se från att RCREG faktiskt skulle vara tom. Vilket betyder att sändningen(Från PC)/mottagningen(i PICen) misslyckats.
Skulle någon kunna verifiera att mitt handhavande med Hypertrm är korrekt? Mitt/mina sätt att sända text tänker jag då på. Har inget O-Skop inkopplat så jag kan inte spana på vågformer ut från serie-porten.
Edit: Sodjan: Bör man använda pullups till RS232-modulen som jag köpt av dig eller sköts detta intärnt i modulen? Blir ingen nämnvärd potentialförändring på benen om jag kopplar in svaga pullups så jag antar att det finns starkare dito inbyggda. Kanske rent av i RS232 kretsen eftersom jag inte ser några motstånd på PCBn. Hmmm, lite skumma potentialvärden jag kommer fram till här... ska mäta lite till... återkommer.
MVH
/Tottish
OK. Jag förstår.
Istället för att du trycker på en knapp, så kan din kod vänta på att
flaggan som sätts när RCREG har mottagit ett komplett tecken sätts.
Byt ut :mot :Det finns ingen anledning att läsa RCREG om inte RCIF har satts i alla fall.
> Skulle det kunna vara så att PICen misslyckas att läsa RCREG
Nej. Och du har rätt bank dessutom. Mycket osannolikt.
Kolla också att TRIS är korrekt satt för TX/RX pinnarna. (TX verkar ju OK,
men RX speciellt). Kopplingen från RC-Link till TX/RX pinnarna måste
också vara OK, så klart.
Har du följt listan med numrerade punkter i databladet som brukar kallas
"Follow these steps when setting up an Asynchronous Reception:" ??
> Bör man använda pullups till RS232-modulen
Nej, det ska inte behövas.
> Hmmm, lite skumma potentialvärden jag kommer fram till här..
Du har 5V till RS-Link, eller hur ?
Om du bara har en multimeter så kan du prova med att skicka
några tecken som har antingen övevägande "nollor" eller övervägande
"ettot", du ska kunna måta upp en markant skillnad i spänning på
RS-Links utgående pinne (på TTL/CMOS sidan).
Istället för att du trycker på en knapp, så kan din kod vänta på att
flaggan som sätts när RCREG har mottagit ett komplett tecken sätts.
Byt ut :
Kod: Markera allt
Recieve
banksel PORTC
btfss PORTC, 2
goto Recieve
Kod: Markera allt
banksel PIR1 ; Behöver inte göras varje "varv"...
Recieve
btfss PIR1, RCIF
goto Recieve
> Skulle det kunna vara så att PICen misslyckas att läsa RCREG
Nej. Och du har rätt bank dessutom. Mycket osannolikt.
Kolla också att TRIS är korrekt satt för TX/RX pinnarna. (TX verkar ju OK,
men RX speciellt). Kopplingen från RC-Link till TX/RX pinnarna måste
också vara OK, så klart.
Har du följt listan med numrerade punkter i databladet som brukar kallas
"Follow these steps when setting up an Asynchronous Reception:" ??
> Bör man använda pullups till RS232-modulen
Nej, det ska inte behövas.
> Hmmm, lite skumma potentialvärden jag kommer fram till här..
Du har 5V till RS-Link, eller hur ?

Om du bara har en multimeter så kan du prova med att skicka
några tecken som har antingen övevägande "nollor" eller övervägande
"ettot", du ska kunna måta upp en markant skillnad i spänning på
RS-Links utgående pinne (på TTL/CMOS sidan).
De skumma potentialfelen jag pratade om var pga en halvt urdraen sladd i bänkmultimetern. Inga problem där alltså. 5V till RS232, jo visst =).
Har även 5V på både RX och TX i "idle state" vilket jag förstått ska vara korrekt eftersom RS232 inverterar signalen.
MEN, det verkar nog som att datorn inte är riktigt förmögen att sända. Ingen potentialförändring på RX trots att jag sänder en rad bokstäver med lika många nollor som ettor vilket torde generera ca 2,5V. Dessutom så beter sig Hypertrm konstigt när jag försöker sända. Sänder jag en textfil så måste jag "disconnect:a" och återställa anslutningen för att den ska fungera igen. Skriver jag bokstäver direkt i förnstret (Ska det gå att göra så?) så krachar det om jag skriver för många bokstäver, typ 10. Skriver jag en eller två så tar det några sekunder innan markören börjar blinka igen och den tar inte emot under de sekundrarna.
Ska ta och mäta direkt i porten på datorn och se om det finns signal där. I sånt fall så är det väl någon felkoppling... hur nu det har gått till. Men jag gissar att det är dött även i porten. Återkommer.
Har även 5V på både RX och TX i "idle state" vilket jag förstått ska vara korrekt eftersom RS232 inverterar signalen.
MEN, det verkar nog som att datorn inte är riktigt förmögen att sända. Ingen potentialförändring på RX trots att jag sänder en rad bokstäver med lika många nollor som ettor vilket torde generera ca 2,5V. Dessutom så beter sig Hypertrm konstigt när jag försöker sända. Sänder jag en textfil så måste jag "disconnect:a" och återställa anslutningen för att den ska fungera igen. Skriver jag bokstäver direkt i förnstret (Ska det gå att göra så?) så krachar det om jag skriver för många bokstäver, typ 10. Skriver jag en eller två så tar det några sekunder innan markören börjar blinka igen och den tar inte emot under de sekundrarna.
Ska ta och mäta direkt i porten på datorn och se om det finns signal där. I sånt fall så är det väl någon felkoppling... hur nu det har gått till. Men jag gissar att det är dött även i porten. Återkommer.
> Ingen potentialförändring på RX
Mät också på RS232 sidan, men ska kunna se skillnad där också.
> Sänder jag en textfil
Varför det ? Skriv bara i fönstret...
Kolla dina inställningar för porten i Hyperterminal.
Eller bättre, skaffa ett annat terminalprogram. Det finns små
program för att enbart testa seriekommunikation. Jag tror någon
på EF skrev i hop ett för ett tag sedan. Sök lite...
Mät också på RS232 sidan, men ska kunna se skillnad där också.
> Sänder jag en textfil
Varför det ? Skriv bara i fönstret...
Kolla dina inställningar för porten i Hyperterminal.
Eller bättre, skaffa ett annat terminalprogram. Det finns små
program för att enbart testa seriekommunikation. Jag tror någon
på EF skrev i hop ett för ett tag sedan. Sök lite...
OK! Jag var inte säker på att det gick att bara skriva i fönstret eftersom det inte kom upp några bokstäver. Nu har jag mätt direkt på porten och mycket riktigt så var det dött där också. Kommer alltså ingen signal från PCn. Borde nog testat det tidigare. =)
Jag vet ju i alla fall att COM-porten fungerar efteresom WISPen tickar på felfritt.
Ska söka reda på ett annat terminalprogram.
Edit 1:
Hmmm. Nu har jag testat med två andra terminalprogram med samma resultat: Heldött på COM-porten. Ett av programmen (ett lite mer avancerat sådant) gav dessutom ett felmeddelande utan någon beskrivning på felet när jag försökte sända. Är det någon global inställning någonstans som hindrar användande av COM-portarna som sändare? I så fall så är det ju något som xwisp2w klarar av att "over-ride:a" . Antar att WISPen använder Tx-pinnen ut från datorn?
Edit 2: Kände mig på något vis tvungen att testa ett tredje terminalprogram (4e om man räknar med Hypertrm) och sim-sallabim så funkar det. Jag hade alltså varken skrivit fel i koden eller kopplat fel.
Tack till alla och framförallt Sodjan för hjälpen. Jag siktar fortfarande på att få PICen att snacka med Excel via VBA så det här blir väl inte den sista frågeställningen i den här tråden.
MVH
/Tottish
Jag vet ju i alla fall att COM-porten fungerar efteresom WISPen tickar på felfritt.
Ska söka reda på ett annat terminalprogram.
Edit 1:
Hmmm. Nu har jag testat med två andra terminalprogram med samma resultat: Heldött på COM-porten. Ett av programmen (ett lite mer avancerat sådant) gav dessutom ett felmeddelande utan någon beskrivning på felet när jag försökte sända. Är det någon global inställning någonstans som hindrar användande av COM-portarna som sändare? I så fall så är det ju något som xwisp2w klarar av att "over-ride:a" . Antar att WISPen använder Tx-pinnen ut från datorn?
Edit 2: Kände mig på något vis tvungen att testa ett tredje terminalprogram (4e om man räknar med Hypertrm) och sim-sallabim så funkar det. Jag hade alltså varken skrivit fel i koden eller kopplat fel.
Tack till alla och framförallt Sodjan för hjälpen. Jag siktar fortfarande på att få PICen att snacka med Excel via VBA så det här blir väl inte den sista frågeställningen i den här tråden.
MVH
/Tottish
Senast redigerad av Tottish 8 oktober 2007, 08:43:08, redigerad totalt 1 gång.
Edit: Hittade editarna som jag skriver om nedan. Jag hade lagt till dom i fel inlägg, nu finns dom där dom ska.
Hmm. jag skrev två långa edit till min ovanstående post men den har tydligen inte fastnat.
Gick i alla fall ut på att det fjärde programmet jag testade fungerade felfritt utan ändringar i vare sig kod eller koppling. Programmet heter AcessPort och kan alltså rekomenderas om ni har problem med andra terminalprogram.
Tack till alla, speciellt Sodjan. Jag kör vidare mot mitt mål: att få PICen att snacka med Excel över VBA!
So long, for now!
/Tottish
Hmm. jag skrev två långa edit till min ovanstående post men den har tydligen inte fastnat.
Gick i alla fall ut på att det fjärde programmet jag testade fungerade felfritt utan ändringar i vare sig kod eller koppling. Programmet heter AcessPort och kan alltså rekomenderas om ni har problem med andra terminalprogram.
Tack till alla, speciellt Sodjan. Jag kör vidare mot mitt mål: att få PICen att snacka med Excel över VBA!
So long, for now!
/Tottish
Senast redigerad av Tottish 8 oktober 2007, 08:45:05, redigerad totalt 1 gång.