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: 14
14 gasten
0 leden:
Forum > Licht effecten > moodlight geprogrameerd met proton IDE light
michielvanendert
Golden Member
Berichten: 28
Gepost op zondag 26 Juli 2009 20:42:05 QuoteWijzig

hoi iedereen
ben een beginneling en
ik had geprobeerd een moodlight te programeren met "proton IDE light" en is er iemand die dit eens wou nakijken of het zou kunnen werken
alvast bedankt

Code
'****************************************************************
'*  Name    :moodlight                                        *
'*  Author  : Van Endert Michiel                          *
'*  Notice  : Copyright (c) 2009                          *
'*          : All Rights Reserved                         *
'*  Date    : 26/07/2009                                  *
'*  Version : 1.0                                         *
'*  Notes moodlight                                       *
'*          :                                             *
'****************************************************************
DEVICE 16F628A
CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_OFF,MCLRE_OFF
ALL_DIGITAL TRUE


DIM rood
DIM groen
DIM blauw
DIM teller
DIM overflow_teller
DIM pwmteller
SYMBOL led1 PORTA.0
SYMBOL led2 PORTA.1
SYMBOL led3 PORTA.2

CLEAR  

WHILE 1=1

ON INTERRUPT GOTO pwmsturing  ;interrupt en ga naar pwmsturing

pwmsturing:                   ;lbl pwmsturing

IF pwmteller >=100
THEN pwmteller = 1            ; als de pwmteller groter of gelijk is aan 100
pwmteller = pwmteller+1       ;dan pwmteller is gelijk aan 1

ELSE
pwmteller=pwmteller + 1       ;anders pwmteller met 1 verhogen

IF rood >= pwmteller          ;als rood groter of gelijk is aan pwmteller
THEN led1 = HIGH              ;dan gaat led1 aan

IF groen >= pwmteller         ;als groen groter of gelijk is aan pwmteller
THEN led2 = HIGH              ;dan gaat led2 aan

IF blauw >= pwmteller         ;als blauw groter of gelijk is aan pwmteller
THEN led3 = HIGH 

END


IF overflow_teller >350       ;als overflow_teller groter is als 350
THEN overflow_teller =0       ;dan overflow_teller 0 maken
GOTO Main                     ;voor vlotte overgang het getal 350
                              ;goto Main

ELSE INC overflow_teller      ;andert overflow_teller met 1 bijtellen
END

Main:                         ;lbl main
IF teller >=299               ;als de teller groter of gelijk is aan 299
THEN teller = 0               ;dan teller terug naar 0

IF teller < 100 THEN          ;als de teller kleiner is als 100 
rood = teller                 ;dan heeft rood dezelde waarde als de teller
groen = 0                     ;en de waarde van groen is 0
blauw = 100-teller            ;en de waarde van blauw telt gelijk af met de teller

IF teller < 200 THEN          ;als de teller kleiner is als 200
rood = 200 - teller           ;dan rood telt gelijk af met de teller
groen = teller - 100          ;en de waarde van groen
blauw = 0                     ;en de waarde van blauw is 0

ELSE                          
rood = 0                      ;zoniet dan rood is 0
groen = 300 -teller           ;en groen telt gelijk af met de teller
blauw = teller - 200          ;blauw stijgt van waarde
END

WEND



MOD-EDIT: Stynus: code tags gesloten

Hidden astuteness
reddevil
Lid
Berichten: 1271
Gepost op zondag 26 Juli 2009 21:26:10 QuoteWijzig

Aan je code kan ik zo direct niet aan uit maar kan je al een led laten pinken, bv rood zodat je weet dat je schakeling in orde is.


Veel te weinig tijd voor mijn projecten of heb ik er soms te veel?
Stynus
Admin
Berichten: 2854
Gepost op zondag 26 Juli 2009 22:20:31 QuoteWijzig

De code klopt niet echt zo te zien.

Jij doet een if then structuur zo:
IF voorwaarde
THEN actie
ELSE
actie2
END

Dit moet op de volgende manier:
If voorwaarde Then
actie1
else
actie2
endif

Als je gewoon end zet dan neemt de compiler dit aan als het einde van de code. Die end moet dus alleen helemaal vanonder staan.

Verder heb je alles in een while loop staan. dat lijkt me ook niet helemaal de bedoeling. Vooral niet omdat het interrupt gedeelte ertussen zit.

Ik denk dat je best begint met een ledje te laten knipperren. Werkt dit laat het dan aan en uitfaden. Ga dan verder met kleuren toevoegen.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
michielvanendert
Golden Member
Berichten: 28
Gepost op maandag 27 Juli 2009 13:48:11 QuoteWijzig

is het dan zo iets als fadende led

Code


DEVICE 16F628A
CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_OFF,MCLRE_OFF
ALL_DIGITAL TRUE

DIM teller AS BYTE              ;maak van teller een variabele
SYMBOL led_1 PORTA.0            ;led_1 hangt op poort A.0

TRISA = %00000000               ;poort A zijn uitgangen
                                
CLEAR                           ;wis alle RAM geheugen
                                
WHILE 1=1                       ; oneindige lus
FOR teller = 1 TO 255           ;de variabele 'teller' telt van 1 tot 255
    PWM led_1,teller,500        ;poort 'led_1'= A.0 duty cycle is afh van de waarde van de teller
                                ;en aantal keer is 500 = 2.5 seconden
NEXT                            ;
                                ;
FOR teller = 255 TO 1 STEP -1   ;de variabele ' teller ' telt af van 255 tot 1
    PWM led_1,teller,500        ;poort 'led_1'= A.0 duty cycle is afh van de waarde van de teller
                                ;en aantal keer is 500 = 2.5 seconden
NEXT                            ;
                                ;
WEND                            ;
END


MOD-EDIT: Stynus: code tags gesloten


Hidden astuteness
Stynus
Admin
Berichten: 2854
Gepost op maandag 27 Juli 2009 14:10:25 QuoteWijzig

Ja maar je gaat problemen krijgen als je meer dan 1 led gaat aansturen zo.
De pwm instructie werkt namelijk een tijdje op 1 uitgang en dan gaat het programma verder met de volgende instructie. Zo kan je niet meerdere leds tegelijk aansturen.

Je hebt nu 2 opties voor meer leds:
-Je kan hardware pwm toepassen. Maar de meeste pic's hebben maar 1 of 2 uitgangen waar dit op kan.
-Zelf je pwm routine gaan schrijven.
Dit is hier waarschijnlijk de beste optie. Je maakt dan zoiets:

Code
high led1
high led2
...
For pwmlus = 0 to 255
  if pwmlus > waarde1 then
    low led1
  endif
  if pwmlus > waarde2 then
    low led2
  endif
  delayms 1
next



Op deze manier kan je zoveel ledjes aansturen als je zelf wil (en zolang de pic snel genoeg is )

Ps: Probeer in het vervolg je code tags terug te sluiten.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
michielvanendert
Golden Member
Berichten: 28
Gepost op maandag 27 Juli 2009 14:18:50 QuoteWijzig

ok wat is die waarde 1/2
en hoe sluit ik die
mvg


Hidden astuteness
Stynus
Admin
Berichten: 2854
Gepost op maandag 27 Juli 2009 14:21:44 QuoteWijzig

waarde1 en waarde2 zijn de waardes die je uitgang moet hebben . Dus hoe fel je led moet branden. Kan van 0-255 zijn
Die definieer je in het begin als byte. pwmlus definieer je ook als byte.

De code tag sluit je met [/code ] (zonder de spatie voor de laatste ]) of nogmaals op het knopje drukken als je ze met het knopje geopend hebt.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
michielvanendert
Golden Member
Berichten: 28
Gepost op maandag 27 Juli 2009 14:55:51 QuoteWijzig

en moet ik dan het deel da jij hebt geschreven nog eens maken maar dan omgekeerd


Code

DEVICE 16F628A
CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_OFF,MCLRE_OFF
ALL_DIGITAL TRUE
                              
DIM pwmlus AS BYTE               ;maak van pwmlus een variabele
SYMBOL led_1 PORTA.0             ;led_1 hangt op poort A.0
SYMBOL led_2 PORTA.1             ;led_2 hangt op poort A.1

TRISA = %00000000                ;poort A zijn uitgangen
                                
CLEAR                            ;wis alle RAM geheugen

HIGH led_1                       ;maak led1 hoog
HIGH led_2                       ;maak led2 hoog

WHILE 1=1                        ; oneindige lus   
FOR pwmlus = 0 TO 255            ;pwmlus gaat van 0 naar 255
  IF pwmlus >= 254 THEN          ;als pwmlus groter of gelijk is aan 127 dan
    LOW led1                     ;maak led1 laag
  ENDIF
  IF pwmlus >= 254 THEN          ;als pwmlus groter of gelijk is aan 254 dan
    LOW led2                     ;maak led2 laag 
  ENDIF                          
  DELAYMS 1                      ;vertraag met 1 ms
NEXT

FOR pwmlus = 255 TO 0 STEP -1    ;pwmlus gaat van 0 naar 255
  IF pwmlus =< 1 THEN            ;als pwmlus kleiner of gelijk is aan 1 dan
    HIGH led1                    ;maak led1 laag
  ENDIF                          
  IF pwmlus =< 1 THEN            ;als pwmlus kleiner of gelijk is aan 1 dan
    HIGH led2                    ;maak led2 laag 
  ENDIF                          ;vertraag met 1 ms
  DELAYMS 1
NEXT

WEND


Hidden astuteness
Stynus
Admin
Berichten: 2854
Gepost op maandag 27 Juli 2009 15:55:14 QuoteWijzig

Zo bedoel ik het niet. Je moet het PWM commando vervangen door de code die ik net gaf.

Dan wordt het bijvoorbeeld dit:

Code
Device 16F628A

Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_OFF,MCLRE_OFF

ALL_DIGITAL TRUE

Dim teller As Byte              ;maak van teller een variabele
Dim pwmlus As Byte

Symbol led_1 PORTA.0            ;led_1 hangt op poort A.0
TRISA = %00000000               ;poort A zijn uitgangen
Clear                           ;wis alle RAM geheugen
While 1=1                       ; oneindige lus

For teller = 1 To 255           ;de variabele 'teller' telt van 1 tot 255
  High led1
    For pwmlus = 0 To 255
            If pwmlus > teller Then
                Low led1
            EndIf
        DelayMS 1
    Next           
Next                            ;
For teller = 255 To 1 Step -1   ;de variabele ' teller ' telt af van 255 tot 1
    High led1
    For pwmlus = 0 To 255
            If pwmlus > teller Then
                Low led1
            EndIf
        DelayMS 1
    Next                                ;en aantal keer is 500 = 2.5 seconden
Next                            ;

Wend 
End


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
michielvanendert
Golden Member
Berichten: 28
Gepost op maandag 27 Juli 2009 16:21:09 QuoteWijzig

en dat dan per ledje 1 keer (na while dan)


Hidden astuteness

Active Topics

» ? => Mini kerstlan...
» ATSAMD21J18A-AU backupen
» De gevolgen van een kl...
» De tuin.
» Afstandsbediening plaf...
» Virtual Chemist probleem
» Probleem met Toyota Av...
» Whirlpool kookplaat
» 24 volt motor vertrage...
» Show je mini projecten

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2022 SchemaTheek
Laadtijd: 0.23837 sec.