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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg av persika »

Tottish, du får gärna berätta hur det går med kommunikation mellan PIC-Excel

Jag kan skicka dig min Excel-fil om du har nytta av den.
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

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. =)
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

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:

Kod: Markera allt

Recieve	
	banksel	PORTC
	btfss	PORTC, 2
	goto	Recieve
	
	banksel	RCREG
	movfw	RCREG
	movlw	b'01100101'    (TEST!!)	

	movwf	TXREG
	
	
	goto	Recieve
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
spaderkung
Inlägg: 138
Blev medlem: 12 maj 2007, 11:24:24
Ort: Sjöbo

Inlägg av spaderkung »

För VBA rekommenderar jag http://www.ozgrid.com.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vad gör "btfss PORTC, 2 " ??
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

Spaderkung-> Tack!

Sodjan->
Den läser statusen på knappen jag skrev om. Tryck på den (sätt ett på RC2) och koden ska sända inläst ASCII-kod.

/Tottish
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

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å ?
Hur *vet* du att det faktiskt har kommit något till RCREG ???
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

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
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

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 :

Kod: Markera allt

Recieve   
   banksel   PORTC
   btfss   PORTC, 2
   goto   Recieve
mot :

Kod: Markera allt

   banksel   PIR1 ; Behöver inte göras varje "varv"...
Recieve   
   btfss   PIR1, RCIF
   goto   Recieve
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).
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> 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...
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

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
Senast redigerad av Tottish 8 oktober 2007, 08:43:08, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK.
Kolla att all hårdvaruhandskakning är avstängd.
Annars måste du sannolikt bygla en del pinnar i kontakten.
Vilka vet jag inte på rak arm, jag kör aldrig med HW-handskakning,
men Google vet säkert...
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Inlägg av Tottish »

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
Senast redigerad av Tottish 8 oktober 2007, 08:45:05, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag tror att det hade fungerat utmärkt med de andra också, om du
bara hade ställt in dom korrekt. Jag gissar fortfarande att du inte
hade slagit av HW-handskakning...
Skriv svar