Hserin help ik kom er niet uit (proton program taal)

Hallo

ik kom er maar steeds niet uit om communicatie te maken met mijn injectie computer.
De letter A moet verzonden worden naar de injectie computer en dan stuurt de injectie computer een 22 elementen array (byte array) terug met alle waardes van de motor (vb watertemperatuur, luchttemperatuur, enz.)

hier staat de uitleg wat je moet doen om informatie van de injectie computer toegezonden te krijgen.

is er iemand die me kan helpen om een klein stukje te helpen schrijven. als ik communicatie heb dan kan ik wel verder om alles op een display te krijgen (de programmeertaal die ik gebruik is proton)

 DEVICE 16F876A
 CONFIG lvp_off, pwrte_on, hs_osc, wdt_on, cpd_on
 XTAL = 20
 
 HSERIAL_BAUD = 9600        ' Set baud rate to 9600
 HSERIAL_RCSTA = %10010000  ' Enable serial port and continuous receive
 HSERIAL_TXSTA = %00100000  ' Enable transmit and asynchronous mode 
 HSERIAL_CLEAR = ON 
 
 DECLARE LCD_DTPIN PORTB.4                           ;LCD DATAPINNEN OP POORT B 4,5,6,7
DECLARE LCD_RSPIN PORTB.2                           ;LCD RS PIN OP POORT B 2
DECLARE LCD_ENPIN PORTB.3                           ;LCD EN PIN OP POORT B 3
 
 DIM clt AS BYTE
 DIM SerString[22] AS BYTE     ' Create a 22-byte array.
  
  DIM MYARRAY[1] AS BYTE   ' Create a 1 byte array.
 MYARRAY [0] = "A"         
 
 
 clt = SerString[6]
 CLEAR 

CLS 
 WHILE 1 = 1 
 HSEROUT [STR MYARRAY \1]
 DELAYMS 100
 HSERIN [STR SerString]           ' Fill the array with received data.
 PRINT AT 1, 1, DEC clt 
 
 WEND 
 
 END

Op 18 februari 2009 18:36:04 schreef B&H:


DIM MYARRAY[1] AS BYTE   ' Create a 10-byte array.

Een 0 vergeten.

De 0 had ik niet vergeten ik heb even de commentaar aangepast. Dit was een overblijfsel van knippen en plakken.

Komt 'A' wel in je PC terecht? Oftewel even testen met een terminalprogramma.

En dan meteen vraag 2: Kan je met een terminalprogramma je injectie computer benaderen?

[Bericht gewijzigd door Henry S. op (37%)]

Houd er in elk geval rekening mee dat  Str  ervoor zorgt dat het data versturen stopt bij een 0-byte.
Het beschouwt je array dan als een string die eindigt (moet eindigen...) met een 0-byte.

Als je bijvoorbeeld dit doet:

   DIM MYARRAY[10] AS BYTE 

   '...<your stuff>...

   HSEROUT [STR MYARRAY \10]

dan is het dus afhankelijk van wat er in MYARRAY zit, of er 10 bytes of minder worden verstuurd!

bedankt van de info er komt beweging in de zaak maar we zijn er nog niet

ik heb even de terminal getest pin 2&3 verbonden. wat ik intik komt terug binnen.(terminal ok).

wanneer ik een A stuur naar de injectie computer krijg ik iets terug wat niet leesbaar is maar er worden wel 22bytes ontvangen. dus ga ik er vanuit dat dit goed is.

wanneer ik pic aansluit op de terminal krijg ik 1 byte binnen maar er komt geen letter op het scherm staan.

als ik bv de letters(fghdbdgfdjksjj) verzend naar mijn PIC komt er een 0 op het lcd scherm staan die dadelijk ook weer verdwijnt. telkens ik op zenden druk komt de 0 terug.

ik had ook even zoals PICSELS schreef de de code aangepast. wat ik hier boven vermeld heb werkte ook pas nadat ik de code aangepast had.

de code zoals ze nu is

 DEVICE 16F876A
 CONFIG lvp_off, pwrte_on, hs_osc, wdt_on, cpd_on
 XTAL = 20
 
 HSERIAL_BAUD = 9600        ' Set baud rate to 9600
 HSERIAL_RCSTA = %10010000  ' Enable serial port and continuous receive
 HSERIAL_TXSTA = %00100000  ' Enable transmit and asynchronous mode 
 HSERIAL_CLEAR = ON 
 
 DECLARE LCD_DTPIN PORTB.4                           ;LCD DATAPINNEN OP POORT B 4,5,6,7
DECLARE LCD_RSPIN PORTB.2                           ;LCD RS PIN OP POORT B 2
DECLARE LCD_ENPIN PORTB.3                           ;LCD EN PIN OP POORT B 3
 
 DIM clt AS BYTE
 DIM SerString[30] AS BYTE     ' Create a 22-byte array.
  
  DIM MYARRAY[10] AS BYTE   ' Create a 1 byte array.
 MYARRAY [0] = "A"         
 
 
 clt = SerString[6]
 CLEAR 

CLS 
 WHILE 1 = 1 
 HSEROUT [STR MYARRAY \1]
 DELAYMS 100
 HSERIN [STR SerString \22]           ' Fill the array with received data.
 PRINT AT 1, 1, DEC clt 
 
 WEND 

was het niet handiger geweest om hier: http://www.circuitsonline.net/forum/view/63543 verder te gaan ?

nu heb je 2 topic's over het zelfde, en is het overzicht weg

Ik dacht omdat het het zolang geleden was dat ik het beste en nieuw topic opende. En met een propere lei beginnen

Trouwens ik sta nu al veel verder als vorige keer ik heb iets op mijn scherm gekregen "een 0" ;-)

ik zal er volgende keer mee rekening houden.

Bart

hoe ziet je schema eruit, zit er bv. een Max 232 tussen ?

Op 19 februari 2009 01:46:41 schreef B&H:
Ik dacht omdat het het zolang geleden was dat ik het beste en nieuw topic opende. En met een propere lei beginnen

Het was toch handiger daar verder te gaan, gooi ik het oude topic dicht en blijven we hier verder gaan.

Ik zag wat vreemds:


DIM clt AS BYTE
[...]
clt = SerString[6]
[...]
PRINT AT 1, 1, DEC clt 

clt is byte maar je leest een string in, daar mist nog een conversie.

clt staat ook te vroeg in de code boven de main loop, je leest een lege byte (is 0) in.

Als je


PRINT AT 1, 1, STR SerString

gebruikt dan moet je als het goed is een string van 22 tekens tevoorschijn komen.

Zet daaronder eens


PRINT AT 2, 1, STR SerString[6]

of

clt = SerString[6]
PRINT AT 2, 1, STR clt

om het 7e character te tonen.

Op 19 februari 2009 09:40:24 schreef shiptronic:
hoe ziet je schema eruit, zit er bv. een Max 232 tussen ?

er zit een max232 in mijn injectie computer en een max232 op mijn experimenteerbord die aan mijn pic is gekoppeld

Was het niet zo dat die dingen geinverteerd werken ?
heb je daar evt. rekening mee gehouden ?

Met 1 ertussen gaat het inderdaad goed, dus met twee (over overbodigheid gesproken?) zal het wel fout gaan..

Op 19 februari 2009 19:53:42 schreef klein is fijn:
Met 1 ertussen gaat het inderdaad goed, dus met twee (over overbodigheid gesproken?) zal het wel fout gaan..

in mijn injectie computer zit een max232 omdat ik deze ook op mijn pc kan aansluiten. ik moet voor mijn pic toch ook een max232 plaatsten voor het signaal terug op TTL niveau te krijgen.

TTL <-> RS232 en RS232 <-> TTL, niks mis mee.

Heb je nog wat aan de code gedaan?

hier ben ik weer

ik heb weeral vooruitgang geboekt. En bedankt van de vele reacties.

even kort uitleggen wat ik gedaan heb
Ik heb de code een beetje aangepast. de communicatie met de terminal op de pc is nu perfect op de snelheid na.
Om de seconde komt er een A bij in de receive data box.
als ik in de transmit box de leters ABCDEFG in tik en verzend dan komt alleen de letter D op het LCD schermpje staan. In de code heb ik geschreven cls = myarray[3]. Dit klopt omdat de D de 4de byte is. Als ik dit alles dan aansluit op mijn injectie computer gebeurt er niks. Nu is het ook wel zo wanneer ik in de terminal box op verzenden duw dat er niks op het LCD schermpje komt te staan.ik moet pulserend drukken op verzenden 3a4 maal per/sec en dan komt de letter D er staan.

kan het zijn dat ik de compoort zelf moet open en sluiten en en de buffer resetten om de snelheid op te drijven.

PS Henry S dit stukje code geeft de compiller een foutmelding

clt = SerString[6]
PRINT AT 2, 1, STR clt 
 DEVICE 16F876A
 CONFIG lvp_off, pwrte_on, hs_osc, wdt_on, cpd_on
 XTAL = 20
 
 HSERIAL_BAUD = 9600        ' Set baud rate to 9600
 HSERIAL_RCSTA = %10010000  ' Enable serial port and continuous receive
 HSERIAL_TXSTA = %00100000  ' Enable transmit and asynchronous mode 
 HSERIAL_CLEAR = ON 
 
 DECLARE LCD_DTPIN PORTB.4                           ;LCD DATAPINNEN OP POORT B 4,5,6,7
DECLARE LCD_RSPIN PORTB.2                           ;LCD RS PIN OP POORT B 2
DECLARE LCD_ENPIN PORTB.3                           ;LCD EN PIN OP POORT B 3
 

 DIM clt AS BYTE
 DIM myarray[30] AS BYTE    ' Create a 30-byte array.
       


CLEAR 

CLS 
 WHILE 1 = 1 
 
 HSEROUT ["A"]
 DELAYMS 10
 HSERIN [STR myarray\21]          ' Fill the array with received data.
 clt = myarray[3]

 PRINT AT 1, 1, clt     ' Display the byte received
WEND                ' Loop forever

Misschien na

PRINT AT 1, 1, clt 

ook nog een korte pauze inbouwen?

Ik heb een pauze geprobeerd van 10 tot 1000 MS het maakt niet uit het blijft het zelfde.

cls neemt de waarde van Myarray[3]. als deze gereset wordt op een of andere manier. Dan wordt clt ook gereset daar hij de waarde gaat overnemen.