Hallo allemaal,

Hier ben ik weer eens een keer met een vraagje over mijn µc, deze keer een software vraagje:

Ik ben bezig met wat te experimenteren met het aansturen van de poorten, dat lukt me vrij aardig maar ik loop steeds weer tegen hetzelfde probleempje aan, ik vind het moeilijk om het uit te leggen, vandaar dat ik een simpel programmatje heb geschreven om het uit te leggen:

include f877_20
include jlib
disable_a_d_functions

var bit LED_SNEL is pin_a3
var bit LED_LANGZAAM is pin_b0

pin_a3_direction = output
pin_b0_direction = output

forever loop
LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_LANGZAAM = high
delay_1s ( 2 )
LED_LANGZAAM = LOW
DELAY_1S ( 2 )
end loop

Ik heb twee ledjes aangesloten op twee verschillende poorten, ik wil de ene snel, en de andere langzaam laten knipperen.
Als ik bovenstaand programmatje in mijn PIC zet, dan draait het wel, maar niet wat ik wil.
Ik denk dat wel duidelijk is wat de bedoeling is, LED_SNEL moet onafhankelijk knipperen van LED_LANGZAAM, dat is nu niet het geval.
Hopelijk begrijpen jullie wat ik bedoel, alvast bedankt.

Ik snap precies wat je bedoelt. Maar geheel onafhankelijk kunnen ze niet knipperen. Het is geen multitasking systeem wat op je pic draait en alles gebeurt sequentieel dus na elkaar en niet tegelijkertijd.

Jouw programma doet het volgende (in woorden):
Led snel aan.
Wacht 100ms
Led snel uit
Wacht 100ms
Led langzaam aan
Wacht 1s
Led langzaam uit
Wacht 1s

en dan dat weer opnieuw.

Wat er dus gebeurt is dat ledje snel 1 keer snel knippert, en dan de langzame 1 keer langzaam knippert. Ze zullen dus altijd op mekaar wachten en pas beginnen als de ander uit is.

Als we kijken naar een tijddiagram van de led's ziet dat er als volgt uit:


led (snel):   |   aan   |       uit        |   aan   |    uit
tijd:         0       100ms    1200ms    2200ms    2300ms  

led(traag):   |   uit   |   aan    |    uit    
tijd:         0       1200ms     2200ms 

Zo werkt het dus nu, alleen jij wilt wat anders.
Ik zal nu ff jouw programma herschrijven zodat het wel werkt zoals je wilt.

include f877_20
include jlib
disable_a_d_functions

var bit LED_SNEL is pin_a3
var bit LED_LANGZAAM is pin_b0

pin_a3_direction = output
pin_b0_direction = output

forever loop

LED_LANGZAAM = high
LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_LANGZAAM = LOW
LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

LED_SNEL = high
delay_100ms
LED_SNEL = low
delay_100ms

end loop

Ik weet niet hoe JAL werkt, maar je kunt die led snel routines natuurlijk ff in een subroutine zetten en dan gewoon elke keer aanroepen ipv geheel daar neerkwakken.

Nu zal led snel snel knipperen en led langzaam langzaam, :).
Alleen nooit onafhankelijk, dat kan namelijk niet. Ze zullen altijd een soort verband houden.

[Bericht gewijzigd door Bastiaan op ]

uhhhhhhhh......tja......
ik begrijp wel wat je bedoelt, maar het overzicht ben je zo wel kwijt hoor.
Ik had gedacht (en gehoopt) dat het gewoon een kwestie was van die twee blokjes tegelijkertijd te laten starten, maar dat is dus niet mogelijk?

In elk gaval hartelijk dank voor je zeer uitgebreide uitleg.

Op vr 09-08-2002 15:33:40 schreef Jaco van der Linden:
Ik had gedacht (en gehoopt) dat het gewoon een kwestie was van die twee blokjes tegelijkertijd te laten starten, maar dat is dus niet mogelijk?

Nee klopt, dat is niet mogelijk, iig niet zo simpel dat je ze allebij tegelijk aanroept.

(Het kan wel, alleen dat is heel moeilijk, je moet dan met times en interrupts gaan werken)

Ik wil niet "beterweterig" overkomen, maar ik heb in een programma eens het commando "procedure" gezien, kan ik hier soms iets mee, of zit ik er dan helemaal naast?

Op vr 09-08-2002 15:46:17 schreef Jaco van der Linden:
Ik wil niet "beterweterig" overkomen, maar ik heb in een programma eens het commando "procedure" gezien, kan ik hier soms iets mee, of zit ik er dan helemaal naast?

Je kan er wel wat mee :), maar niet jouw probleem oplossen.

Ik ken Jal niet, maar heb het ff snel opgezocht. Je kunt een procedure gebruiken (net zoals in c/c++) als functie. Het blijft dus achter elkaar uitgevoert worden alleen er wordt soms ff naar een speciaal gedeelte gesprongen, dat wordt dan uitgevoert en dan wordt er weer teruggesprongen. Alleen wel alles ACHTER ELKAAR, en niet tegelijkertijd.

Ik ben overtuigd.....jammer dan.
In elk geval bedankt voor je moeite

Groetjes jaco

maar bastiaan hoe moet ik dat dan doen als ik 2 condensatoren wil lezen die opgeladen worden met een voedingspanning met een LDR dervoor... dan moet ik op 2 poorten lezen hoe lang het duurt voordat deze omspringt naar een 1 (condenstaor geladen)... kan dat dan ook niet?

Op vr 09-08-2002 19:43:05 schreef Bernd:
maar bastiaan hoe moet ik dat dan doen als ik 2 condensatoren wil lezen die opgeladen worden met een voedingspanning met een LDR dervoor... dan moet ik op 2 poorten lezen hoe lang het duurt voordat deze omspringt naar een 1 (condenstaor geladen)... kan dat dan ook niet?

Je wilt dus 2 verschillende tijden eruitkrijgen?

ja zodat ik ze kan vergelijken en daaruit een richting kiezen.

Op vr 09-08-2002 19:43:05 schreef Bernd:
maar bastiaan hoe moet ik dat dan doen als ik 2 condensatoren wil lezen die opgeladen worden met een voedingspanning met een LDR dervoor... dan moet ik op 2 poorten lezen hoe lang het duurt voordat deze omspringt naar een 1 (condenstaor geladen)... kan dat dan ook niet?

Ja, dat kan wel. Het probleem bij Jaco is is dat hij 2 verschillende stukken programmacode tegelijkertijd wil uitvoeren, en dat gaat gewoon niet.

Jij wilt 2 verschillende pinnen uitlezen. Dat kan gewoon. Als je daarvoor 2 verschillende poorten gebruikt dan kun je die pinnen niet tegelijktijd uitlezen maar met een tijd van 5µs ertussen wel. Aangezien jouw condensator niet zo snel is dat die 5µs zal uitmaken is dit totaal geen probleem. Je moet trouwens zodra je de I/O hebt uitgelezen toch wat handelingen verrichten en zal dus nooit continue die poorten uitlezen en altijd wel discontinue ze scannen, maar dat is geen probleem hierbij.

Sluit je de condensatoren aan op dezelfde poort dan kun je zelfs beide pinnen tegelijk uitlezen.

ja maar dan kan ik ze niet evrgelijken... maarre zou jij misschien een kee rkunnen helpen met een kleien stukje van die programmereing, want daar kom ik niet uit....?

Is best, alleen jij gebruikt JAL en geen asm toch?
Want asm kan ik wel, maar JAL (nog) niet.

[Bericht gewijzigd door Bastiaan op ]

euh nou ik vind asm best moeilijk en het is niet echt beoeidn voor mij om zo'nhele taal te leren als ik maar een klein beetje programmatuur nodig heb.... misschien kunnen we mijn JAl gedeelte en een stukje asm samenvoegen in the end?

de schema's heb ik al... het moet maar een klein stukje zijn volgens mij. Als je mischien een klein zetje zou kunnen geven, heel graag!

dit is zo'n beetje waar het om gaat: www.stampsenclase.com/downloads/rob4.pdf

[Bericht gewijzigd door Bernd op ]