interrupts en hun problemen

Niel-Bij-As.... Man, dat is meer dan 30 jaar dat ik er nog ben geweest voor mijn opleiding in Saffraanberg. :)

Nu terzake. Van picbasic heb ik weinig kaas gegeten maar als ik je programma even doorlees (met hulp van picbasic.nl) heb ik de indruk dat je je richtingaanwijzers automatisch wil bedienen wanneer je al rijdend een maneuver maakt.

Wat me wel meteen opviel bij het declareren van je variabelen is dat je in lijn 20 PORTB.0 eerst LedWit noemt en in lijn 26 wil je ze PinkL noemen. Zoals ik al schreef ken ik te weinig van picbasic, maar ik twijfel of dit wel kan.

Wat ik ook mis in je programma is dat je nergens Endif gebruikt. Voor zover ik weet moet een IF steeds afsluiten met Endif.

Depeet
Jochem

Golden Member

Basic is ook niet mijn favoriete taal, zeker niet in microcontrollers, dus ik heb het even opgezocht: het lijkt er op dat in picbasic geen endif nodig is als je if-statement maar 1 regel beslaat.

Maar de boel een beetje structuur geven zou geen overbodige luxe zijn, Raf.

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

Bij Mikrobasic is wel altijd een end if nodig, ook op 1 regel.
Ik vind het ontbreken van end if's bij 'C' bijv. een groot nadeel (weinig overzicht, je moet accolades gaan tellen...)

Picbasic vind ik een ongestructureerd iets:

Je mag declares overal waar je wilt neerzetten.
Werking van veel functies is vaag (zelfs na het lezen van de handleiding onduidelijk)
Als je het niet opgeeft, bepaalt de compiler 'met de natte vinger' of een pin input of output is.
Schijnbaar creert de compiler bij het END statement zelf iets van een while...wend loop.

Ik houd totaal niet van compilers met dat soort A.I... (dat bepaal ik zelf wel... ;) )

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Jochem

Golden Member

Ik denk dat het een kwestie van wennen is. Ik heb juist het tegenovergestelde: die extra end-keywords in BASIC maken voor mij de leesbaarheid minder omdat er onnodige woorden staan.

Accolades tellen moet niet nodig zijn, omdat je natuurlijk netjes moet inspringen. Voor BASIC geldt dat net zo: een geneste IF in BASIC levert soms ook twee keer een END IF op onder elkaar. Die wil je ook niet tellen: door het inspringen zie je meteen hoe het zit. Dat heeft Raf nagelaten en dat is één van de dingen waarom het programma zo onleesbaar wordt (zeker als je het niet zelf hebt geschreven).

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

De goto hell maakt het niet beter; je weet nooit waar het vandaan komt, en dus waar je naar terug moet. In basic kun je ook gewoon subroutines maken, die elk een simpel en duidelijk taakje uitvoeren, wat een programma veel meer structuur geeft.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Jochem

Golden Member

Ja absoluut, maar van die dingen kun je zeggen dat TS het nog niet onder de knie heeft. Dus dat kunnen we hem uitleggen hoe het beter kan, eventueel met voorbeelden.

Inspringen is echter gewoon een kwestie van doen. Sterker nog, de meeste IDE's/texteditors kunnen het automatisch voor je doen.

Ik vind als je hulp vraagt op een forum, dat je het de mensen die jou potentieel kunnen helpen zo makkelijk mogelijk moet maken. Niet alleen omdat dat fatsoenlijk is, maar ook omdat je dan meer kans op bruikbare antwoorden krijgt. Als ik deze code zie, dan denk ik: ik heb geen zin om me daar nu doorheen te gaan worstelen. De variabelenamen van 1 letter helpen overigens ook niet mee...

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

goeie morgen

eerst wat achtergrond
vroeger begonnen met de z80 om te programmeren
we hadden 1 volledige KB om iets mee te doen en daar ging het beeld scherm dan nog vanaf
dat is een van de redenen dat ik met een enkele letter programmeer voor de variabelen
we hadden toen niet meer plaats in dat ding

en voor een for next loopje of er nu staat for a = 1 toe 1000 of er staat for weetikeveel = 1 to 1000 maat het eigenlijk niet veel uit
als ik een 1 byte variabele heb en ik ga er een 10 letter woord van maken dan is dat ook raar
bv f kan alleen maar 1 of 0 zijn
d en e zijn controle variabelen die kijken of BV een servo reeds op zijn juiste plaats staat ;dan is het stom en ongewild om hem eerst terug naar de midden stand te brengen en dan terug naar de gewenste positie

@sparkygsx er zitten maar 3 goto's in

pic basic code:



  
 teller:

 If  a < 6 Then a = a + 1
      While 1 = 1
       PulsIn PORTA.3,1,schakel
       If schakel = midschakel Then Return
       Wend
  setten:

     If a1 = 1 Then GoTo setten2
     If b1 = 1 Then GoTo setten2
     If d1 = 1 Then GoTo setten2
     If a = 1 Then standl = 0       ;standlicht
     If a = 1 Then PulseOut PORTA.1 , 14 , High
     If a = 1 Then a1 = 1 
     If a = 2 Then grootl = 0       ;grootlicht
     If a = 2 Then b1 = 1
     If a = 3 Then fare =  0       ;verstralers
     If a = 3 Then PulseOut PORTA.1 , 18 , High 
     If a = 4 Then mistl = 0        ;mistlampen
     If a = 4 Then d1 = 1
     DelayMS 200
     a = 0 
     Return 
     setten2:
        

     If a = 1 Then standl = 1       ;standlicht
     If a = 1 Then PulseOut PORTA.1 , 20 , High
     If a = 1 Then a1 = 0
     If a = 2 Then grootl = 1       ;grootlicht
     If a = 2 Then b1 = 0
     If a = 3 Then fare =  1       ;verstralers
     If a = 3 Then PulseOut PORTA.1 , 24 , High 
     If a = 4 Then mistl = 1        ;mistlampen
     If a = 4 Then d1 = 0
     DelayMS 200
     a = 0 
     Return     

en deze gaan allemaal naar de zelfde subroutine

met a1 = 1 bv geef ik aan het programma aan dat er reeds een functie is in of uitgeschakeld,

dit is nodig omdat de pulseout op poort 1 naar een IR diode gaat die de verlichting in de trailer mee stuurt
de trailer kan verschillen of helemaal afwezig zijn
het voordeel van die IR is dat je geen kabels moet aan sluiten

gr raf
nu eerst een print herstellen waar de voeding aan een verkeerde stekker is aangesloten geworden
12 volt op een 5 volt uitgang aansluiten is niet die persoon zijn slimste zet ,maar hij heeft nog van die trukken uitgehaald

Gr Raf
Jochem

Golden Member

Op 8 november 2019 08:05:29 schreef raf janssens:
vroeger begonnen met de z80 om te programmeren
we hadden 1 volledige KB om iets mee te doen en daar ging het beeld scherm dan nog vanaf
dat is een van de redenen dat ik met een enkele letter programmeer voor de variabelen
we hadden toen niet meer plaats in dat ding

Ik programmeerde vroeger ook regelmatig op een Z80. Maar dat heeft hier niks meer mee te maken toch?

en voor een for next loopje of er nu staat for a = 1 toe 1000 of er staat for weetikeveel = 1 to 1000 maat het eigenlijk niet veel uit

Dat klopt wel, een simpele iterator mag best i, of in jouw geval a heten. Zeker bij een kleine loop. Dat doet ook niks af aan leesbaarheid of begrip van de code.

als ik een 1 byte variabele heb en ik ga er een 10 letter woord van maken dan is dat ook raar
bv f kan alleen maar 1 of 0 zijn

Leuk dat het alleen 1 of 0 kan zijn, maar als ik jouw code voor de eerste keer zie heb ik geen idee wat "f" doet. Als ik een paar keer kijk heeft het iets met het remmen/rijden te maken? Ik snap het nog niet helemaal, maar in zo'n geval zou ik er iets van StopGoFlag of bStopGo (b van boolean) van maken.

d en e zijn controle variabelen die kijken of BV een servo reeds op zijn juiste plaats staat ;dan is het stom en ongewild om hem eerst terug naar de midden stand te brengen en dan terug naar de gewenste positie

Prima, maar noem hem dan ook bServoCheck, of liever iets wat de lading nog beter dekt.

met a1 = 1 bv geef ik aan het programma aan dat er reeds een functie is in of uitgeschakeld,

Lees nou eens wat je ons hier vertelt. En bedenk je nou eens hoe makkelijk het was geweest als die variabele "FunctieBezig1" ofzo had geheten.

Geloof je eigenlijk dat als je je eigen code over anderhalf jaar zelf terugleest (bijvoorbeeld voor een kleine aanpassing) dat dit nog duidelijk is?

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

hallo

pic basic code:


  remmen:

  f = 0
  h = 100
   PulseOut PORTB.1, 10 , High     ;link
 While 1 = 1
 DelayMS 200
 h = h - 1
 If h = 0 Then PulseOut PORTB.1 , 12 , High  ;link
 If h = 0 Then Return 
  Wend

het staat er wel degelijk dat dit het stukje is waarop het programma de remlichten laat aan gaan hoor
"remmen:"
kan niet veel meer betekenen in een programma wat over de verlichting van een wagen gaat

pic basic code:


vooruit:


  f = 1 
  Return

vooruit is niet meer dan dit en zet de stoplichten uit
het moet en kan ook niet veel meer zijn dacht ik in een programma over verlichting op een auto

op je vraag
"Geloof je eigenlijk dat als je je eigen code over anderhalf jaar zelf terugleest (bijvoorbeeld voor een kleine aanpassing) dat dit nog duidelijk is?"
ja dit is zeer logische voor mij en ik kan dit programma nog perfect begrijpen zelfs na 5 herseninfarcten die ik dit jaar gehad heb ;waar andere zaken bv gezichten aan namen koppelen niet meer lukt

mijn verwijzing naar de z80 is dat ook de 16f628 maar 1K geheugen heeft en ik geen TB ter beschikking heb om veel anders te programmeren dan nodig

zoals bv de schrijf routine die is eigenlijk maar 1 keer nodig
eens de waarden van de ontvanger in het geheugen zijn gezet veranderd daar niets meer aan .midden stand van de stick is en blijft de midden stand

pic basic code:


 midstuur =  ERead 0  ;puls waarde die weg geschreven is terug inlezen
 If midstuur = 0 Then GoSub  schrijven   ;b2 is ingang setten ewrite
 If setting = 0 Then GoSub schrijven 
  DelayMS 100
 
 midgas = ERead 0
 midstuur = ERead 2
 midschakel = ERead 4
 
DelayMS 800

met de teller kies je welke lampen je gaat aan zetten

pic basic code:


 teller:


 If  a < 6 Then a = a + 1
      While 1 = 1
       PulsIn PORTA.3,1,schakel
       If schakel = midschakel Then Return
       Wend

de 6 kan nog verhoogd worden indien er meer lampen op de wagen gemonteerd worden .
daarna gaat het programma dus verder met setten: en setten2:

setten: is het aan zetten van de betreffende lampen
setten2: is het uitzetten van de gekozen lampen

rechts: en rechts1: is het aan/uit zetten van de rechter pinker
links: en links1: is aan en uitzetten van de linker pinker

ik denk toch dat er voldoende info in het programma aanwezig is om het te kunnen begrijpen

ik vind juist "FunctieBezig1" een onduidelijke beschrijving
want welke functie is met wat bezig ???
net zoals StopGoFlag onduidelijk is want is het nu "stop" of "go" en "flag" er worden geen vlaggen gezet
bStopGo B word als teller gebruikt en heeft geen stop of go functie

ik begrijp wat je wil bedoelen hé maar voor mij is jullie manier van programmeren onduidelijker dan wat ik reeds een 30 jaar doe
en als het werkt waarom overschakelen
zo word me aangeraden in flash of c of cc+ te programmeren en wat is de meer waarde buiten dat ik een nieuwe programmeer taal moet gaan leren
snelheid ???? heb ik echt niet nodig want buiten de pinkers is er niets tijdgebonden .

gr raf

Gr Raf

Of iets begrijpelijk geprogrammeerd is zie je zoals gezegd als je de code na 1 of 2 jaar terugziet.
Duurt het dan lang om te doorgronden wat er gebeurt, dan is dat meestal een kwestie van onduidelijke benaming of ontbrekend commentaar...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Jochem

Golden Member

Op 8 november 2019 14:12:24 schreef raf janssens:

pic basic code:


  remmen:

  f = 0
  h = 100
   PulseOut PORTB.1, 10 , High     ;link
 While 1 = 1
 DelayMS 200
 h = h - 1
 If h = 0 Then PulseOut PORTB.1 , 12 , High  ;link
 If h = 0 Then Return 
  Wend

het staat er wel degelijk dat dit het stukje is waarop het programma de remlichten laat aan gaan hoor
"remmen:"

Die variabele f staat ook nog op andere plekken.

mijn verwijzing naar de z80 is dat ook de 16f628 maar 1K geheugen heeft en ik geen TB ter beschikking heb om veel anders te programmeren dan nodig

Dat je spaarzaam met geheugenruimte om moet gaan heeft echt werkelijk NIKS met de lengte van een variabelenaam te maken.

setten: is het aan zetten van de betreffende lampen
setten2: is het uitzetten van de gekozen lampen

Tja, ik denk dat ik tegen een muur aan praat inmiddels, maar ik zou die labels dan iets van 'aanzetten' en 'uitzetten' genoemd hebben. Je bent hier elke keer in dit topic dingen over de werking/bedoeling van je code aan het uitleggen die juist door wat duidelijkere namen van labels/variabelen voor zich hadden kunnen spreken.

ik vind juist "FunctieBezig1" een onduidelijke beschrijving
want welke functie is met wat bezig ???

Okee, prima argument, maar ik kon uit jouw info niet meer opmaken. FunctieBezig1 is nog altijd meer info dan a1, zoals jij die vlag noemde. Geef hem dan een naam die beter beschrijft wat er voor functie bezig is.

net zoals StopGoFlag onduidelijk is want is het nu "stop" of "go"

Dan noem je hem Stop óf Go, of bRemFlag, of je noemt hem Stop_nGo om duidelijk te maken dat 0=Go. Mogelijkheden te over, en alles begrijpelijker dan f.

en "flag" er worden geen vlaggen gezet
bStopGo B word als teller gebruikt en heeft geen stop of go functie

Je zegt zelf dat f alleen 0 of 1 kan worden. Is voor mij een soort vlag, of op z'n minst een boolean. Geen counter.

ik begrijp wat je wil bedoelen hé maar voor mij is jullie manier van programmeren onduidelijker dan wat ik reeds een 30 jaar doe

Nou heel eerlijk, wat je hier aan het doen bent is echt gerommel. En dat is niet erg, want je komt ook om hulp vragen. Maar nu sla je goedbedoelde adviezen in de wind en steek je je kop in het zand.

Ik ben nog niet eens begonnen over constructies zoals deze:

pic basic code:

While 1 = 1
 DelayMS 200
 h = h - 1
 If h = 0 Then PulseOut PORTB.1 , 12 , High  ;link
 If h = 0 Then Return 
  Wend

Leuk dat je het al 30 jaar zo doet, maar waar denk je dat een while-conditie voor is? Je maakt een oneindige loop, en daarin verstop je dan de return-conditie. Los van het gebrek aan fatsoenlijk inspringen...

en als het werkt waarom overschakelen

Werkt het allemaal? Waarom dan die 2 topics? Jij wilt nu iets bijzonders met interrupts gaan doen, terwijl je huidige code op niks trekt. Dan is het toch fijn als mensen je goed op weg proberen te helpen?
Nee hoor, Raf doet het al 30 jaar zo! Waarom veranderen?

zo word me aangeraden in flash of c of cc+ te programmeren en wat is de meer waarde buiten dat ik een nieuwe programmeer taal moet gaan leren
snelheid ???? heb ik echt niet nodig want buiten de pinkers is er niets tijdgebonden .

Ho ho, nu haal je er iets heel anders bij. Ik ben geen aanhanger van Basic (zeker niet voor een uC), maar ik ga iemand die net een beetje de taal onder de knie heeft echt niet naar een andere programmeertaal lopen pushen.

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

Jochem
ik heb dit topic geopend omdat ik een probleem met de tijd van de pinkers heb
de rest werkt allemaal

een andere taal ging niet over uw inbreng maar er waren anderen die dat in andere topics wel aan haalden

pic basic code:


  remmen:


  f = 0
  h = 100
   PulseOut PORTB.1, 10 , High     ;link

hier dient die while lus voor
om de tijd te bepalen van hoelang de stop lichten werken
dit stukje programma word eens ingeschakeld uitgevoerd
dit staat onder Remmen:

ook hier zou ik een timer voor kunnen gebruiken

F kom je maar op twee plaatsen tegen en dat heeft allemaal met het remmen te maken .
ik zal eens kijken of ik de code meer begrijpbaar voor jullie kan maken
dan lost dat misschien reeds een probleem op en kan het timer probleem opgelost worden
want tot nu toe is daar nog niets van gekomen

gr raf

Gr Raf
Jochem

Golden Member

Het punt is dat als je de tijd van de pinkers niet met een delay wilt doen maar met een timer/ticker, de stuctuur van dergelijke routines ook op de schop moet. Als er dan dingen als while 1=1 in staan met in de loop zowel een delayMS als een return, dan MOET dat gewoon anders.

Reden dat je (voor jouw gevoel) nog steeds geen antwoord op je vraag hebt, is omdat veel antwoordgevers bovenstaande aan zien komen, en zich dus eerst bekommeren om de huidige opbouw van de code. Dat is in aanloop naar de oplossing van jouw oorspronkelijke probleem. Als jij dan zegt "maar het werkt zo, ik zie geen reden tot veranderen", dan kom je nooit aan je timer-probleem toe.

Mijn advies om het allemaal wat leesbaarder te maken was eveneens zodat de oorspronkelijke vraag eerder opgelost kan worden.

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

Op 8 november 2019 14:53:28 schreef Arco:
Duurt het dan lang om te doorgronden wat er gebeurt, dan is dat meestal een kwestie van onduidelijke benaming of ontbrekend commentaar...

Als het goed getest is tijdens ontwerpen hoef je er over 2 jaar niet meer in te wroeten.

Ik ben wel erg benieuwd naar hoe in het autoprogramma straks de interrupts geplaatst gaan worden.
Het lijkt er nu nog op dat er niet begrepen wordt hoe het moet werken.

Jochem

Golden Member

Op 8 november 2019 15:21:21 schreef stortbak:
Als het goed getest is tijdens ontwerpen hoef je er over 2 jaar niet meer in te wroeten.

Dat weet je nooit. Misschien wil je er een zwaailicht bij. Of misschien hergebruik je een stuk code straks voor iets anders, en moet je er dan nog eens naar kijken.

Het lijkt er nu nog op dat er niet begrepen wordt hoe het moet werken.

Dat is inderdaad onderdeel van waarom er nog geen pasklaar antwoord is voorgeschoteld.

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

Als het goed getest is tijdens ontwerpen hoef je er over 2 jaar niet meer in te wroeten.

Ik heb al heel veel commerciele ontwerpen gemaakt.
Bijna altijd blijf je daarin bezig omdat kleine bugs bovenkomen in het gebruik, of omdat sommige zaken beter kunnen.
(of simpel omdat de klant functionele uitbreiding wil. Wel zo handig als je dat dan snel kunt implementeren en niet eerst hoeft uit te vlooien hoe alles werkt)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Jochem

Golden Member

Even vooropgesteld dat ik geen PICBASIC kenner ben, heb ik de moeite genomen om door je programma heen te lopen om het te begrijpen. Ik kom daarbij een aantal dingen tegen waar ik m'n vraagtekens bij heb. Hopelijk kun je me wat duidelijk maken.

Ten eerste: er blijkt een MELABS PICbasic Pro te bestaan, en een Proton (PIC)basic. Welke gebruik jij? Dan weet ik even welke manual ik erbij moet pakken.

pic basic code:

stuurrechts = midstuur - 20
stuurlinks = midstuur + 20

Dit staat vrijwel bovenin je code, net na de config, de symbols en de declaratie van variabelen.
Hier heeft midstuur nog geen waarde gekregen, dan ga ik er zomaar even vanuit dat hij door de compiler op 0 geïnitialiseerd wordt. Gezien je 'calibratieroutines' van midstuur denk ik dat je de toekenning aan stuurrechts en stuurlinks pas wilt doen NA de ERead (of na de nieuwe setting). Op dit punt in je code had er net zo goed kunnen staan stuurlinks=20 of stuurrechts=-20.

pic basic code:

 midstuur =  ERead 0  ;puls waarde die weg geschreven is terug inlezen
 If midstuur = 0 Then GoSub  schrijven   ;b2 is ingang setten ewrite
 If setting = 0 Then GoSub schrijven 
  DelayMS 100
 
 midgas = ERead 0
 midstuur = ERead 2
 midschakel = ERead 4

Dus ik zou zeggen NA bovenstaande code pas de stuurlinks / stuurrechts toekenning doen.
Ik snap eigenlijk niet hoe het momenteel kan werken, aangezien de middenstand om een pulslengte gaat en dus nooit 0 kan zijn. Een negatieve waarde voor stuurrechts wordt al helemaal lastig. Maar je zegt "het programma werkt", en op diverse plaatsen controleer je of stuur = stuurrechts. Dus OF ik zal iets niet begrijpen (best mogelijk), OF wat je nu hebt gepost is niet de programmacode die werkt (en dat is lastig als we je proberen te helpen).
.

pic basic code:

start:  

 While 1 = 1
  PulsIn PORTA.2,1,gas
  PulsIn PORTA.3,1,stuur
  PulsIn PORTA.4,1,schakel

De manual zegt

PULSIN Pin,State,Var

Maar bovenin je code worden gas/stuur/schakel als symbols voor de respectievelijke pinnen van PORTA gebruikt, en niet als variabele gedeclareerd:

pic basic code:

Symbol stuur   = PORTA.4      ;servostuur ingang
Symbol gas     = PORTA.2      ;servo gas ingang
Symbol schakel = PORTA.3      ;servo schakelaar

Je zegt dat je code werkt, dus kennelijk gaat PICBASIC alsnog inline een variabele voor je declareren met dezelfde naam als het symbol.

Het is in elk geval heel verwarrend dat je allemaal symbols definieert die je in de rest van je code (ook op andere plaatsen) vervolgens niet gebruikt, maar hard-coded PORTx.# neerzet.

Hier hetzelfde verhaal:

pic basic code:

      While 1 = 1
       PulsIn PORTA.3,1,schakel
       If schakel = midschakel Then Return
       Wend

Of hier:

pic basic code:

While stuur = stuurlinks
PulsIn PORTA.4,1,stuur 
Wend 

En nog iets over bovenstaande code: wat als de uitgelezen waarde van stuur nu eens net 1 stapje meer of minder is dan die afwijking van 20 ten opzichte van de middenstand? Het lijkt me dat je een band wilt definiëren. Zelfde voor mid-posities, tenzij je controller daar precies genoeg voor is.
.

pic basic code:

rechts:

 If e = 0 Then e = 1
 PulseOut PORTB.1 , 14 , High  ;link
  While stuur = stuurrechts 
 PulsIn PORTA.4,1,stuur
 Wend
 Return 
 rechts1:

 If e = 1 Then e = 0
 PulseOut PORTB.1 , 16 , High  ;link
  While stuur = stuurrechts 
 PulsIn PORTA.4,1,stuur
 Wend
 Return 

Wat betekent in bovenstaande code eigenlijk steeds het commentaar ;link ? Ik zie dat op diverse plaatsen terug.

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

beginnen bij het begin
ik gebruik proton basic

stuurrechts = midstuur -20

daar word inderdaad op dat ogenblik niets mee gedaan
maar dit dient om een dode slag te hebben anders zou de routine bijna elke keer aan gesproken worden om de pinkers uit of aan te zetten

Symbol ledwit = PORTB.0 ;controle ledje status
Symbol link = PORTB.1 ;uitgang naar achter modulle
Symbol stuur = PORTA.4 ;servostuur ingang
Symbol gas = PORTA.2 ;servo gas ingang
Symbol schakel = PORTA.3 ;servo schakelaar
Symbol setting = PORTB.5 ;setknopje
Symbol pinkl = PORTB.0 ;pinker links
Symbol pinkr = PORTB.1 ;pinker rechts
Symbol standl = PORTA.0 ;standlicht
Symbol grootl = PORTA.1 ;grootlicht
Symbol fare = PORTB.7 ;verstralers
Symbol mistl = PORTB.6 ;mistlampen

dit zijn al de in en uitgangen die worden als symbol gedefinieerd
hier mee geeft ik de poorten een naam zodat het programma leesbaarder word
doe ik dit niet dan is dit het verschil

pic basic code:


If e = 0 Then e = 1
 PulseOut PORTB.1 , 14 , High  ;link
  While stuur = stuurrechts 
 PulsIn PORTA.4,1,stuur
 Wend
 Return 

If e = 0 Then e = 1
 PulseOut PORTB.1 , 14 , High  ;link
  While PORTA.4 = stuurrechts 
 PulsIn PORTA.4,1,STUUR
 Wend
 Return 

wat nu hier gebeurt is dat of de linker of rechter poort van de pinkers word laag gemaakt
een aparte 12f629 die knipperd altijd maar als ik nu links of rechts laag maak dan knipperd de led van de pinkers dus wel zonder invloed van de rest van het programma

Dan je vraag naar de beschrijving "link"
dit is de infrarood link naar de trailer
dit staat reeds duidelijk vermeld bij de symbol bepaling

Symbol link = PORTB.1 ;uitgang naar achter modulle

de ingangen zijn stuur omdat het programma moet weten of het stuur recht ,links of rechts staat

ingang gas is om te kijken of je voor of achteruit rijd en heeft betrekking op de stop lichten

ingang schakel is een schakelaar die midden onder en boven heeft en waar je mee kiest welke lamp je wil inschakelen
knip je naar boven dan telt de teller op en knip je naar beneden den bevestig je deze lamp aan of uit te doen
is hij groter dan midschakel dan gaat hij naar de teller
is hij kleiner dan gaat hij naar setten waar hij dan dit tegen komt
If a1 = 1 Then GoTo setten2
If b1 = 1 Then GoTo setten2
If d1 = 1 Then GoTo setten2
a1 ,b1 en d1 zijn de betreffende lampen dat als die uit zijn en dus 1 dat niet de lamp nog eens word uit gezet maar dat het programma dan naar setten2 gaat en dan deze lamp aan doet
de schakelaar moet wel elke keer terug naar de midden stand voor hij verder optelt anders weet je nooit welke lamp je gekozen hebt

elke keer een lamp aan of uit gedaan word dan word een pwm over een infrarood verbinding gemaakt met de module in de trailer
PulseOut PORTB.1, 10 , High ;link
komt over een met de stop lichten te laten oplichten
If h = 0 Then PulseOut PORTB.1 , 12 , High ;link
en hier worden ze terug uitgezet

hopelijk een wat betere uitleg en morgen ga ik het programma aan passen met dat inspringen

gr raf

Gr Raf