|
|
Gepost op zondag 26 Juli 2009 21:26:10 |
 |
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. |
Binnenkort de eerste foto's van het katten pretpark ! |
|
|
Gepost op zondag 26 Juli 2009 22:20:31 |
 |
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 |
|
|
Gepost op maandag 27 Juli 2009 13:48:11 |
 |
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 |
|
|
Gepost op maandag 27 Juli 2009 14:10:25 |
 |
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 |
|
|
Gepost op maandag 27 Juli 2009 14:18:50 |
 |
ok wat is die waarde 1/2
en hoe sluit ik die
mvg |
Hidden astuteness |
|
|
Gepost op maandag 27 Juli 2009 14:21:44 |
 |
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 |
|
|
Gepost op maandag 27 Juli 2009 14:55:51 |
 |
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 |
|
|
Gepost op maandag 27 Juli 2009 15:55:14 |
 |
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 |
|
|
Gepost op maandag 27 Juli 2009 16:21:09 |
 |
en dat dan per ledje 1 keer (na while dan) |
Hidden astuteness |
|
|
|
|