SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 6
6 gasten
0 leden:
Forum > Digitaal > PWM instructie Picbasic
19roland70
Lid
Berichten: 123
Gepost op zondag 20 December 2009 15:46:16 QuoteWijzig

Ik ben bezig om met een rotary encoder de kleurinstelling te maken van een moodlight.
Echter deze code werkt niet:
Code

PWM roodled,kleurrood,1
PWM groenled,kleurgroen,1
PWM blauwled,kleurblauw,1


Het rare is dat ik dit als een meer heb gemaakt met een 16f688 en dat een potmeter op AN4 dit werkte wel.
Ik heb nu een 16f628a en inplaats van een potmeter een rotary encoder
Er staan nu 3 PWM instructies achter elkaar , als ik er 2 disable dan werkt het wel ( met 1 kleur dan ).
Doe ik met 3 PWM instructies dan gaan alle kleuren gewoon 100 % branden

Wat kan ik hier aan doen
 
[Bericht gewijzigd door 19roland70 op Zondag 20 December 2009 15:46:55]
Stynus
Admin
Berichten: 2841
Gepost op zondag 20 December 2009 15:51:38 QuoteWijzig

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
dannymyron
Lid
Berichten: 46
Gepost op zondag 20 December 2009 17:32:51 QuoteWijzig

Kijk hier maar eens
http://www.schematheek.net/index.php?p=forum/topic&t=276

19roland70
Lid
Berichten: 123
Gepost op zondag 20 December 2009 17:57:21 QuoteWijzig

Hoe kan het dat het met een 16f688 wel gaat?

dannymyron
Lid
Berichten: 46
Gepost op zondag 20 December 2009 20:22:33 QuoteWijzig

dan moet ge u programma eens volledig posten en schema

19roland70
Lid
Berichten: 123
Gepost op zondag 20 December 2009 20:35:06 QuoteWijzig


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]

dannymyron
Lid
Berichten: 46
Gepost op zondag 20 December 2009 21:34:34 QuoteWijzig

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

19roland70
Lid
Berichten: 123
Gepost op zondag 20 December 2009 21:55:36 QuoteWijzig

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]

dannymyron
Lid
Berichten: 46
Gepost op zondag 20 December 2009 22:59:21 QuoteWijzig

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

19roland70
Lid
Berichten: 123
Gepost op zondag 20 December 2009 23:07:51 QuoteWijzig

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

dannymyron
Lid
Berichten: 46
Gepost op zondag 20 December 2009 23:21:30 QuoteWijzig

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

19roland70
Lid
Berichten: 123
Gepost op zondag 20 December 2009 23:27:21 QuoteWijzig

dan ga ik morgen er een kristal inzetten en weer proberen

19roland70
Lid
Berichten: 123
Gepost op maandag 21 December 2009 10:27:10 QuoteWijzig

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]


Active Topics

» Aanpassingen aanbouwde...
» Subaru Outback 2016
» Werkplaatsinrichting
» Windwijzer
» Temperatuur bewaking
» Wattage verhogen mogel...
» Nachtverlichting bevei...
» Simpel alarm
» Nieuwe werktafel
» digitale klok

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2021 SchemaTheek
Laadtijd: 0.05821 sec.