pic dimmer?
pic dimmer?
Hej.
skaffade mig en velleman vm111 pic programmerare, fattar knappt något om den än men har börjat att förstå lite om hur den fungerar. så jag undrar om det är nån som vet vart man kan få tag på koder hellst på svenska och sen så undrar jag om man kan skapa någon typ dimmer funktion med en pic prossesor?
//Mikael
skaffade mig en velleman vm111 pic programmerare, fattar knappt något om den än men har börjat att förstå lite om hur den fungerar. så jag undrar om det är nån som vet vart man kan få tag på koder hellst på svenska och sen så undrar jag om man kan skapa någon typ dimmer funktion med en pic prossesor?
//Mikael
Japp, och mina hittar du under http://www.jescab.se/Info_PIC.html
Ännu inte speciellt mycket man "jag har en plan"...
Ännu inte speciellt mycket man "jag har en plan"...

svar
engelskan är de inge större fel på det kan bara vara lite svårt att fatta riktigt rätt ibland när dem använder lite svåra termer.
med en dimmer så menade jag att man har kanske 6 dioder som det är på min "porv" programmerare, om man kunde få dem att dimmra in t.ex 1 och en och sedan dimmra ut.
är väldigt ny inom det här så det är därför som jag kanske använder konstiga ord som kode när jag menar källkoder elller liknande.
med en dimmer så menade jag att man har kanske 6 dioder som det är på min "porv" programmerare, om man kunde få dem att dimmra in t.ex 1 och en och sedan dimmra ut.
är väldigt ny inom det här så det är därför som jag kanske använder konstiga ord som kode när jag menar källkoder elller liknande.
- bengt-re
- EF Sponsor
- Inlägg: 4829
- Blev medlem: 4 april 2005, 16:18:59
- Skype: bengt-re
- Ort: Söder om söder
- Kontakt:
Här har du ett exempel på hur man kan styra 200 LEDś med en PIC10F.
http://web.telia.com/~u95601791/dimmer.png
[/img]
EDIT: Varken det vackraste schemat eller den vackraste koden, men den gör jobbet och ger en 0-97% dimmning i 31 steg och knappinterface har jag för mig, eller om jag minskade max duty lite mer, minns inte, och orkar inte titta igenom koden....
http://web.telia.com/~u95601791/dimmer.png
[/img]
Kod: Markera allt
list p=10F202 ; list directive to define processor
#include <p10f202.inc> ; processor specific variable definitions
;Center LED on GP0
;Two seis LED´s on GP1 and GP2
;on/off on GP1
;down on GP0
;up on GP3
;out on GP2
; __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC
;******************************************************************************
;Reset Vector
;******************************************************************************
duty EQU 0x10
k EQU 0x11
j EQU 0x12
i EQU 0x13
;*************************************
org 0x3FF
org 0x00
movwf OSCCAL
bcf OSCCAL,FOSC4
movlw b'10000000'
option
movlw b'11111011'
tris GPIO
movlw b'11110011'
movwf CMCON0
movlw 0x80
movwf duty
goto MAIN
; ====================================
MAIN
call dutyout
movf duty,w
btfss GPIO,1
movlw 0x00
btfss GPIO,3
incf duty,f
btfss GPIO,0
decf duty,f
goto MAIN
dutyout
movf duty,w
movwf i
movwf j
bsf GPIO,2
wait1
decfsz i
goto wait1
bcf GPIO,2
wait2
incfsz j
goto wait2
decfsz k
goto dutyout
return
END
- bengt-re
- EF Sponsor
- Inlägg: 4829
- Blev medlem: 4 april 2005, 16:18:59
- Skype: bengt-re
- Ort: Söder om söder
- Kontakt:
Det är ingen "bra" kod för pwm. Normalt kör man med timerinterupt, men för en PIC10F.... tja, då kan man lika gärna köra programloops delayer - den skall ju inte göra så mycket annat än att generera en 12kHz PWM....
Sättet för att få konstant frekvens här är att ha samma värde som man i on-loopen incrementerar och i off-loopen decrementerar så oaktat vilket värde som dutyvariabeln är satt till så kommer periodtiden bli samma.
Avstutsningen av knapparna blir i och med att man kör keyscan med omkring 40Hz och på det viset för stegfunktionen då det tar 255/40 sekunder att dimma från min till max. Detta program tillåter rollover, men för aktuell applikation är det nästan en fördel.
Sättet för att få konstant frekvens här är att ha samma värde som man i on-loopen incrementerar och i off-loopen decrementerar så oaktat vilket värde som dutyvariabeln är satt till så kommer periodtiden bli samma.
Avstutsningen av knapparna blir i och med att man kör keyscan med omkring 40Hz och på det viset för stegfunktionen då det tar 255/40 sekunder att dimma från min till max. Detta program tillåter rollover, men för aktuell applikation är det nästan en fördel.
Koden i Bengt-re's exempel är inte helt bra som exempel.
Jag är övertygad om att du inte kör en "Base-line" PIC, utan
en mer normal "Midrange" PIC ur PIC16 serien. Dessutom (som
Bengt påpekade) så programmerar men lite annorlunda på en
processor med mer resurser än PIC10.
Men Bengt har beskrivit principen så det är väl bara att hacka på.
Kör en timer med PWM frekvensen x antal steg i som det ska dimmas.
Använd ett par räknade för on/off tiderna. Är det flera utgångar
räcker med en räknare för hela tiden och en räknare/LED för
den ena perioden. Den andra blir ju alltid hela tiden minus räknarnen
i alla fall...
Jag är övertygad om att du inte kör en "Base-line" PIC, utan
en mer normal "Midrange" PIC ur PIC16 serien. Dessutom (som
Bengt påpekade) så programmerar men lite annorlunda på en
processor med mer resurser än PIC10.
Men Bengt har beskrivit principen så det är väl bara att hacka på.
Kör en timer med PWM frekvensen x antal steg i som det ska dimmas.
Använd ett par räknade för on/off tiderna. Är det flera utgångar
räcker med en räknare för hela tiden och en räknare/LED för
den ena perioden. Den andra blir ju alltid hela tiden minus räknarnen
i alla fall...
Många anser att http://www.amqrp.org/elmer160/lessons/index.html
är en av de bättre PIC-tutorials "out there". Om du bara inte snöar in på
att de använder dne gamla 16F84A, utan jämför med databladet för
den procesor som du kör med, så går det bra.
> vart finns det förklaringar för nybörjare
www.elektronikforumet.com
> har en pic16f267
Finns ingen PIC som heter så. 627A kanske ?
> är det samma källkoder för alla eller?
627A, 628A och 648A kör *i princip* samma kod (så länger minnet räcker till).
Seden skiljer det mer och mer beroende på vilka kretsar du menar.
Men, databladen har alla skillnader...
är en av de bättre PIC-tutorials "out there". Om du bara inte snöar in på
att de använder dne gamla 16F84A, utan jämför med databladet för
den procesor som du kör med, så går det bra.
> vart finns det förklaringar för nybörjare
www.elektronikforumet.com
> har en pic16f267
Finns ingen PIC som heter så. 627A kanske ?
> är det samma källkoder för alla eller?
627A, 628A och 648A kör *i princip* samma kod (så länger minnet räcker till).
Seden skiljer det mer och mer beroende på vilka kretsar du menar.
Men, databladen har alla skillnader...
- bengt-re
- EF Sponsor
- Inlägg: 4829
- Blev medlem: 4 april 2005, 16:18:59
- Skype: bengt-re
- Ort: Söder om söder
- Kontakt:
Jo, helst skall man inte titta för mycket på kod från gamla 12-bitars kärnorna (vilken 10F är byggd på). Koden blir lite märklig eftersom ett antal SFR inte är mappade i minnesstrukturen utan bara nås med specialinstruktioner (TRIS, OPTION).
Börjar man ny nu så skulle jag enbart titta på 16-bitars (instruktioneslängd, de är fortfarande en 8-bitars uC) uC som 18-serien då dessa är mycket enklare att programmera än 12 och 14 bitars generationen. 14-bitars kärnan är bra så länge uC är liten, men till uC men mycket RAM, många SFR och stort programmminne så är det lite träligt med bankningen av både register och programmminnet.
18-serien har också många "nya" bra funktioner, den kan multiplicera! Detta enbart spar mycket kod.... På sätt och vis är nog 18-serien en av de mest lättprogrammerade uC på marknaden om man skriver assambler.
Växlar man mellan olika uC och vill ta kod från en annan kärna så är det som oftast ger problem skillnader i specialfunktioner och skillnader i osc/config då vissa har en 4MHz klocka som skall kalibreras med ett värde till OSCAL, vissa inte, vissa har 4 eller 8MHz inosc och så vidare. Så länge man kör med extern HS-osc så brukar det oftast gå rakt av, men finns stora skillnader i just intosc bitarna. På vissa kan man köra med dubbla klockor (till och med lilla 12f629 kan köra timer på extern 32kHz och programmet med intosc....)
Läs datablad.....
Börjar man ny nu så skulle jag enbart titta på 16-bitars (instruktioneslängd, de är fortfarande en 8-bitars uC) uC som 18-serien då dessa är mycket enklare att programmera än 12 och 14 bitars generationen. 14-bitars kärnan är bra så länge uC är liten, men till uC men mycket RAM, många SFR och stort programmminne så är det lite träligt med bankningen av både register och programmminnet.
18-serien har också många "nya" bra funktioner, den kan multiplicera! Detta enbart spar mycket kod.... På sätt och vis är nog 18-serien en av de mest lättprogrammerade uC på marknaden om man skriver assambler.
Växlar man mellan olika uC och vill ta kod från en annan kärna så är det som oftast ger problem skillnader i specialfunktioner och skillnader i osc/config då vissa har en 4MHz klocka som skall kalibreras med ett värde till OSCAL, vissa inte, vissa har 4 eller 8MHz inosc och så vidare. Så länge man kör med extern HS-osc så brukar det oftast gå rakt av, men finns stora skillnader i just intosc bitarna. På vissa kan man köra med dubbla klockor (till och med lilla 12f629 kan köra timer på extern 32kHz och programmet med intosc....)
Läs datablad.....
Ett sätt att dra en gräns mellan PIC16 och PIC18 är när *programkoden*
överstiger 2 K-ord. På PIC16 får man då lite extra job med CALL
och GOTO över "2K-gränsen" som inte finns på PIC18 serien.
Däremot är det inte lika besvärligt att t.ex lägga lookup-tabeller
och liknande (d.v.s "data") i programmet över 2K-gränsen...
överstiger 2 K-ord. På PIC16 får man då lite extra job med CALL
och GOTO över "2K-gränsen" som inte finns på PIC18 serien.
Däremot är det inte lika besvärligt att t.ex lägga lookup-tabeller
och liknande (d.v.s "data") i programmet över 2K-gränsen...