Omdat een software 10 bits PWM nogal wat instruktie tijd vergt van een PIC, vraag ik mij af of er geen (kleine) PIC bestaat met een 10 bits hardware PWM.
Wat is voor u een kleine PIC? (klink die vraag nu zo... of ligt het aan mij?)
Parametric search engine:
http://www.microchip.com/ParamChartSearch/params.aspx?branchID=1002&mi…
Redelijk ver naar onderen in de lijst kan je zoeken op 10-bit PWM (PWM resolutions bits)
5 minutjes rondkijken op de microchip website en ik ben al geklopt 
[Bericht gewijzigd door paxmowa op (11%)]
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
\begin{SlechtKarakter}
Er bestaan wel AVR's met een 10- of zelfs 16-bits PWM. 
\end{SlechtKarakter}
Wat me zomaar te binnen schiet: je kan een PWM-uitgang gebruiken om simpelweg een LED in- en uit te schakelen. Maar je kan ook het PWM-signaal omzetten naar een DC-spanning met behulp van een laagdoorgangs-filter, en daarmee een stroombron aansturen.
Als je nou twee PWM-uitgangen gebruikt, kan je de ene een stroombron laten sturen, en met de andere die stroombron in- en uitschakelen.
Of je combineerd twee PWM-uitgangen met een AND-poort. Daarbij schakelt de ene PWM-uitgang op bv. 200Hz, en de andere op 2kHz. De tweede vormt dan een fijnregeling op de eerste.
Het zal wel wat experimenteerwerk vragen, maar het lijkt me de moeite van het proberen waard.
Op 1 december 2009 21:56:39 schreef m00:
Volgens mij is 10 bits standaard.
Yep, bijna alle PICs met een hardware PWM module hebben een 10bits PWM module. Een 8bit variant ben ik nog nooit tegengekomen (misschien in de oude "C" types)
Op 1 december 2009 22:02:50 schreef pros:
\begin{SlechtKarakter}
Er bestaan wel AVR's met een 10- of zelfs 16-bits PWM.
\end{SlechtKarakter}Wat me zomaar te binnen schiet: je kan een PWM-uitgang gebruiken om simpelweg een LED in- en uit te schakelen. Maar je kan ook het PWM-signaal omzetten naar een DC-spanning met behulp van een laagdoorgangs-filter, en daarmee een stroombron aansturen.
Als je nou twee PWM-uitgangen gebruikt, kan je de ene een stroombron laten sturen, en met de andere die stroombron in- en uitschakelen.
Of je combineerd twee PWM-uitgangen met een AND-poort. Daarbij schakelt de ene PWM-uitgang op bv. 200Hz, en de andere op 2kHz. De tweede vormt dan een fijnregeling op de eerste.Het zal wel wat experimenteerwerk vragen, maar het lijkt me de moeite van het proberen waard.
we kunnen allebij ergens gigantisch overheenkijken maar ik heb zoiets soortgelijks proberen te maken. Om een of andere reden kreeg ik dat nooit goed. los van elkaar werkt het goed echter als het wordt samen gevoegd krijg ik last van een random pieken.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Van een 8 bit timer/counter kun je gemakkelijk een 10 bit PWM signaal maken, door simpelweg de overflow interrupt te gebruiken om de juiste compare waarde te laden. Als de PWM waarde bijvoorbeeld 600 is, laad je eerst 2 keer 255 in het output compare register, en de derde keer 600 - 512 = 88. Waarschijnlijk moet je de eerste 2 keer de compare match output toggle uitzetten, om te voorkomen dat je een match krijgt op 255. Dit zou alleen nog wat problemen geven met waarden die net voorbij een veelvoud van 256 liggen, maar daarvoor zou je er ook voor kunnen kiezen om de eerste 2 keer het output compare op bijvoorbeeld 128 te zetten, en in die interrupt routine de nieuwe waarde te laden.
Maar dat had je natuurlijk ook zelf kunnen bedenken.
@pros: dat lijkt me eigenlijk alleen interessant als je de stroombron sneller in- en uit wilt schakelen dat het laagdoorlaatfilter toe zou laten, anders zou je natuurlijk ook gewoon de PWM ingang naar 0% kunnen trekken. In het tweede geval, met de 2 PWM regelingen aan een AND poort, vraag ik me af waar je 2 PWM kanalen voor nodig hebt. Een 2kHz PWM kanaal heeft altijd een veel kleinere resolutie van een 200Hz PWM kanaal, mits je dezelfde clock gebruikt. Bij een 200Hz PWM kanaal zul je een veel trager filter moeten gebruiken om het de ruis fatsoenlijk te onderdrukken. In geen geval denk ik dat je er voordeel van hebt om 2 PWM kanalen te combineren.
[Bericht gewijzigd door SparkyGSX op (31%)]
Wat is voor u een kleine PIC?
Een PIC met max. 14 pennen.
Yep, bijna alle PICs met een hardware PWM module hebben een 10bits PWM module
Dan ga ik eens zoeken hoe ik deze met 10bits aan kan sturen in MikroC.
Nu werkt het alleen met een 8 bits getal.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Op 2 december 2009 07:02:57 schreef MMSoft:
[...]Een PIC met max. 14 pennen.[...]Dan ga ik eens zoeken hoe ik deze met 10bits aan kan sturen in MikroC.
Nu werkt het alleen met een 8 bits getal.
Overigens zou je natuurlijk ook kunnen ditheren om die extra 2 bitjes resolutie te krijgen, met als bijkomend voordeel dat de PWM frequentie hoger is, zodat je een minder stijl reconstructiefilter nodig hebt, als dat van toepassing is.
Op 2 december 2009 07:02:57 schreef MMSoft:
[...]Dan ga ik eens zoeken hoe ik deze met 10bits aan kan sturen in MikroC.
Nu werkt het alleen met een 8 bits getal.
Gewoon zelf een simpele functie schrijven die dat doet.
Ditheren, software oplossingen: allemaal niet nodig want een PIC kan het in hardware. De hoogste 8bit stop je in PR2, de laagste 2bit in CCP1CON.
De maximale frequentie van je PWM signaal is 20 kHz bij 10bit, 80kHz bij 8 bit.
Ik ben bezig om dit voor elkaar te krijgen in mikroC, maar het wil nog niet echt.
//Dit werkt niet goed, de LED gaat met grove stappen aan
CCP1CON.F4 = Counter.F0;
CCP1CON.F5 = Counter.F1;
PR2 = Counter >> 2;
//Dit werk redelijk, de LED gaat met kleine stappen aan, maar het verschil is gelijk aan de 8 bits regeling.
CCP1CON.F4 = Counter.F0;
CCP1CON.F5 = Counter.F1;
PWM1_Set_Duty( Counter >> 2 );Het is gelukt !
De hoogste 8 bits moeten naar register CCPR1L, en de laagste 2 bits naar de bits 4 en 5 van register CCP1CON.
Iedereen bedankt