Ik ben bezig met het verkennen van USART van de PIC en wil eigenlijk in eerste instantie iets heel simpels doen.
-->In RAMgeheugen heb ik een paar ASCII karakters opgeslagen, die ik via de seriele poort in Hyperterminal wil krijgen.
Probleem..ik krijg het niet voor elkaar..en dat stomme MPLAB simuleert de seriele transmissie niet, dus ik kan niet gericht foutzoeken...

Onderstaande subroutines zijn volgens mij verantwoordelijk voor het niet functioneren en mijn vraag aan jullie is natuurlijk "Zien jullie wat ik fout doe?"

De eerste routine is de routine die helemaal als eerste aangeroepen wordt: initialiseer de seriele verbinding.

De tweede routine wordt aangeroepen om 1 karakter te versturen.

Ik maak gebruik van een buffer in bank1, die mbv indirecte adressering (TxPointer) aangesproken wordt.


SetUpSerial	Bank1
		movlw	0xC0		;set tris bits for TX and RX
		movwf	TRISC		;
					;
		movlw	.129		;set baud rate 9600 at 20MHz
		movwf	SPBRG		;
					;
		movlw	0x24		;enable transmission and high baud rate
		movwf	TXSTA		;
					;
		Bank0			;select bank 0
		movlw	0x80		;enable serial port and disable reception
		movwf	RCSTA		;
					;
		movlw	0xA0		;BaseAddress for TxPointer
		movwf	TxPointer	;Create TxPointer
					;
		clrf	Flags		;clear all flags
		return

TransmitSerial:	Bank0			;select bank 0
		movf	TxByteCount,F	;check if data to be transmitted 
		btfsc	STATUS,Z
		return			;return if no data to be transmitted
					;
		btfss	PIR1,TXIF	;check if transmitter busy
		return			;return if transmitter busy
					;
		BANKISEL TxBuffer	;bank bit for indirect addressing
		movf	TxPointer,w	;Move TxPointer into w
		movwf	FSR		;and then into Pointer
		movf	INDF,W		;get the data to be transmitted
		movwf	TXREG		;and transmit
					;
		decf	TxByteCount,F	;decrement number of bytes left
		incf	TxPointer,F	;increment pointer to next data
		return

Ik hoop dat jullie mij hier mee kunnen helpen!

Ik heb het dan eindelijk gevonden..het zit in het register RCSTA.
Wat ik wil is alleen data verzenden en niet ontvangen. Dat kan blijkbaar niet...
Het CREN-bit moet blijkbaar geset worden (continuous receive) om te kunnen zenden...Erg vreemd.
De verbetering is dus deze:


		movlw	0x90		;enable serial port and reception
		movwf	RCSTA

Weet iemand of het mogelijk is om de PIC alleen in transmit-mode te zetten? Of is dat idee zowiezo onzin?

dus hiermee kan jij een en ander verzenden van PIC????? naar PC via seriele poort en binnenlezen in hyperterminal

intersant, kmoe da ook no es bestuderen
kan je ook de zaken binnenlezen in andere projes dan hyperterminal valt er daar zelf iets rond te proggen in VB ofzo

dat weet ik wel zeker :)

heb een rs232 gestuurde lichtbak gemaakt :)

met een 16f628

en de software zelf in VB gemaakt, werkte als een tiet, nu niet meer omdat ik die pic nodig had :)

Ik zag een 'fout' staan op de eerste regel :-)

movlw	0xC0
movwf	TRISC		;

klopt niet. TX is transmit dus OUTPUT en RX is receive dus INPUT. dus moet zijn:

movlw   0x80
movwf  TRISC

maar dacht wel dat de controller dat zelf aanpast als je volgende stap doe:

bsf 	RCSTA,SPEN	;seriele poort enabled, RC7 en RC6 geconfigureerd

Dus mijn idee is dat je toch beide pinnen (RC6 en RC7) configureerd als seriele comm. pinnen.
Ik geloof dat ik vroeger, ook bij eerste 'UART-pogingen', alleen transmit heb uitgeprobeert en dat dat wel gelukt was, zonder die CREN-bit te setten. Die code heb ik niet meer, maar had toen de datasheet letterlijk gevolgd. Dus het zou me verwonderen dat je 'receive' niet links kan laten liggen. Enfin, proberen maar eh

Op 7 januari 2004 17:01:52 schreef Zwabber:
Ik zag een 'fout' staan op de eerste regel :-)

movlw	0xC0
movwf	TRISC		;

klopt niet.

Klopt wel..Lees maar eens de datasheet en kijk bij de USART..Het verbaasde mij eerst ook, maar blijkbaar moet je eerst beiden tri-state maken wil de PIC er een Tx enRx van maken.

Anyway, het werkt nu, maar de vraag blijft of het mogelijk (of onzin) is om die PIC puur en alleen als transmitter in te stellen. Ik vraag me namelijk af waarom je individeel Rx en Tx moet enablen.

Op 7 januari 2004 18:06:08 schreef DIY:

Ik vraag me namelijk af waarom je individeel Rx en Tx moet enablen.

misschien omdat je Rx één IO is en je Tx één IO is... wil je alleen de Rx gebruiken dan kun je de Tx pin gewoon als IO gebruiken voor andere zaken.
Andersom kan natuurlijk ook ;)

Op 7 januari 2004 16:59:43 schreef Jeroen Boere:
dat weet ik wel zeker :)

heb een rs232 gestuurde lichtbak gemaakt :)

met een 16f628

en de software zelf in VB gemaakt, werkte als een tiet, nu niet meer omdat ik die pic nodig had :)

nice mag ik de source van dat progje eens lenen ;) om mezelf wat wegwijs te maken in het programmeren in VB
kben daar geen krak in zeker niet als het om seriele communicatie gaat:(

by the way 'werk als een 'tiet'' is dat geen menselijke uier ;)
of zeggen jullie dat zo

tis zegmaar een uitdrukking hier in brabant :)

Op 7 januari 2004 21:33:29 schreef Jeroen Boere:
tis zegmaar een uitdrukking hier in brabant :)

haha:)

zend je me dat progke eens op???
zou dat trouwens lukken met USB (kzou wel wat modern willen doen)

Op 7 januari 2004 22:04:51 schreef Sp3ci3S:

[...]

haha:)

zend je me dat progke eens op???
zou dat trouwens lukken met USB (kzou wel wat modern willen doen)

dat word meteen een stuk lastiger!

ps die software hou je van me te goed... die staat op een pc die nu niet aangesloten staat.. dacht dat ik het op mijn sleeptop had... helaas, next week krijg je hem

Op 7 januari 2004 22:21:27 schreef Jeroen Boere:
dat word meteen een stuk lastiger!

ps die software hou je van me te goed... die staat op een pc die nu niet aangesloten staat.. dacht dat ik het op mijn sleeptop had... helaas, next week krijg je hem

> mmm kzal eens wat research doen

>bedankt als je dit wilt mailen, kan wel nog een weekje wachten;) sleeptop hahaha:)

Op 7 januari 2004 18:06:08 schreef DIY:

[...]

Klopt wel..Lees maar eens de datasheet en kijk bij de USART..Het verbaasde mij eerst ook, maar blijkbaar moet je eerst beiden tri-state maken wil de PIC er een Tx enRx van maken.

Kan ik dan alleen maar over zeggen dat je met een andere PIC processor bezig bent. Ik kan geen tri-state maken,het is dus out- of input, vandaar het misverstand. Ik zwijg al :-)

Op 8 januari 2004 00:20:46 schreef Zwabber:
het is dus out- of input

Uhh..input kun je opvatten als tri-state, misschien handig om te weten?

DIY

Ik zou wel héél graag die source van je willen hebben. ben zelf al weken aan het klooien met die seriele poort van en naar PC maar krijg het nog niet voor elkaar...
je mag me gewoon mailen: fred@miniware.nl

Mijn dank is verpletterend!

Fred, Belfeld.

Op 7 januari 2004 16:59:43 schreef Jeroen Boere:
dat weet ik wel zeker :)

heb een rs232 gestuurde lichtbak gemaakt :)

met een 16f628

en de software zelf in VB gemaakt, werkte als een tiet, nu niet meer omdat ik die pic nodig had :)

Dit klinkt wel heel erg interessant en orgineel.
Ik zou het erg leuk vinden om hier wat meer over te zien. Misschien een topic in ontwikkeling met foto's, uitleg, screenshots etc... Dit zijn dingen die wel meer mensen willen zien denk ik. Jammer dat niet iedereen meteen alles op internet zet. Ik kijk graag naar andermans creaties.
Ik hoop nog wat te zien/horen :)

Jeroen wanneer zend je me dat VB fileke?? :)

Op 13 januari 2004 17:14:41 schreef Sp3ci3S:
Jeroen wanneer zend je me dat VB fileke?? :)

zsm :)

moet nog ff het e.a aanpassen.

je krijgt een versie waarbij je chars (A t/m D) kan versturen naar je compoort, de software die in de uC zit reageerd op de commandoos en stuurt een char terug.

De rest moet je er maar omheen denken.

screenshotje:

http://www.coolelektric.com/co/rxtx.gif

Op 13 januari 2004 15:13:32 schreef Atmoz:

[...]

Dit klinkt wel heel erg interessant en orgineel.
Ik zou het erg leuk vinden om hier wat meer over te zien. Misschien een topic in ontwikkeling met foto's, uitleg, screenshots etc... Dit zijn dingen die wel meer mensen willen zien denk ik. Jammer dat niet iedereen meteen alles op internet zet. Ik kijk graag naar andermans creaties.
Ik hoop nog wat te zien/horen :)

ik zal een nieuw topic openen vanavond.
Ik ga er NIET de source bij zetten, dit om diverse redenen
oa:
Het is nog niet af, en het is iets waar ik vrij veel tijd in heb gestopt, dus gooi ik het niet zo maar op het internet.

Ik help graag andere mensen om ook zo iets te maken, zie dit topic. maar het overgrote deel moet toch door de vraagsteller zelf gedaan worden ;)

en wat betreft het niet meteen op internet zetten: ik ben een druk man, metname met mijn werk

Dat programma ziet er leuk uit.
Als ik het goed begrijp kun je dus ook iets maken dat je een hele PIC bestuurd met maar 2 lijntjes (RX/TX). Nu gebruik ik 5 datalijnen van de LPT poort en hang die aan 5 ingangen van de PIC om er dan ongeveer 16 verschillende dingen te laten gebeuren. Maar als ik dit ook kon maken over 2 lijntjes, dan hou ik dus nog 3 ingangen over op de PIC. Deze kan ik dan weer voor iets anders gebruiken.

Het zou heel makkelijk zijn als je een "A" verstuurd dat dan uitgang 1 van de PIC hoog wordt, en als je via de pc een "B" verstuurd dat dan uitgang 2 van de PIC hoog wordt, enzovoorts.. Heel wat makkelijker te maken als ik nu doe:

if pin_a1 & pin_a2 & ! pin_a3 & ! pin_b0 & pin_b1 == high then...

Op deze manier bestuur ik nu 16 kanalen via 5 datalijnen van de LPT1 en 5 ingangen op de PIC. Als ik kon communiceren via RS232 (2 lijnen) dan spaart dan een hoop werk/tijd/poorten op de apparatuur. Jeroen, kun je niet eens vertellen hoe je aan al die info kwam om dit te maken. Ik hoop dat je dit ook met JAL kunt doen namelijk.

Op 13 januari 2004 18:21:54 schreef Jeroen Boere:
zsm :)

moet nog ff het e.a aanpassen.

je krijgt een versie waarbij je chars (A t/m D) kan versturen naar je compoort, de software die in de uC zit reageerd op de commandoos en stuurt een char terug.

De rest moet je er maar omheen denken.

ik wacht geduldig;)

ik moet die source niet van het VBprogje
als je me kan uitleggen hoe ik de communicatie van compoort naar vb doe is het ook al goed
of ergens waar ik goeie info vind

CO-forum? kzal eens kijken ;)

Ik kan je precies vertellen hoe je moet communiceren met de COMpoorten in VB6. Ik ben er vandaag de hele tijd mee bezig geweest :)

Jeroen kun je mij helpen met de PIC code voor het ontvangen van RS232 signalen? Ik weet niet welke libraries en welke code ik moet gebruiken om bijvoorbeeld een led op pin_a1 te laten aangaan als de PIC een "a" ontvangt van de pc. Wie oh wie kan me daarmee helpen (in JALcc aub).

Greetz,
Atmoz

ik maak geen gebruik van JAL
ik schrijf alles in asm.

wat betreft de aansturing in vb, eenvoudig:

voeg het component MSCOMMCONTROL toe (versie 6.0)
die stel je in op bijvoorbeeld 9600,1,8,n ofzo (gewoon wat experimenteren, de default settings zijn goed)

daarna wil je dus dat er iets naar je compoort geschreven gaat worden.dus moet je hem eerst openen: dan moet je dit in de startup van je programma zetten:(of je maakt er een apparte knop voor)


mscomm1.open = true

daarna wil je simpel ff een char naar de pic sturen:


mscomm1.output = "A"

Er word nu over de compoort het char A naar je pic gestuurd.

N.a.v. deze discussie en enkele vragen per email heb ik enkele routines van Microchip ontvangen. (Mag ik je naam hier noemen?)
Na wat aanpassingen werken die uit den kunst.
Verzenden en ontvangen, interupt gestuurd op alle mogelijke baudrates is nu geen probleem meer. Daarnaast heb ik er nog een interupt timer door lopen, alles loopt!!!
e.e.a. draait op een 16F876, maar moet ook op tal van andere lopen.
Wie geintereseerd is mag mij altijd per email benaderen, dan stuur ik e.e.a. door.
Succes met RS232 en PIC!!!

fred@miniware.nl