Jag har en fråga angående PWM-modulen i PIC16f690. Koden längst ner generar en 5kHz signal.
Jag försöker ställa Duty Cycle till olika värden och detta fungerar om jag gör en evig loop och sätter godtyckligt värde (mellan 0-100) på CCPR1L. Men jag skulle vilja undvika den eviga loopen, och bara sätta CCPR1L= ett visst värde; överst i programmet. Men då får jag ingen signal på utgången (mäter med oscilloskop). Jag antar att jag inte ska behöva uppdatera CCPR1L hela tiden?
För att förtydliga så är den enda ändringen jag gör i programmet:
Det är ju så lite kod så gör samma sak i assembler så att du är
helt säker på vad koden gör. Generellt kan det vara bra att göra
små test-case i assembler när något uppför sig underligt, det
blir lite lättare att felsöka. Sedan, när man är helt säker på hur
det ska vara, kan man överföra det till valfritt annat språk.
Men för att svara på din fråga så, nej, man ska naturligstvis
inte behöva uppdattera PWM modulen hela tiden, den är
"set-n-forget". Du gör något fel, helt enkelt.
Skulle det kunna ha något med /* Init PWM for Single Output */ och // Single PWM mode; att göra??? Det låter som att den bara ska göra en puls och sedan stanna. (Alltså koden som står där, inte kommentarena i sig.)