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
ENDOp 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%)]
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
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
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
klein is fijn
Moderator
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.
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
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
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.