PIC: Welke timer gebruikt PWM

Welke timer gebruikt PWM ? is dat timer0 ?

bron: Pic basic projecten.

De PWM frequentie is bij de instructie PWM dus niet apart in te stellen.
Kristal: PWM frequentie:
4MHz 200Hz
10MHz 500Hz
20MHz 1000Hz

PWM
Softwarematige Pulse Width Modulation

De syntaxis:
PWM Pin, Duty, Cycles
PWM schakelt de opgegeven poort Pin automatisch om als uitgang, voert een opgegeven aantal Cycles pulsen uit van een opgegeven Duty lengte en schakelt de poort Pin daarna om als ingang (= hoog-ohmig).

Pin - Is een Poort . Pin constante waarop het PWM signaal komt.
Na uitvoering van de PWM instructie blijft de pin als ingang achter(!)
Duty - Is een 8-bit (0 ... 255) waarde die de verhouding van het hoog/laag niveau van de puls aangeeft.
Dit wordt de puls-pauze verhouding genoemd.
Dit hoeft geen vast getal (constante) te zijn, maar mag ook de waarde van een variabele of een berekening zijn (zie zodadelijk voorbeelden).
Cycles - Is een 16-bit (0 ... 65535) waarde die het aantal pulsen aangeeft.
Dit hoeft geen vast getal (constante) te zijn, maar mag ook de waarde van een variabele of een berekening zijn.
De cyclus tijd is afhankelijk van de oscillator frequentie.
Als een 4MHz kristal wordt gebruikt dan duurt 1 volledige cyclus 5 milliseconden, bij een 10MHz kristal 2 mSec en bij een 20MHz kristal duurt dat 1 mSec.
Aangezien de voorbeelden in de cursus met de inwendige oscillator werken en de oscillator van een PIC16F628A 4MHz is, duurt een cycle in de voorbeelden dus ook 5 mSec (zie tekening).

Guus@Sint-Michielsgestel
Arco

Special Member

Welke timer gebruikt PWM ? is dat timer0 ?

Staat toch duidelijk in de datasheet?

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

Special Member

Op 2 augustus 2023 13:23:46 schreef Arco:
Staat toch duidelijk in de datasheet?

Is dat niet voor HPWM / CCP1 of CCP2?

Als je haar maar goed zit, GROETEN LAMBIEK.
Arco

Special Member

Ja,

Dat gebruik je normaal toch ook altijd indien mogelijk?
(waarom met software pwm knoeien als er een PWM peripheral on-board is?)

[Bericht gewijzigd door Arco op woensdag 2 augustus 2023 16:36:50 (37%)

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

Special Member

Op 2 augustus 2023 16:35:21 schreef Arco:
Dat gebruik je normaal toch ook altijd indien mogelijk?

Zeker wel, dat draait tenminste op de achtergrond.

(waarom met software pwm knoeien als er een PWM peripheral on-board is?)

Ja, precies.

Maar ik kom nog wel eens HPWM poorten te kort en dan wordt het zoeken naar een geschikte pic met meer HPWM, niet altijd even makkelijk om een goede te vinden.

Hoe kom jij aan types met meer HPWM poorten?

Als je haar maar goed zit, GROETEN LAMBIEK.

De TS vroeg naar software PWM, maar dat is inderdaad zelden de beste oplossing.

Ik heb even een datasheet van een PIC24F opgezocht, die hebben 9 PWM uitgangen, een DSPIC heeft er een stuk of 8, maar als je naar andere controllers gaat (STM32F3/4 bijvoorbeeld) kun je er nog veel meer hebben.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
benleentje

Golden Member

Op 2 augustus 2023 18:10:14 schreef SparkyGSX:
De TS vroeg naar software PWM,

TS vraagt enkel naar welke timer er gebruikt word en post vervolgens heel veel info. Hij verwijst naar de PWM instructie van basic maar volgens mij heb je ook een HPWM instructie.
Ik heb dus geen idee wat TS nu precies bedoelt. Of dat hij bewust de PWM functie bedoelt of niet ervan bewust is dat er ook een HPWM functie is

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.
Arco

Special Member

De PIC24FJ256GA110 bijvoorbeeld heeft 9 hardware PWM's, maar die kun je realtime remappen naar 80+ i/o pinnen. (dus verplaatsen)
Je kunt totaal maar 9 pwm's tegelijk gebruiken, maar wel (bijna) op elke gewenste pin...

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

In Picbasic projecten wordt gewerkt met de 16F628A of de 12F629 of 675.
Dus heel oud.
Ik wil de 12F675 gebruiken met Timer1, en twijfelde of timer0 gebruikt wordt.
Het meest verwarrende is

4MHz 200Hz
10MHz 500Hz
20MHz 1000Hz

terwijl de delers binair werken.

Guus@Sint-Michielsgestel
benleentje

Golden Member

Hoe kom jij aan types met meer HPWM poorten?

https://www.microchip.com/maps/microcontroller.aspx

The AVR64EA48/32/28
Max PWM Outputs (including complementary) = 48

Als ik zoek op "Number of PWM Time Bases" zie ik dat het maximum 24 is.

@lambiek je het toch extender IC's voor als je meer PWM kanalen wilt?

Het meest verwarrende is

Nee dat is gewoon helder. Er staat verder ook dat de PWM niet instelbaar is. Dus als je een PIC hebt die op 4Mhz loopt dan is PWM altijd 200Hz.

terwijl de delers binair werken.

De PWM die hier bedoelt word is puur software matig en heeft niets met een timer of delers te maken. Het is gewoon hoe snel dat in software kan.

Volgens mij is er ook een HPWM functie.
Op onderstaande link zie je links bovenaan PWM en op de regel eronder HPWM staan. Door op HPWM te clicken krijg je informatie over de functie HPWM van picbasic.
https://www.picbasic.nl/frameload.htm?https://www.picbasic.nl/beginner…

[Bericht gewijzigd door benleentje op woensdag 2 augustus 2023 20:41:07 (14%)

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

Welke timer gebruikt PWM ? is dat timer0 ?

Enkel HPWM gebruikt een timer. PWM is softwarematig en gebruikt helemaal geen timer.
Voor de 12F675 wordt het dus enkel PWM omdat deze geen CCP module aan boord heeft

De PWM frequentie is bij de instructie PWM dus niet apart in te stellen.

Dat vindt zijn oorzaak bij de (Proton)Positron Compiler.
Effe Lester mailen ...

Arco

Special Member

Kant en klare libraries zijn toch meestal een drama, omdat je niet weet wat erin gebeurt (bijna altijd een 'black box' zonder sourcecode.)
Voor meeste zaken zoals pwm heb je die ook niet nodig, is vrij simpel...

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

Special Member

Als je haar maar goed zit, GROETEN LAMBIEK.
Arco

Special Member

Op 2 augustus 2023 22:52:53 schreef Lambiek:
[...]
Dat is wel makkelijk, die kon ik nog niet. :)

Die bestaat al heel lang; prettig ermee werken vind ik het niet. (traag en omslachtig)

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

Golden Member

Op 2 augustus 2023 22:52:53 schreef Lambiek:
[...]
Dat is wel makkelijk, die kon ik nog niet. :)

IK gebruik nooit een PIC, ik denk zoek het even op. Maar het viel me wel tegen.

Ik denk dat ik bij TME het makkelijker kan vinden dan via de eigen microchip website.
Net even een test gedaan en op de TME website kan je ook het aantal PWM kanalen zien en filteren.
Deze zijn bv allemaal met 14 pwm kanalen.
https://www.tme.eu/nl/katalog/halfgeleiders_112140/?params=2:632;367:1…

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

Dus PWM op een PIC12F675 interfereert met de normale software, zodat het gedrag niet te voorspellen is !

Guus@Sint-Michielsgestel
Lambiek

Special Member

Op 3 augustus 2023 18:33:18 schreef benleentje:
[...]IK gebruik nooit een PIC, ik denk zoek het even op. Maar het viel me wel tegen.

Het is wel even een werk om het in te vullen, keer even er voor gaan zitten. :)

Op 3 augustus 2023 19:25:03 schreef Waters:
Dus PWM op een PIC12F675 interfereert met de normale software, zodat het gedrag niet te voorspellen is !

Dat ligt eraan, als je een niet te groot programma hebt (zonder delays) kun je best nog wel wat doen met software matige pwm. Je kunt ook met een interrupt werken natuurlijk, maar als je CCP1 en CCP2 hebt (hpwm dus) dan kun je dat beter gebruiken, maar dat zit niet op de 12F675. De 12F683 heeft wel een hpwm poort en is compatibel qua pinnen met de 12F675.

Als je haar maar goed zit, GROETEN LAMBIEK.
Arco

Special Member

Het vreselijk irriterende aan MAPS is dat na iedere wijziging die je aanbrengt in de zoeklijst, je een halve minuut moet wachten.
Dan gaat de site (meestal zinloos en overbodig) uitvogelen welke types aan de ingestelde parameters voldoen en moet je dus wachten.

Als je 30 of meer dingen instelt is dat zeer irritant. (is trouwens bij veel sites het geval)
Zou een stuk vriendelijker zijn als je alle gewenste parameters in een keer zou kunnen instellen en er dan een knop 'Apply filters' zou zijn.

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

Daarom doe ik dat op de sites van verkopers zoals Mouser, daar kan dat wat jij wilt ;)

Ik heb het ook even geprobeerd op die link, maar het viel mij ook tegen ja.

@ Waters: PWM IS normale software. Het is geen totaal afwijkend iets in PIC-land. Hoe je de software inricht maakt uit of je er 'last' van hebt dat het software-PWM is of niet.

http://www.m-voorloop.nl --- Ik? Welnee! Ik zit nog lang niet achter de germaniums.

Het gedrag is prima te voorspellen; ik gebruik zelf geen PICbasic, want ik schrijf in C voor moderne microcontrollers (STM32, LPC/MPC, ESP32, etc.), maar ik verwacht dat die PWM functie gewoon blokkeert zolang hij bezig is; je software kan dus niets anders doen in de tussentijd, tenzij je interrupts gebruikt. Het nadeel van interrupts in die situatie is dat de software PWM niet meer klopt; alle tijd die gebruikt wordt voor het afhandelen van interrupts komt, onterecht, bij de software PWM periode.

De conclusie is dus vrij simpel: software PWM is in de meeste gevallen een slecht idee, tenzij je echt niets anders hoeft te doen, en maar voor korte tijd dat PWM signaal nodig hebt. Een voorbeeld daarvan is als je die PWM puls gebruikt om een servo aan te sturen, en dus niet voor een DC motor of iets dergelijks. Een stuursignaal voor een servo is ongeveer 1-2ms lang, en je hebt maar 1 puls nodig, daarna kun je weer iets anders gaan doen.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Lambiek

Special Member

Op 3 augustus 2023 23:01:49 schreef SparkyGSX:
Een stuursignaal voor een servo is ongeveer 1-2ms lang, en je hebt maar 1 puls nodig, daarna kun je weer iets anders gaan doen.

Is dat zo? Als de puls weg valt als je iets anders doet dan kun je de servo verdraaien, die blijft niet meer in positie. Of je moet zo snel iets doen, binnen die 20ms, (50Hz dus) dat het geen probleem is. Of zie ik iets over het hoofd?

Als je haar maar goed zit, GROETEN LAMBIEK.
benleentje

Golden Member

Dus PWM op een PIC12F675 interfereert met de normale software, zodat het gedrag niet te voorspellen is !

Het gedrag valt wel een beetje te voorspellen. Ook in basic software word elk regel die je in je programma typt regel voor regel afgewerkt. Ook de instructie PWM word zo uitgevoerd. Er ward exactg uitgevoerd zoals je het in programma hebt staan

pic basic code:


PWM Motor, Duty, Cycles

Als cycles de waarde 10 heeft dan worden er exact 10 PWm pulsen naarde motor gestuurd en daarna strop het aansturen. En dan bedoel ik dat ook letterlijk. Omdat de motor na 10 pulsen toch al enige snelheid heeft zal deze niet gelijk stil vallen dus als je dan wat drukknoppen inleest en dan weer

pic basic code:


PWM Motor, Duty, Cycles

Zal de motor weer verder gaan.

pic basic code:

WHILE 1 = 1                   ;Oneindige lus
  PWM Motor, Snelheid, 10     ;Stuur 10 pulsjes met de grootte van 'Snelheid' naar motor

  ;Als ToetsHoger wordt ingedrukt EN Snelheid is nog niet maximaal, dan snelheid verhogen
  IF ToetsHoger = LAAG AND Snelheid < 255 THEN INC Snelheid

  ;Als ToetsLager wordt ingedrukt EN Snelheid is nog niet minimaal, dan snelheid verlagen 
  IF ToetsLager = LAAG AND Snelheid > 0   THEN DEC Snelheid
  
WEND                          ;Terug naar WHILE

END 

Hier word in een eeuwig durende lus met while 1 = 1 er continu
PWM Motor, Snelheid, 10 naar de motor gestuurd. En ondertussen worden er drukknoppen uitgelezen.
Helaas merk je dat wel aan het stotteren van de motor.

Ik denk ook dat dit zo een beetje het maximum is wat je tijden het PWM kan doen eventueel nog een led aansturen maar meer ook niet.

Dus als je weet hoe zo een programma word uitgevoerd aardig goed voorspelbaar.
Hoe erg het stotteren van de motor zal zijn is wat moeilijker voorspelbaar. Als je bv een motor hebt die erg traag opgang komt maar daarna ook vrij traag is met afremmen als bv een motor die een zwaar vliegwiel aandrijft dan zal het nieteens opvallen maar bij een motor die heel snel reageert zal da meteen opvallen.

Dus PWM op een PIC12F675

Als je echt serieus met PWm wilt gaan werken en niet een simpel programma als hierboven dan zou ik gewoon afstappen van de PIC12F675 en er een andere voor nemen. Zoals bv een PIC16F628A

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.
Arco

Special Member

Of een moderne vervanger voor de 12F675, bijv. de 12F1571/1572.
Die kan veel meer (heeft o.a. 3 PWM peripherals) en is daarbij nog veel goedkoper ook...

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

Op 3 augustus 2023 23:27:05 schreef Lambiek:
[...]
Is dat zo? Als de puls weg valt als je iets anders doet dan kun je de servo verdraaien, die blijft niet meer in positie. Of je moet zo snel iets doen, binnen die 20ms, (50Hz dus) dat het geen probleem is. Of zie ik iets over het hoofd?

Nee je ziet niets over het hoofd, je moet die puls inderdaad steeds herhalen, maar dan heb je dus wel 20ms om iets anders te doen, dat is ongeveer 90% van de tijd, als je één servo aanstuurt. Je zou zelfs een stuk of 8 servo's kunnen aansturen, en dan nog steeds wat tijd overhebben voor ander rekenwerk.

Ik probeerde vooral een geldige toepassing van software-PWM te vinden, aangezien het ongeschikt is om een continue PWM signaal mee te genereren.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
benleentje

Golden Member

Ik probeerde vooral een geldige toepassing van software-PWM te vinden, aangezien het ongeschikt is om een continue PWM signaal mee te genereren.

Soms hoeft PWM ook niet continu te zijn en kan je bv het enkel val versnellen en vertragen gebruiken of in een heel simpel programma waarin je er meer weg komt, waarin bv steeds maar 1 motor tegelijk aan het werk is.

Geldig programma zou bv kunnen zijn 1x per minuut een of zeg na
PWM motor duty cyclce, waarin cycles 65535 is een LDR sensor uitlezen en daarmee een ledlamp aansturen.

Maar ik ben met je eens dat hoe simpel een programma is het stop start gedrag van PWM snel hinderlijk zal zijn zeker als het na PWM ook nogeens een berekening moet doen voor de volgende PWM waarde. Zoals je bv de waarde uit de ADC wilt gaan middelen en ongeldige uitlezingen eruit wilt filteren.

Of een moderne vervanger voor de 12F675, bijv. de 12F1571/1572.

Maar werken die ook in de gratis versie van picbasic en is er nog steeds picbasis?

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.