Hallo,
Ik heb een pic 16f627 en ik wil hiermee graag een led dimmem op poort b.1
Ik heb al gezien dat dit met pwm moet, maar ik snap er weinig van.
Bas
Sorry, mar ik snap er niks van
Kan iemand een scripje posten van simpel een ledje op port b.1 te laten dimmen van 100 naar 0%?
Bas
plantrekker
True story bro!
Neen, want dan gaat het weer dezelfde toer op als je andere topic:
Jij doet copie-paste, zonder te weten wat je doet, het werkt niet, dan sta je hier weer met "het werkt niet, hoe komt het?"
Als JIJ nu gewoon eens zou luisteren en VOLLEDIG www.picbasic.nl zou LEZEN, zou je misschien een stuk verder komen.
Met "sorry, ik snap het niet..." geraak je nergens, zorg dat je het snapt, we geven je de beste links maar je doet er niets mee.
uhm, even voor de duidelijkheid, ik heb dat allang helemaal doorgelezen... Als je nu eens alleen dingen vertelt waarvan je weet dat het een feit is...
PWMen is niets meer dan heel snel laten knipperen.
Als jij de code post voor een ledje laten knipperen op bijv 1Hz kunnen wij je daarna helpen met PWMen.
plantrekker
True story bro!
Als je dit echt gelezen hebt (ik geloof er niets van) en er niet uit komt hoe je een simpele led kan dimmen, dan is het hopeloos.
Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
opnieuw:
Toggle PORTB.1
DelayMS 500
GoTo opnieuw
weet niet wat 100 hz is???
Bas
eagle987
Eerst waren het atomen, dan waren het protonen, neutronen, elektronen, nog later waren het quarks en nu blijken het snaren te zijn...
nu zal je led op halve sterkte branden, je duty cycle verandert immers niet
de duty cycle is de verhouding tussen de tijd dat je puls hoog is en de periodetijd en wordt weergegeven in %
In jouw geval is de puls 500ms hoog en is de periodetijd 1000ms, dus geeft de formule ons 1000/500=0,5 = 50%
je hebt dus een duty cycle van 50%, om dit te veranderen moet je ofwel de tijd dat de puls laag is veranderen ofwel de tijd dat de puls hoog is veranderen
raadpleeg verder ook eens wikipedia, daar leggen ze alles mooi uit 
kijk, daar heb ik wat aan, dus hoe zou de code worden als hij van 100 naar 0% dimt? dan kan ik die eens bestuderen...
Bas
ik denk dat je voor een zuivere 0% de pwm aansturing moet uitschakelen. het hangt er een beetje vanaf of je controller eerst de uitgang actief maakt en daarna pas naar je controle register kijkt.
je moet een paar vragen stellen over je project:
* wat stuurt de dimled?
* wanneer?
* etc.
je zal op 1 of andere manier de dutycycle moeten instellen, en dit kan op verschillende manieren; iets uitlezen of via drukknoppulsen,of iets anders; zoals je zelf wilt eigenlijk
je wilt een code die uitgeschreven is maar je bent vaag over wat je wilt bereiken...
Je hebt nu loop(Toggle, delay) als je daar nu loop(on, delayon, off, delayoff) van maakt dan wordt het al duidelijker wat er gebeurd. Je hebt dan een on time bepaald door delayon en daarna een off time van delayoff.
Als je er nu voor zorgt dat delayon + delayoff altijd evenveel opleverd dan blijft de frequentie gelijk. Probeer nu eens ontime van 20ms en een offtime van 0ms dan blijft je led dus continu branden. De totale periode is nu 20ms + 0ms = 20ms. De frequentie is 1/periode is 50Hz en de dutycycle is 100%. Nu kun je een proberen de ontime 15ms te maken en de offtime 5ms de frequentie is hetzelfde gebleven maar de dutycycle is nu 75%.
Als je dit een beetje volgt dan kun je ook proberen om in een loop bijvoorbeeld telkens de ontime met 1ms te verlagen en de offtime met 1ms te verhogen.
Er zijn hier veel mensen die de code voor je op kunnen schrijven maar je moet er zelf ook wat voor willen doen anders leer je er maar weinig van.
plantrekker heeft wel een beetje gelijk, het complete voorbeeld staat op www.picbasic.nl maar hier heb je een code
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
;Variabele declareren
DIM Duty AS BYTE ;'Duty' is de variabele die de snelheid v.d. motor bepaalt
CLEAR ;Wis alle RAM geheugen
;Hoofdprogramma
WHILE 1 = 1 ;Oneindige lus
FOR Duty = 1 TO 255 ;Motor gaat steeds sneller draaien tot maximum (= 255)
PWM PORTA.6, Duty, 5 ;Stuur 5 pulsen met pulsbreedte 'Duty', naar PORTA.6
NEXT
FOR Duty = 254 TO 0 STEP -1 ;Motor gaat steeds langzamer draaien tot 0
PWM PORTA.6, Duty, 5 ;Stuur 5 pulsen met pulsbreedte 'Duty', naar PORTA.6
NEXT
WEND ;Terug naar WHILE
END
dit is een code rechtstreeks van picbasic gekopierd ,wel voor een motortje maar een ledje erop zal ook wel op werken
Gerbuik je instructie PWm of nog liever HPWM, iedere keer in lus het ledje toggele is vragen op problemen
Hardware PWM of PWM genereren in interrupt is natuurlijk veel beter. Maar als je begrijpt hoe je het met een paar delays werkt dan word het al een stuk makkelijker om zelf code te schrijven voor de interrupt. Een instructie gebruiken zoals ik die in de picbasic code zie leer je helemaal niets van, maar goed als het alleen om het resultaat gaat dan moet je natuurlijk gewoon die instructie gebruiken.
Op 3 september 2009 19:49:48 schreef RvdW:
Een instructie gebruiken zoals ik die in de picbasic code zie leer je helemaal niets van, maar goed als het alleen om het resultaat gaat dan moet je natuurlijk gewoon die instructie gebruiken.
Waarom leer je daar niks van? op de site van frits staat heel uitgebreid wat PWM is en ook wat de instructie's PWM en HPWM doen dus het lijkt me zeer sterk dat je daar niks van leert maarja dat is mijn mening hahah
Op 3 september 2009 19:49:48 schreef RvdW:
Hardware PWM of PWM genereren in interrupt is natuurlijk veel beter. Maar als je begrijpt hoe je het met een paar delays werkt dan word het al een stuk makkelijker om zelf code te schrijven voor de interrupt. Een instructie gebruiken zoals ik die in de picbasic code zie leer je helemaal niets van, maar goed als het alleen om het resultaat gaat dan moet je natuurlijk gewoon die instructie gebruiken.
Mensen om kant en klare code op CO vragen leer je nog veel minder van.
hadv
Just find out what you like and let it kill you
Toch wel af en toe. Ik ben een tijd bezig geweest met USB op een PIC, o.a. met de spullen van MicroChip. Maar het wou niet echt lukken, de concepten snap ik wel, maar de implementatie niet.
Kreeg ik, via dit prachtige forum, uitgewerkte voorbeelden. De implementatie snap ik nog steeds niet helemaal (maar is ook dermate omvangrijk dat ik daar ook niet meer aan ga beginnen), maar door middel van de voorbeelden kon ik wel mijn eigen functionaliteit toevoegen.
En verder, als een voorbeeld goed is gedocumenteerd kun je daar best het nodige van leren. Ik ga er wel van uit dat je het dan ook wilt leren.
Dat is zeker waar, maar een voorbeeld gebruiken of toepassen in je eigen project is wat anders dan je wensen kenbaar maken en om code vragen, zoals de TS in dit topic doet.
Bij een voorbeeld gebruiken verricht je toch nog veel meer denkwerk en vooral onderzoek, en daardoor leer je sneller.
Hopelijk ziet de TS ook dat het nog maar een heel kleine stap is van zijn eigen code naar de simpelste vorm van PWMen. RvdW legt het goed uit.
idd.. en geen verwijt hier naar andere forum gebruikers maar ik dacht dat het de bedoeling was om samen een denktank te vormen en elkaar vooruit te helpen. door simpel de code te posten leert men niets maar wel met stapsgewijs de vragensteller verder te helpen. logische vragen oproepen en daarop inpikken