Sida 1 av 9

pic dimmer?

Postat: 11 juli 2007, 15:31:02
av basmicke
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

Postat: 11 juli 2007, 15:52:25
av sodjan
Koder till vadå ?
Dimmer av vadå ?

Svenska kan du i princip glömma. Eller i alla fall att ha det
som ett krav, alla datablad o.s.v är på engelska.
Vad är problemet med engelska ?

Postat: 11 juli 2007, 15:53:29
av vfr
Grattis! Dags att börja bygga nyttoprylar då! :)

Vad menar du med "koder"?

Är det källkod du menar så är det lämpligen google som gäller. Icecap och Sodjan här på forumet har också lite fria grejor upplagda.

Postat: 11 juli 2007, 15:59:04
av sodjan
Japp, och mina hittar du under http://www.jescab.se/Info_PIC.html
Ännu inte speciellt mycket man "jag har en plan"... :-)

svar

Postat: 11 juli 2007, 20:34:06
av basmicke
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.

Postat: 11 juli 2007, 21:22:07
av bengt-re
Här har du ett exempel på hur man kan styra 200 LEDś med en PIC10F.

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
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....

Postat: 11 juli 2007, 22:59:42
av sodjan
Du ska få ett hett tips...

Glöm det där med att dimma LEDs.
Försök att få dom att blinka bara.

*Sen* kan du fundera på att dimma dom...

Postat: 12 juli 2007, 12:20:25
av basmicke
att få dem å blinka tror jag att jag fattar redan det finns det ju redan demon på. tackar så mkt för koden får kolla om den funkar lite senare.

Postat: 12 juli 2007, 12:41:38
av bengt-re
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.

Postat: 12 juli 2007, 13:08:27
av basmicke
ok???
då har jag en bra fråga till er eliter på pic programmering vart finns det förklaringar för nybörjare???
har en pic16f267 tror jag det var... är det samma källkoder för alla eller?

Postat: 12 juli 2007, 13:09:31
av sodjan
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...

Postat: 12 juli 2007, 13:12:35
av basmicke
tackar sodjan det börjar klarna lite nu. de e ju rätt så svårt när man är nybörjare å inte har någon direkt bok och läsa om hur det fungerar.
vat inte om man kanske har någon kurs nu i 2:an eller 3:an i pic programmering på elen. :D

Postat: 12 juli 2007, 13:28:22
av sodjan
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...

Postat: 12 juli 2007, 13:57:38
av bengt-re
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.....

Postat: 12 juli 2007, 14:21:21
av sodjan
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...