Timer - Interruptafhandeling

Postby velswijk » Mon Feb 25, 2008 12:00 am

Arjen H.Op zich geen specifieke reden, behalve dan dat een RB2 een eigen vlag heeft en RB7:RB4 een gezamelijke. Bij de laatste moet je dus nog weer testen welke van de 4 het is geweest. RB2 werkt ook op flanken, waarbij je ook kan aangeven rising of falling edge (in mijn geval wenselijk).


Hmm... Klinkt niet overtuigend: voorzover ik de probleembeschrijving volg gaat het maar om 1 signaal; als je dit aansluit op RB4 en RB7:5 afsluit of op output zet is de situatie qua interrupt-afhandeling niet anders dan hij nu is, terwijl je de edge-flip niet hoeft te regelen.
En ik ken geen digitaal signaal waar een opgaande flank niet altijd gevolgd wordt door een neergaande, dus het zelf kunnen kiezen van de edge heeft m.i. geen toegevoegde waarde.


Mijn originele code heb ik weer terug geplaatst en kom tot de conclusie dat in de functie ProcessIO( ) een call (of beide in mijn geval) naar OpenADC( ) roet in het eten gooit. Als ik de OpenADC( )'s uit commentarieer, dan heb ik geen storing op de RB2 interrupt.
Iemand hier een idee over?


Niet direct; maar INT2 komt voor in registers die ook door anderen gebruikt worden, terwijl dat voor de KBI (change-detect) niet zozeer geldt. Waarom voldoet de oplossing van pjongen niet zonder meer?
velswijk
 
Posts: 16
Joined: Thu Jan 02, 2014 3:42 pm

Postby arjen h. » Mon Feb 25, 2008 12:00 am

Overtuigend of niet, het zou volgens mij (ook) gewoon met een RB2 interrupt moeten kunnen werken...

In de probleemomschrijving heb ik het over 1 signaal aangezien ik het probleem gereduceerd heb tot dit ene signaal.

Dat ik geinteresseerd ben in de edge is omdat ik naast het toerental meten ook een 2-tal ventielen wil gaan schakelen, de ene op de opgaande flank en de andere op de neergaande (dit mag niet toevallig andersom). De edgeflip regelen gaat overigens vrij eenvoudig in de interrupt routine:
 
INTCON2bits.INTEDG2 = !INTCON2bits.INTEDG2;


Dat het (ook) met RB4-7 kan ben ik het mee eens. Nadeel van RB4-7 is wel dat je na de interrupt moet testen welke het is geweest (inderdaad niet als je er maar 1 aansluit, maar dit is zonde van de andere 3 poorten). Vervolgens moet je (ik) nog weer testen op het signaal (!) of het een opgaande- of neergaande flank is geweest. Stel dat je dender hebt (mechanische schakelaar), dan kan je hiermee de mist in gaan.

velswijkNiet direct; maar INT2 komt voor in registers die ook door anderen gebruikt worden, terwijl dat voor de KBI (change-detect) niet zozeer geldt
Dit heeft mij wel even aan het denken gezet (dank hiervoor). Losstaand of dit mijn probleem is weet je (ik) niet helemaal zeker wat er in een standaard functie (OpenADC( )) gebeurt. Ik zou nog eens kunnen proberen handmatig de bits in het ADCON1 register te kunnen zetten.

velswijkWaarom voldoet de oplossing van pjongen niet zonder meer?
Bedoel je hiermee de post van 18-02-2008 21:11? Deze werkt, maar wel met storing als ik de OpenAdc( ) in ProcessIO( ) gebruik.
Ik heb via de mail ook met Peter contact betreffende mijn probleem. Hij heeft mij een paar suggesties aangedragen die ik aan het uitproberen ben. Eén daarvan is een andere (tijd-) meetmethode. Dit werkt volgens mij al een stuk beter, maar helemaal goed (perfect) is het nog niet. Het resultaat is nog te instabiel. En hiervan geef ik denk ik mijn (eenvoudige) blokgeneratortje de schuld. Ik moet even zien dat ik van het werk een functiegenerator mee kan nemen om in ieder geval zeker te weten dat mijn ingangssignaal stabiel is.


Als ik bovenstaande doorlees dan zou ik kunnen denken dat het overkomt als 'ik weet het beter'. Doch dit zijn slechts mijn ideeën die ik graag wil ventileren. Reacties die ik krijg zetten mij aan het denken opdat ik een goed systeem kan ontwikkelen. En dat is wat ik graag wil. I'm still learning!
Het Elektor forum is voor de lezers; voor een vraag aan de redactie kun je het beste Elektor een email sturen.
arjen h.
Moderator
 
Posts: 1289
Joined: Thu Jan 02, 2014 10:40 am

Postby velswijk » Tue Feb 26, 2008 12:00 am

Arjen H.Als ik bovenstaande doorlees dan zou ik kunnen denken dat het overkomt als 'ik weet het beter'. Doch dit zijn slechts mijn ideeën die ik graag wil ventileren. Reacties die ik krijg zetten mij aan het denken opdat ik een goed systeem kan ontwikkelen. En dat is wat ik graag wil. I'm still learning!


Iedereen heeft recht op zijn eigen mening en moet met een suggestie doen wat hemzelf goeddunkt - ik heb het vaak genoeg zelf meegemaakt .

Overigens, de code van OpenADC() is te vinden in MCC18\src\pmc_common\ADC\adcopen.c, dus je zou zelf moeten kunnen uitvinden hoe het een conflict kan veroorzaken.

Succes,
PvE
velswijk
 
Posts: 16
Joined: Thu Jan 02, 2014 3:42 pm

Postby arjen h. » Tue Feb 26, 2008 12:00 am

velswijkOverigens, de code van OpenADC() is te vinden in MCC18\src\pmc_common\ADC\adcopen.c
Bedankt voor de TIP, dit ga ik eens bekijken.
Het Elektor forum is voor de lezers; voor een vraag aan de redactie kun je het beste Elektor een email sturen.
arjen h.
Moderator
 
Posts: 1289
Joined: Thu Jan 02, 2014 10:40 am

Previous

Return to 2007-11 USB data-acquisitiekaart

Who is online

Users browsing this forum: No registered users and 1 guest