Op 30 december 2005 19:29:23 schreef Stynus:
Zal men code is op mijn ftp zetten want dit topic begint te lang te worden zo.
Zal is zoeken dan om het te maken dat als er in de cyclus na een bediende knop de knoppen niet meer gechect worden.
ah ok, dit is dus de hele code...
Ik zou zeggen, verhoog PWM_cycles (of je DelayUS) tot een dusdanige waarde dat het aanpassen van de duty-cycles maar een paar keer per seconde gebeurd
Ik weet niet hoe je tv intern je PWM-signaal afhandeld, maar je hebt momenteel (als we even aannemen dat de code zelf 0 tijd kost, in onrealistisch maar ik kan niet echt inschatten hoeveel het wel kost, en ik ken je kloksnelheid niet), dus bij een delay van 5 miljoenste seconde een PWM frequentie van 200 kilohertz. Als je de delay verhoogd wordt je frequentie lager en worden dus je kabels / routing wat minder kritisch, maar ik heb dus geen idee wat je TV verwacht...
Let wel dat je PWM redelijk onnauwkeurig is nu, omdat je zo'n korte delay hebt. Met een 4 MHz klok en (bij PIC) dus 1 MIPS, kost iedere itteratie door je X-loop tussen de 4 (alle if-jes false) en de 8 (alle ifjes true) instructies (denk dat dit redelijk 1-op-1 naar ASM te zetten is), dat wil dus zeggen bijna net zo lang als je wait tot bijna 2x je wait.
Je random instructie-tijd is dus buitenproportioneel ten opzichte van je wachttijd -> je denkt een pwm van 50% te sturen maar stiekum is het de helft van de tijd maar 25% zeg maar.
Ik zou dus of een krankzinnig hoge klok voor zoiets uber-simpels nemen (denk aan 16 of 20 MHz) als je TV zo'n hoge PWM-frequentie nodig heeft, of een delay van 50 ipv 5. Dan kosten je instructies nog 10 versus 20% van je wachttijd, maar iig geen 90% tot 180% meer
Je PWM-frequentie wordt dan als we 1 MIPS als uitgangspunt nemen (4 MHz, 1us per instructie), middelen op 6 instructies per itteratie, 2 voor de loop, 4 voor het high-zetten, 50us wachten, 24 stapjes in de duty-cycle, 24 * 50 + 24 * 6 + 24 * 2 + 4 = 24 * 58 + 2 = 1394 instructies per cycle = 717 Hz PWM-frequentie, waardoor je dus (even zonder de ds-aanpassing) 717x Y doorloopt per seconde.
Als je nu 5 seconden wilt doen over het van 0 naar 100 gaan in je aanpassingen moet je dus 5/24 * 171 = PWM_cycles op 149,4 zetten. Die berekening klopt wel niet helemaal want ik vergeet nu de tijd die het loopen van Y kost, maar je snapt het idee
Let wel, voorbeeldjes met 4MHz klok (ik meen dat een PIC 4 cycles nodig heeft per instructie), 50 us delay en wat flinke aannames mbt de assembler die eruit komt rollen