Hallo,

Ik heb wat problemen met met maken van een seriel bus tussen twee PIC`s type 628. Schrijf in de taal PIC-basic van Proton, het maken van een bus-lijn gaat opzich wel alleen zodra de ontvanger het volgende comando in het programma krijgt valt de counter die er in zit om het ledje te laten knipperen helemaal stil:

HSerIn 20, Verder, [OntvangenData]

Mijn vraag is dan wat er moet gebeuren om de microcontroller gewoon in werking te houden als dit comando word toegepast. Mischien pas ik het ook wel verkeerd toe.

Alvast bedankt,
Wesley

Je commando wacht echt 20 milliseconden voor de rest van het programma wordt uitgevoerd.

Of je moet de counter minder maken of wacht maar 1 milliseconde door

Hserin 1, Verder, [OntvangenData]

te gebruiken....

Dan wacht je dus 20 keer zo kort, maar zal de counter wel sneller doorlopen.

Ik weet niet precies waar en wanneer je je commando gebruikt, dus kan het niet helemaal bepalen wat voor jou het beste is.

Maakt niets uit. Als de regel: HSerIn 1, Verder, [OntvangenData] weghaal, en haal even de spanning eraf begind het rode ledje weer te knipperen.

Hier het programma van PIC2.

While 1 = 1
Begin:

Inc Teller1
DelayMS 10
If Teller1 = 100 Then
High ROOD
EndIf
If Teller1 = 200 Then
Low ROOD
Clear Teller1
EndIf

If OntvangenData = 1 Then
High GEEL
EndIf
If OntvangenData = 0 Then
Low GEEL
EndIf

HSerIn 1, Verder, [OntvangenData]

Verder: ;In het geval van een time-out, hier verder gaan
GoTo Begin

Wend

Je programma zou gewoon moeten werken ik zou alleen de volgende regel gebruiken:

Hserin 1, begin, [onvangendata]

Komt op hetzelfde neer en je kunt het label Verder en goto Begin weghalen.

Ja dat denk ik ook. Maar werkt niet, heb echt het idee dat die counter niet werkt zodra Hserin comando in het programma komt, erg raar. Mischien is de PIC16F628 wat aan de ligte kant is om alles te kunnen uitvoeren? Als ik er een heb ga ik eens kijken of een PIC18F252 wel wil werken.

Sorry hoor, maar een jump-label op deze manier binnen een While_Wend lus is toch echt dubieus programmeren.
Ten eerste heeft het geen enkel effect, als er geen 'goto begin' zou staan zou dat toch effectief wel gebeuren door de wend.
Ten tweede gebeurt er niets met de time-out. Waarom zet je die er dan uberhaupt in?

De oplossing van Roches lijkt mooier, maar uiteindelijk kleven er dezelfde bezwaren aan. Voor het structureel killen van een te lange time-out is het verder wel de minst onelegante oplossing in Proton.

Verder...de 628A is krachtig genoeg om dit te doen, een 18F252 is voor zoiets simpels enorme overkill (wsl zou een 12F629 al voldoende zijn).
Dat je rode led knippert is logisch. Dat staat gewoon in je programma.
Je gele led gaat alleen maar aan als je 0 of 1 ontvangt.
De vraag is dus...wat stuur je naar deze uC?

hadv, dat de goto begin er nog in staat is idd niet nodig als er een while - wend in staat. Time-out stond er in het begin wel in, maar omdat het niet goed werkt is hij eruit gehaald. Dit zijn eigenlijk nog wat sporen van wat er eerder allemaal heeft ingestaan.
De datalijn werkt goed, het gele ledje knipperd goed, maar zodra het comando HSerIn in de software word bijgeschreven werkt het rode ledje niet meer, terwijl geel dan wel gaat knipperen via USART. Zelf weet ik niet waarom rood stopt met knipperen zodra USART actief word.
Heb trouwens dit eenvoudige programma gemaakt om dit probleem met Hserin te kunnen oplossen.

Hier het programma:

While 1 = 1
HSerIn 1, Begin, [OntvangenData]
Begin:

Inc Rodeled
DelayMS 10
If Rodeled = 100 Then
High ROOD
EndIf
If Rodeled = 200 Then
Low ROOD
Clear Rodeled
EndIf

If OntvangenData = 1 Then
High GEEL
EndIf
If OntvangenData = 0 Then
Low GEEL
EndIf

Wend

End