ik heb een app dat werkt zolang er een logisch signaal op een PIC poort beschikbaar is. Als het signaal langer dan een bepaalde tijd aan een wegvalt (zeg 2 minuten) schakelt eea zich automatisch uit.
Zolang het signaal beschikbaar laat de PIC een ledje continue branden. Deze begint snel te knipperen zodra het signaal wegvalt. naar mate dit langer duurt moet ie steeds langzamer gaan knipperen totdat de maximum tijd is verstreken.
Het blijkt dat het programmeren van dit knipperen me wat meer hoofdbrekens kost dan ik aanvankelijk inschatte.
Stel dat de begin freq 1x aan\uit per 20msec is en dit lineair afloopt naar 1x per sec over die 2 minuten. Dan blijkt dat ik dit allesbehalve als lineair ervaar als je er naar kijkt en het er knap onlogisch uitziet 
Is er iemand die hier toevallig een algoritme oid voor weet of wordt dit een (ietwat tijdrovende) kwestie van proefondervindelijk acceptabele 'trapjes'(bv t0:20msec,t1:35msec,t2:80msec, t3:200msec, etc) vaststellen oid...
klein is fijn
Moderator
Gooi een aantal van die stappen in een grafiek, dan zie je snel genoeg wat voor verband er tussen zit.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Ipv. domweg te knipperen, kan je ook het volgende doen:
Korte tijd geen signaal: aanhoudend knipperen.
Langere tijd geen signaal: 10 x knipperen met tussenpause.
Nog langer: 9 x knipperen met tussenpause.
enz...
Bijna 2 minuten: 1 x knipperen met 1 sec tussenpause.
Als je naast het aantal knipperpulsen ook de tussenpause stelselmatig langer maakt, krijg je een betere indicatie. Denk ik.
@kif om een grafiekje te kunnen maken moet je toch wel voldoende punten hebben die je experimenteel moet vaststellen. vermoedelijk heb je er dan al zoveel dat het het berikte effect er wel ongeveer is en het inzicht in het werkelijk onderling verband er niet zo heel veel meer toe doet.
@pros da's een goeie, dit ga ik proberen!! Ik zag de bui al een beetje hangen dat het symetrische knipperen op een heel lage en vervolgens op een nog lagere (etc)knipperfrequentie ook al niet zo geweldig toont.
kan je niet gewoon een poort aansturen die "toggled"?
signaal weg ==> start counter (die je op een variable COUNTER _TIJD opslaagt)
als counter een bepaalde waarde heeft bereikt ==> gaat die een andere waarde selecteren voor te wachten om de poort te toggelen...
(ik geef mij idee in bascomversie, ik ken de pic niet goed)
config portd.0 as input 'om het signaal te detecteren
dim COUNTER_TIJD as Byte 'wachttijd moet veranderen
dim LED as byte ' de led die moet gaan vertragen
do
IF portd.0 = 0 then
incr COUNTER_TIJD
select Case COUNTER_TIJD
case 1 : Wachttijd = 100
case 20 : Wachttijd = 200
case 40 : Wachttijd = 300
case 80 : Wachttijd = 900
end select
waitms Wachttijd
toggle LED
END IF
loop
probleem de led gaat wel vertragen mar wanneer je moet gaan uitvallen moet je berekenen met tijden en daar heb ik geen tijd voor 
Vuurkat
Een koude oorlog is een oorlog waar GEEN vuurwapens worden gebruikt, alleen kernwapens.
Op 13 november 2007 16:29:04 schreef pros:
Ipv. domweg te knipperen, kan je ook het volgende doen:
<knipperdeknip>
, krijg je een betere indicatie. Denk ik.
Ja, of knipper in morse hoe lang het signaal al weg is. 
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
ik denk dat die knipperdeknip een uitermate korte samenvatting van de (1e) oplossing van pros is... 
De oplossing van dizze komt een beetje neer met wat ik bedoel met 'de trapjes'. De normale processing van de PIC moet overigens gewoon doorlopen dus ik kan niet werken met delays etc.
Voor de oplossing van Pros zal ik dan iets doen in de trend van:
1. mbv interrupts\timers een soort 'kloksignaal' voor de knipperfrequentie genereren icm een klokpulscounter.
indien 'ingangssignaal' beschikbaar kloksignaal= '1'
2. indien geen 'ingangssignaal' beschikbaar
in een herhalende cycles met een teller na 'x' pulsen van dit kloksignaal (mbv de clockpulsecounter) een led-disable signaal op '1' houden gedurende 'y' klokpulsen.
3. indien geen 'ingangssignaal' beschikbaar
periodiek 'x' verlagen en 'y' wat verlengen (dit kan dan gewoon met een vaste interval)
a. zodra signaalwegvalt: start een timer en initieer timers\counters
b. bij timeout van deze timer stoppen met de handel
het aan\uit zetten van de led wordt dan
ledOn= (clock_high & signal_available & !led_disable);
[edit]
aldus wat c-routines gemaakt en in de simulator lijkt het perfect te werken zo!
bedankt
Op 14 november 2007 10:44:39 schreef frrrrrd:
... De normale processing van de PIC moet overigens gewoon doorlopen dus ik kan niet werken met delays etc. ...
misschien de WatchDog Timer eens bestuderen. ik weet alleen niet hoe die werkt in proton.
zoals de WatchDog timer werkt zou jou algoritme ook kunnen werken.
grt piet
bedankt voor je reactie. ik werk niet met proton maar met boostc. heb eea gecodeerd en het werkt uitstekend op die manier.