Microchip PPS peripheral

Hallo!

Ik ben momenteel bezig met een Microchip PIC16F18875 om 4 gelijkstroommotoren met PWM aan te sturen. Ik gebruik hierbij de PWM6 peripheral en stuur met 4 individuele uitgangen 4 individuele motoren aan. Iedere motor heeft dus ten alle tijden exact dezelfde aansturing. Welnu wil ik op een bepaald punt een aantal motoren uitschakelen.
Nu weet ik ook dat ik d.m.v. PPS (Perhiperal Pin Select) pinnen die onder dezelfde PWM perhiperal vallen aan of uit kan schakelen.

Echter heb ik nog nooit PPS (Of TRIS) gebruikt binnen Microchip. Kan iemand mij hierbij helpen? Wat de functionaliteit is snap ik denk ik, maar hoe ik het in de code toe kan passen begrijp ik nog niet. Ik zal ongetwijfeld direct naar registeres moeten schrijven, maar wat ik precies moet schrijven is dus nog onduidelijk.

Ik gebruik MPLAB met de MCC compiler.

EDIT: Extra info:
Het gaat om een ruitenwissersysteem met 4 ruitenwissers. Deze ruitenwissers worden ten alle tijden met het zelfde PWM signaal aangestuurd. In theorie zouden de wissers synchroon moeten lopen, maar dat doen ze helaas niet. Na verloop van tijd ontstaan er minimale verschillen tussen de locatie van iedere wisser op de ruit, omdat de ene wisser net wat sneller draait dan de andere.
De parkeerstand is een optische sensor. Maar omdat er kleine verschillen ontstaan kan het zijn dat wisser 1 de parkeerstand al bereikt heeft, en wisser 2 nog niet. Hier moet dan wisser 2 nog door draaien, terwijl wisser 1 al stopt met draaien.

Arco

Special Member

TRIS zul je toch wel eens gebruikt hebben, hoe stel je anders in of uitgang in?... ;)
Welke taal gebruik je, wat moet er gemapped worden in de PPS?

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
mel

Golden Member

Zucht... Waarom hebben we de oude vertrouwde 6502 niet meer.... ;)

u=ir betekent niet :U bent ingenieur..

Op 4 april 2022 22:50:56 schreef Arco:
TRIS zul je toch wel eens gebruikt hebben, hoe stel je anders in of uitgang in?... ;)
Welke taal gebruik je, wat moet er gemapped worden in de PPS?

Wie weet heb ik het wel eens gebruikt, maar de naam TRIS was in ieder geval nieuw voor mij :)
Ik gebruik MPLAB x (Microchip) met de MCC compiler

Wat wat ik wil doen is de PPS connectie naar een bepaalde pin tijdelijk ongedaan maken, om ervoor te zorgen dat deze pin laag wordt en de aangesloten motor niet draait.

In de pin_manager.c worden de PPS gekoppeld aan de perhiperal.

Arco

Special Member

Zucht... Waarom hebben we de oude vertrouwde 6502 niet meer.... ;)

Gelukkig niet... ;)
Ik zou de PPS niet meer willen missen, je kunt daarmee peripherals mappen naar een pin naar keuze: heel prettig voor een nette print layout...

Met de C compiler doe ik (gelukkig) niks... ;)

Maar het is in iedere taal hetzelfde. Met:

c code:


RA7PPS = 0x0E 
RA4PPS = 0x0E
RA5PPS = 0x0E
RA6PPS = 0x0E

wordt de output van PWM6 peripheral naar pinnen RA4,5,6, en 7 gemapped. (0x0E = PWM6OUT, zie datasheet)
Met 0x00 wordt de pin weer ge-unmapped:

c code:


RA7PPS = 0x00 
RA4PPS = 0x00
RA5PPS = 0x00
RA6PPS = 0x00
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Precies.
Maar, nu is mijn vraag: hoe kan ik in mijn main (of een of andere functie) een port tijdelijk loskoppelen van de PWM6? Is dat een kwestie van:

c code:

if(voorwaarde){
    RA7PPS = 0x00 //koppel de pin los van de PWM6
}
else{
    RA7PPS = 0x0E //Koppel de pin naar de PWM6
}

Maar dit zou betekenen dat ik de pin altijd weer handmatig moet koppelen aan PWM6, wat omslachtig lijkt.

[Bericht gewijzigd door Christiaan371 op dinsdag 5 april 2022 11:10:32 (15%)

Arco

Special Member

Dat kan, de pin wordt dan weer een 'gewone' output pin...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Dat voelt een beetje als de rommel manier (maar nogmaals, geen ervaring met pps :P)
Hoe zou jij het doen als ik vragen mag?

Ik zou de PWM instelling voor dat kanaal van de PWM6 module gewoon op nul zetten. En weer op de gewenste waarde als alle ruitenwissers "binnenzijn".

Je kan overwegen om de PWM waarde voor de volgend cyclus gewoon iets lager te zetten.

Op 5 april 2022 11:08:26 schreef Arco:
Dat kan, de pin wordt dan weer een 'gewone' output pin...

Dan moet je vantevoren wel even controleren dat die pin ook laag staat (of in ieder geval: "output niet actief"),

[Bericht gewijzigd door rew op dinsdag 5 april 2022 11:17:57 (36%)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

Als je meerdere pinnen aan dezelfde PWM wilt knopen, is dit de enige manier om er een uit te schakelen.
(het is ook een bijzondere situatie: normaal map je bijna nooit een peripheral naar meerdere pinnen...)

Ik zou wel na de un-map de pin zelf '0' maken om zeker te weten dat die laag is (RAx = 0)

@Rew: De PWM instelling kun je niet op '0' zetten: dan gaan alle pinnen uit i.p.v. maar eentje...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com