|
Gepost op zondag 20 December 2009 15:51:38 |
 |
De PWM instructie blijft niet doordraaien in de achtergrond. Er zijn 3 dingen dat je kan doen:
-Hardware pwm gebruiken. Je hebt dan hier een pic nodig met 3 hardware pwm kanalen en die zijn er niet veel.
-Zelf een pwm lus schrijven. Hier staat een stukje voorbeeld code: http://www.schematheek.net/index.php?p=artikel/artikel&t=16
-Als het compleet onafhankelijk moet kan je dat vorige stukje in een interrupt routine steken die je met timer0 aanspreekt. |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op zondag 20 December 2009 17:32:51 |
 |
Kijk hier maar eens
http://www.schematheek.net/index.php?p=forum/topic&t=276 |
|
|
Gepost op zondag 20 December 2009 17:57:21 |
 |
Hoe kan het dat het met een 16f688 wel gaat? |
|
|
Gepost op zondag 20 December 2009 20:22:33 |
 |
dan moet ge u programma eens volledig posten en schema |
|
|
Gepost op zondag 20 December 2009 20:35:06 |
 |
Code |
Device 16F688
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF
ALL_DIGITAL=true
Symbol IRCF0 = OSCCON.4
Symbol IRCF1 = OSCCON.5
Symbol IRCF2 = OSCCON.6
IRCF0 = 1
IRCF1 = 1
IRCF2 = 1
XTAL 8
Dim rood As byte
Dim groen As byte
Dim blauw As byte
Dim kleur As float
Dim pastel As byte
dim waarde as word
Symbol roodled= PORTA.0
Symbol groenled= porta.1
Symbol blauwled= porta.2
ADCON0=%10001111
Declare ADIN_RES 10
Declare ADIN_TAD FRC
Declare ADIN_STIME 500
hoofdmenu:
waarde=ADIn 4
kleur = waarde / 4,8
Select Case kleur
Case <84
groen=kleur
rood=84-groen
blauw=0
Case 85 To 169
kleur=kleur-85
blauw=kleur
groen=84-blauw
rood=0
Case 170 To 255
kleur=kleur-170
rood=kleur
blauw=84-rood
groen=0
End Select
Pwm roodled,rood,1
Pwm groenled,groen,1
Pwm blauwled,blauw,1
GoTo hoofdmenu
|
Led's op A0, A1 ,A2 , potmeter loper op AN4 / 1 kant + andere kant - ( soort spanningsdeler )
Ik wil er een rotary encoder op omdat ik dan de kleur preciezer kan afstellen (kan meer als 270 graden draaien ) [Bericht gewijzigd door 19roland70 op Zondag 20 December 2009 20:45:36] |
|
|
Gepost op zondag 20 December 2009 21:34:34 |
 |
als ik het goed begrijp werkt deze kode
dan moet ge de kode van 628 nekeer posten
persoonlijk heb ik de pmw instructie nog nooit
gebruikt,gebruik altijd interrupt |
|
|
Gepost op zondag 20 December 2009 21:55:36 |
 |
Dit is ongeveer hetzelfde progje alleen met een rotary encoder
Dit werkt niet alle led's blijven aan .
Als ik alleen dit gebruik werkt 1 kanaal wel
PWM roodled,kleurrood,1
Code |
DEVICE 16F628A
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF,MCLRE_OFF
On_interrupt rotary
SYMBOL INTF = INTCON.1 ' RB0 External Interrupt Flag
SYMBOL INTE = INTCON.4 ' RB0 External Interrupt Enable
SYMBOL GIE = INTCON.7 ' Global Interrupt Enable
SYMBOL blauwled = PORTA.0
SYMBOL groenled = PORTA.1
SYMBOL roodled = PORTA.2
DIM rood AS BYTE
DIM groen AS BYTE
DIM blauw AS BYTE
DIM kleur AS BYTE
DIM kleurrood AS BYTE
DIM kleurgroen AS BYTE
DIM kleurblauw AS BYTE
DIM teller AS BYTE
DIM sterkte AS BYTE
ALL_DIGITAL true
DELAYMS 500
CLS
LOW roodled
LOW groenled
LOW blauwled
sterkte = 0 ;Voor eventuele dimfunctie
teller = 0
GOTO over_irq
rotary:
IF PORTB.0 = 1 THEN
IF PORTB.1 = 1 THEN
DEC teller
ELSE
INC teller
ENDIF
ENDIF
INTF=0
CONTEXT RESTORE
over_irq:
GIE=0
INTE=1
GIE=1
calckleur:
kleurrood = rood + sterkte
kleurgroen = groen + sterkte
kleurblauw = blauw + sterkte
RETURN
hoofdmenu:
kleur = teller
SELECT CASE kleur
CASE <84
groen=kleur
rood=84-groen
blauw=0
CASE 85 TO 169
kleur=kleur-85
blauw=kleur
groen=84-blauw
rood=0
CASE 170 TO 255
kleur=kleur-170
rood=kleur
blauw=84-rood
groen=0
END SELECT
GOSUB calckleur
PWM roodled,kleurrood,1
PWM groenled,kleurgroen,1
PWM blauwled,kleurblauw,1
GOTO hoofdmenu
END
|
[Bericht gewijzigd door 19roland70 op Zondag 20 December 2009 21:56:01] |
|
|
Gepost op zondag 20 December 2009 22:59:21 |
 |
met de regel GOTO over_irq
spring je naar hier
over_irq:
GIE=0
INTE=1
GIE=1
calckleur:
kleurrood = rood + sterkte
kleurgroen = groen + sterkte
kleurblauw = blauw + sterkte
RETURN
**********hier staat return zonder gosub en de pic
hangt waarschijnlijk vast
|
|
|
Gepost op zondag 20 December 2009 23:07:51 |
 |
Als ik het programma uitkleed :
Code |
DEVICE 16F628A
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF
SYMBOL blauwled = PORTA.0
SYMBOL groenled = PORTA.1
SYMBOL roodled = PORTA.2
DIM teller AS BYTE
LOW roodled
LOW groenled
LOW blauwled
main:
WHILE 1 =1
FOR teller = 1 TO 255
PWM blauwled ,teller ,1
PWM roodled ,teller ,1
PWM groenled , teller ,1
NEXT
WEND
|
dan werkt alleen de eerste pwm en de rest blijft aan
|
|
|
Gepost op zondag 20 December 2009 23:21:30 |
 |
werkt bij mij wel met 20 mhz kristal
en fuse regel weglaten
ik weet wel dat als je fuses insteld dat je ze allemaal
moeten instellen
Ik gebruik die niet werk altijd met extern kristal
dan worden de fuses ingesteld met compiler |
|
|
Gepost op zondag 20 December 2009 23:27:21 |
 |
dan ga ik morgen er een kristal inzetten en weer proberen |
|
|
Gepost op maandag 21 December 2009 10:27:10 |
 |
Ik heb er vandaag een kristal ingezet ,helaas geen resultaat.
Ik heb nu inplaats van PWM , PULSOUT gebruikt resultaat: het werkt
Code |
PULSOUT roodled,rood
PULSOUT blauwled,blauw
PULSOUT groenled,groen
|
Ik vind dit heel raar dat PWM niet werkt , is er iemand die hier een logische verklaring voor heeft? [Bericht gewijzigd door 19roland70 op Maandag 21 December 2009 10:28:05] |
|
|
|
|
|