Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

PIC Programming: bron trigger bepalen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik moet voor een project een PIC 12F683 programmeren. Dit is mijn eerste project waar ik in aanraking kom met een PIC, dus het is allemaal nieuw voor me.

Omdat het project heel korte signalen te verwerken krijgt, wil ik met triggers gaan werken. Zo ben ik zeker dat geen enkel signaal voorbij gaat zonder dat de PIC er iets mee doet.

Nu is mijn probleem dat ik minstens 4 verschillende triggers nodig heb, die elk een andere programmacode moeten oproepen. Ik heb me al suf gelezen in de datasheet, maar daar vind ik geen manier om de triggers van elkaar te onderscheiden. (Ik vind enkel een flag voor GP2, dus GP2 kan ik van de andere GP's onderscheiden)

Ik veronderstel dat ik zeker niet de eerste ben die dit wil doen, dus hoop ik dat de elektro-tweaker me kan vooruit helpen.

EDIT: ik bedoel dus interrupts, geen triggers... My bad :/

[ Voor 3% gewijzigd door Verwijderd op 18-02-2009 17:34 ]


  • DaWaN
  • Registratie: Oktober 2002
  • Laatst online: 16:11

DaWaN

'r you wicked ??

Het is inderdaad niet mogelijk om voor elke aparte pin een andere interrupt routine te nemen, je moet het dus met dat ene interrupt afvangen :)
Wat ga je precies bouwen ?

If you do not change direction, you may end up where you are heading


Verwijderd

Topicstarter
DaWaN schreef op woensdag 18 februari 2009 @ 18:03:
Het is inderdaad niet mogelijk om voor elke aparte pin een andere interrupt routine te nemen, je moet het dus met dat ene interrupt afvangen :)
Wat ga je precies bouwen ?
Het is een signaalconditioneerder voor een incrementele encoder. Ik moet verplicht een PAL en MCU gebruiken. De PAL maakt twee nieuwe signalen, vertrekkende van de signalen uit de encoder, die aangeven in welke richting gedraaid wordt.

Ik wou een GP interrupt gebruiken om telkens te tellen als er een puls op één van de encodersignalen komt. Dan wou ik twee andere interrupts gebruiken om de richting te bepalen. Tenslotte wou ik een vierde interrupt gebruiken voor het 3e kanaal van de encoder (die aangeeft dat een volledige omwenteling gemaakt is).

Er zal niets anders op zitten dan back to the drawingboard en staren tot ik een manier vind om het zonder interrupts op te lossen.

  • Sphere-
  • Registratie: November 2003
  • Laatst online: 28-08 19:53
Als je maar een interrupt routine kan gebruiken voor meerdere externe interrupts, kan je in de interrupt routine zelf kijken welke pin(nen) verantwoordelijk zijn voor de interrupt. Mits de staat van de pin niet veranderd is tussen de interrupt request en het uitvoeren van de check in je routine.
Ik moet verplicht een PAL..
PAL's en GAL's zijn antiek.

[ Voor 12% gewijzigd door Sphere- op 18-02-2009 18:27 ]


Verwijderd

Topicstarter
Sphere- schreef op woensdag 18 februari 2009 @ 18:23:
Als je maar een interrupt routine kan gebruiken voor meerdere externe interrupts, kan je in de interrupt routine zelf kijken welke pin(nen) verantwoordelijk zijn voor de interrupt. Mits de staat van de pin niet veranderd is tussen de interrupt request en het uitvoeren van de check in je routine.


[...]


PAL's en GAL's zijn antiek.
Zo zal ik het moeten doen vrees ik. Kan iemand bevestigen GPIO Change Interrupts zowel voorkomen bij overgang hoog -> laag als laag -> hoog (beide tegelijk)?

  • Zjosh
  • Registratie: November 2004
  • Laatst online: 20-11 12:58
Verwijderd schreef op woensdag 18 februari 2009 @ 18:44:
[...]

Zo zal ik het moeten doen vrees ik. Kan iemand bevestigen GPIO Change Interrupts zowel voorkomen bij overgang hoog -> laag als laag -> hoog (beide tegelijk)?
Bij de meeste PIC's kan je dat instellen. Misschien moet je dat gedeelte uit de datasheet even goed door nemen. Daar staan af en toe ook wel wat asm code examples tussen.

  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 15:08
Aan welke snelheid komen de signalen uit de encoder? Veel kans dat die zo traag komen, dat je PIC een "eeuwigheid" moet wachten op een verandering, en je dus niet noodzakelijk interrupts moet gebruiken.

Je hebt een common interrupt-on-change, dus als een van de ingangspinnen (je kan het voor elke pin in of uitschakelen) verandert (hoog naar laag, en laag naar hoog zijn beide veranderingen), dan vlieg je naar de interrupt-routine. Als je in de interrupt wil weten welke pin de IOC heeft veroorzaakt, dan zal je dat zelf moeten checken.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


Verwijderd

Topicstarter
naftebakje schreef op woensdag 18 februari 2009 @ 20:53:
Aan welke snelheid komen de signalen uit de encoder? Veel kans dat die zo traag komen, dat je PIC een "eeuwigheid" moet wachten op een verandering, en je dus niet noodzakelijk interrupts moet gebruiken.

Je hebt een common interrupt-on-change, dus als een van de ingangspinnen (je kan het voor elke pin in of uitschakelen) verandert (hoog naar laag, en laag naar hoog zijn beide veranderingen), dan vlieg je naar de interrupt-routine. Als je in de interrupt wil weten welke pin de IOC heeft veroorzaakt, dan zal je dat zelf moeten checken.
De signalen uit de encoder zijn inderdaad "traag" (300khz max). Het probleem zijn de signalen uit de PAL, die hebben een lengte van één periode van het aandrijvende kristal. Ik wil graag PAL en PIC met hetzelfde kristal laten werken, dus één periode de tijd om het signaal te verwerken ( = 1 instructie in de MCU?). Dat leek me wat kort om zonder interrupt te doen.

Na wat zoeken heb ik een methode gevonden die volgens mij wel kan werken. Het komt er op neer om bij elke interrupt een momentopname te maken van alle pinnen en die weg te schrijven. Bij de volgende interrupt vergelijk je de huidige pinnen met de vorige opname, en zo vind je terug welke pin verandert is (via XOR, maar dat moet ik nog een checken wat dat net geeft). Ik denk dat ik zo een methode gevonden heb om meerdere interrupts goed te laten werken.

  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 15:08
^de methode van het vergelijken van de oude en nieuwe waarden is inderdaad wat ik hoopte dat je zou vinden/bedenken. Als je even de waarheidstabel bekijkt van een XOR bewerking heb je die stap ook meteen door.
PAL en PIC op hetzelfde kristal lijkt me niet te gaan lukken, een PIC voert elke instructie uit in 4 kloktikken dus dan zou je PAL 4 keer zo snel gaan als de PIC. Eventueel een kloksignaal voor de PAL aanmaken met de PWM module van de PIC.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • DaWaN
  • Registratie: Oktober 2002
  • Laatst online: 16:11

DaWaN

'r you wicked ??

naftebakje schreef op woensdag 18 februari 2009 @ 23:00:
^de methode van het vergelijken van de oude en nieuwe waarden is inderdaad wat ik hoopte dat je zou vinden/bedenken. Als je even de waarheidstabel bekijkt van een XOR bewerking heb je die stap ook meteen door.
PAL en PIC op hetzelfde kristal lijkt me niet te gaan lukken, een PIC voert elke instructie uit in 4 kloktikken dus dan zou je PAL 4 keer zo snel gaan als de PIC. Eventueel een kloksignaal voor de PAL aanmaken met de PWM module van de PIC.
Dan nog moet je goed oppassen, voordat hij aan z'n interrupt routine begint kost dat volgens mij ook weer 3 of 4 instructies oftwel 12-16 kloktikken...

If you do not change direction, you may end up where you are heading


Verwijderd

Topicstarter
DaWaN schreef op woensdag 18 februari 2009 @ 23:18:
[...]

Dan nog moet je goed oppassen, voordat hij aan z'n interrupt routine begint kost dat volgens mij ook weer 3 of 4 instructies oftwel 12-16 kloktikken...
Hier heb ik nu ook rekening mee proberen houden. Heb mijn eerste programma afgewerkt in Picbasic Pro. Binnen een weekje kan ik het uittesten op de PIC. Benieuwd hoeveel programmeerfouten ik gemaakt zal hebben.
Pagina: 1