pic dimmer?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Lite tröst är att jag inte kan dem heller har ändå hållit på uppemot ett år. Kommandona är rätt lika så det är lätt att blanda samman.

Tänk på bokstäverna så brukar det lösa sig lite. MOV L W F är kombinationernas beståndsdelar. F är valfritt register L är Literal (=konstant) W är Wreg alltså arbetsregistret. Så tex MOVLW Betyder FLYTTA Literal till WREG.

Annars finns också översikten över kommandona som kan vara bra att ha utskriven.

Lycka till :)
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

har blandat lite av allas olika svar och laggt till lite eget. så hur ser det ut?
skriv gärna det som är fel för nått är det säkert, och nu är det ju inga config bitar med.
vad var det nästa som ja skulle göra?

banksel pr2;
movlw h'100'
movwf pr2;

banksel CCPR1;
movlw d'100
movwf CCPR1;

banksel tmr1 ; Välj bank där tmr1 ligger
movlw d'100' ; Lägg 100(decimalt) i W-registret
movwf tmr1 ; Lägg värdet i W-registret i filregistret "tmr1"

banksel CCP1CON
bsf CCP1CON,4 ; Sätt CCP1Y
bcf CCP1CON,5 ; Nolla CCP1X

banksel TRISB
clrf TRISB ; Sätt alla bitarna i TRISB till 0

blanksel tmr2;
movlw h'100'
movwf tmr2;

blanksel t2con;
movlw h'100'
movwf t2con;
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

"Använd ett par räknade för on/off tiderna". va??

"Är det flera utgångar" japp har 6 lys dioder på experiment kortet så dem vill jag använda.
"räcker med en räknare för hela tiden och en räknare/LED för
den ena perioden". fattar inte hur du menar.
"Den andra blir ju alltid hela tiden minus räknarnen
i alla fall" ok?? hänger inte med vad du menar...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> så hur ser det ut?

Inte så "snyggt", så använd code-taggarna när du postar kod...

Om vå säger att du vill blinka med 100 Hz (för att undvika flimmer) så
har vi en hel period = 10 ms.

Sedan vill du ha t.ex 100 olika nivår, så då får vi en bas-räknare på
100 us.

Så var 100'de us så gör du följande :

1. Räka ner var och en av LED-räknarna, om någon blir "noll", släck
motsvarande LED.

2. Räkna ner huvud-räknaren, om den blir noll så återståll den till
100, ladda om alla LED-räknarna med resp "nivå" och tänd alla LED.

Enklast sätts en timer upp att genera ett interrupt var 100 us (ca,
det är inte speciellt kritiskt, så klart). Sedan går allt av sig själv,
så att säga...

Jag vet inte vilken hastighet du kör med, men vid 20 Mhz så är
100 us ca 500 instruktioner, vilket är *massor* av tid. :-)
Ovanstående tar ca 40-50 instruktioner att göra...

Detta går att göra kompakt och bra, se t.ex (8 LEDs) :
http://www.piclist.com/techref/microchip/pwmmult-sd.htm
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

ok ska tänka på det.. hur ser man villken hastighet man kör med då... eller ställer man in den någon stans??
ska kolla lite mer på dina instruktioner kör säkert fast nån stans :D
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

var det så du menade.
hur gör man då för att få en räknare som räknar ner?

Kod: Markera allt

;interup räknaren?

blanksel tmr0;
movlw	 d'100'
movwf	 tmr0;

blanksel t0cs
clrf	 t0cs;timer mode is selected by clearing the T0CS bit
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

det står att när timer0 owerflows from ffH till 00h an interupt is generated.
this owerflow sets the T0IF bit. the t0if bit (INTCON<2>) must be cleared in software by the timer0 module interupt service routine before re enabeling this interrupt.

men hur gör man en räknare som räknar ner till noll?
och för att enabla interuppten igen ska man bara skriva

Kod: Markera allt

blanksel T0IF;
clrf T0IF;
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Du måste börja med *mycket* enklare program innan du sätter igång med detta...
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

ok men jag vet inte vad jag ska göra då?
den här har jag tänkt mig som ett projeks som jag ska använda i senare saker som jag håller på med hemma...
men om jag ska fortsätta fundera på det här å försöka komma vidare så skulle jag i alla fall veta hur man ställer in 100 us på en räknare.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag har glömt vilken processor det var du använder, men hur som
helst så står allt om hur man ställer in timers för att göra än det ena
än det andra i databladet.

> hur ser man villken hastighet man kör med då... eller ställer man in den någon stans??

Har du ens *läst* kapitlet om oscillator i databladet innan du frågar ???

Sen har du något problem med ditt tangenbord, det blir inga stora
bokstäver i början på meningar. Be någon fixa det, så blir dina
frågor dessutom läsbara...
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Jag använder en PIC16F627.

Om du kan specificera vad kapitlet heter så kan ag läsa det. Det är inte så lätt när man inte förstår vad dem menar. eftersom allt står på engelska. Å det är jobbigt nät man inte kan få något förklarat för sig så matt fattar hur det fungerar. Jag fattar hur man ställer in en räknare i alla fall på timer0 har inte kollat på 1 och 2 än.
Om jag har fattat rät så att man clerar T0CS bitten genom:

Kod: Markera allt

blanksel T0CS;
CLRF T0CS;
Eller har jag fel?
Sen så vore det ju lite trevligt om du kunde verka lite possitiv å ge lite possitiv feedbavk istället för att tracka ner på att man inte kan något.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK... :-)

Är det 627, inte 627A ?
Kapitlet om oscillatorn heter "14.2 Oscillator Configurations",
i alla fall för 627A. Inte så så svårt, eller hur ? :-)

Det är inte bra att kalla Timer 0/1/2 för "räknare", det blir förvirrat.

T0CS ligger i OPTION registret (kolla databladet !)
och nollas med "BCF OPTION, T0CS".
CLRF används (som namnet säger!) för att nolla hela *register*.

Jag är exakt så positiv som de som jag hjälper gratis har rätt att kräva!
Duger det inte, så visst, jag har skojigare saker att göra...
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Ja det är en 627 och ingen 627A.

Ok. så här stod det i manualen.
TABLE 14-1: CAPACITOR SELECTION FOR
CERAMIC RESONATORS
TABLE 14-2: CAPACITOR SELECTION FOR
CRYSTAL OSCILLATOR
14.2.3 EXTERNAL CRYSTAL OSCILLATOR
CIRCUIT
Either a prepackaged oscillator can be used, or a
simple oscillator circuit with TTL gates can be built.
Prepackaged oscillators provide a wide operating
range and better stability. A well-designed crystal
oscillator will provide good performance with TTL
gates. Two types of crystal oscillator circuits can be
used; one with series resonance, or one with parallel
resonance.
Figure 14-2 shows implementation of a parallel
resonant oscillator circuit. The circuit is designed to use
the fundamental frequency of the crystal. The 74AS04
inverter performs the 180° phase shift that a parallel
oscillator requires. The 4.7 kΩ resistor provides the
negative feedback for stability. The 10 kΩ
potentiometers bias the 74AS04 in the linear region.
This could be used for external oscillator designs.
Note 1: A series resistor may be required for some crystals.
2: See Table 14-1 and Table 14-2 for recommended
values of C1 and C2.
C1
C2
XTAL
OSC2
RS
OSC1
RF
SLEEP
PIC16F62X
NOTE 1
FOSC
Ranges Characterized:
Mode Freq OSC1(C1) OSC2(C2)
XT 455 kHz
2.0 MHz
4.0 MHz
22 - 100 pF
15 - 68 pF
15 - 68 pF
22 - 100 pF
15 - 68 pF
15 - 68 pF
HS 8.0 MHz
16.0 MHz
10 - 68 pF
10 - 22 pF
10 - 68 pF
10 - 22 pF
Note 1: Higher capacitance increases the stability of the oscillator
but also increases the start-up time. These values
are for design guidance only. Since each resonator has
its own characteristics, the user should consult the resonator
manufacturer for appropriate values of external
components.
Mode Freq OSC1(C1) OSC2(C2)
LP 32 kHz
200 kHz
68 - 100 pF
15 - 30 pF
68 - 100 pF
15 - 30 pF
XT 100 kHz
2 MHz
4 MHz
68 - 150 pF
15 - 30 pF
15 - 30 pF
150 - 200 pF
15 - 30 pF
15 - 30 pF
HS 8 MHz
10 MHz
20 MHz
15 - 30 pF
15 - 30 pF
15 - 30 pF
15 - 30 pF
15 - 30 pF
15 - 30 pF
Note 1: Higher capacitance increases the stability of the oscillator
but also increases the start-up time. These values
are for design guidance only. Rs may be required in HS
mode as well as XT mode to avoid overdriving crystals
with low drive level specification. Since each crystal
has its own characteristics, the user should consult the
crystal manufacturer for appropriate values of external
components.
OK så du menar att man ska skriva:

blanksel T0CS;
BCF OPTION<4>,T0CS;
Eller? Är inte helt haj på hur man ska skriva BCF koderna. Eller vad man ska kalla det.
Jag är exakt så positiv som de som jag hjälper gratis har rätt att kräva!
Duger det inte, så visst, jag har skojigare saker att göra...
Ok, det kan jag förstå att du är. Men jag har väldigt svårt för det här, så man blir ju inte så väldigt motiverad att fortsätta när man får kommentarer som t.ex.
Sen har du något problem med ditt tangenbord, det blir inga stora
bokstäver i början på meningar. Be någon fixa det, så blir dina
frågor dessutom läsbara...


Men jag uppskattar all den hjälp som jag får av dig för jag börjar ju mer och mer förstå hur man ska tänka och vad du menar med dina instruktioner.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

och innan du komenterar de jag skerv så förlåt för den jobbig och kankse osammanhängande texten och att jag inte använde code taggen när jag skrev koden......
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Du skerv tidigare att var 100 us ska en timer skicka en interupt signal som ska räkna ner några räknare om jag har läst rätt.

så då undrar jag hur mycket 100 us är och hur man ska skriva timern då?
För 10 ms är inte det:

exempel

Kod: Markera allt

blanksel tmr1;
movlw    d'100' 
movwf    tmr0; 
Eller har jag fel?
Då får du hemst gärna skriva hur det är så jag kan få det klart för mig nån gång:D
Skriv svar