pic dimmer?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

jag fattar köret med hur man ska få räknaren att räkna ner el nivå de är ju relativt enkelt tycker jag, det är hur man ska skapa nivåerna och få led lamporna att blika med 70hz
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Ok så man ska starta en timer modul då eller?

Ja. Läs på om timers och återkom med det som är oklart så tar vi de då.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Jag fattar ju som så om timer 1 modulen att det räknar från 0000hh till 0000ff,
och när den slår över då så skapas en interrupt som ska räkna ner t.ex led 1 ett steg. Men det man ställer in i Timer 1 modulen är ju vad länge den ska ta tid på/räkna upp till. Hur ska man då få 3500Hz?? De e de jag inte fattar.
Niklas-k
Inlägg: 354
Blev medlem: 10 mars 2004, 15:59:21
Ort: Katrineholm

Inlägg av Niklas-k »

Timer1 16 bitar stegar från 0(0x0) till 65535(0xFFFF) och börjar om från noll igen förutsatt att det står 0 i registret TMR1H och TMR1L.

För att få Timer1 snurra med 3500 Hz så skall du ha rätt värde på i TMR1H och TMR1L beroende på vilken kristall du kör med.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Jag kör med en 4MHz cristall. Men hur ska jag räkan ut det då? Hittar inget exempel i databladet som visar hur man ska räkna ut det.
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

Jag tror du behöver gnugga dom små grå lite. Mycket av det du frågar här har du ju fått svar på på förra sidan.

Det du skall ta reda på är:

1. Hur lång tid är en period om frekvensen är 3500Hz?

2. Hur mycket av den tiden skall utgånen vara 1 respektive 0? Den tiden som utgången är 1 är pulstiden (pulsbredden).

3. Enligt databladet så räknar timern upp 1 varje instruktionscykel om "operation mode" är satt till "timer", en instruktionscykel vid 4MHz är 1us (mao från det timern står på 0 till den räknat till 1 har det gått 1us). Vad behöver du mata för värde till timern för att få den att snurra runt vid den pulstid/pulsbredd du kom fram till i steg 2?

Detta är saker du skall kunna räkna ut själv med de uppgifter du fått här, utan att ens kolla i databladet. Sedan när du förstått hur detta hänger ihop kan du gå vidare.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Jag använde den här formeln när jag räknade lite:
"The PWM period can be calculated using
the following formula:
PWM period = [(PR2) + 1] • 4 • TOSC •
(TMR2 prescale value) "

Och jag räknade som så:
4000000/1141=3505.69676

Har ingen aning om jag räknar rätt eller fel. Så räknade jag ju tidigare i tråden.
Fattar inte riktigt hur man ska komma på formlerna och sånt(har aldrig varit bra på det).
Ni får järna hjälpa mig med formlerna så kan jag räkna själv.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Fattar inte riktigt hur man ska komma på formlerna och sånt

Vad är det du ska "komma på" ?
Det där finns väl i databladet ?

> Och jag räknade som så:
4000000/1141=3505.69676

Tja, det kan väl vara både rätt och fel... :-)
Det beror på vad de olika siffrorna står för och vad det är du försöker räkna ut.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Hmm, började just läsa denna tråden (läser sällan trådar om PIC då jag nte använder dom...) men det känns verkligen som att budskapen inte går fram. Vad det beror på vet jag inte men jag läste från sida ett till sida fyra och hoppade sen till siata sidan och *fortfarande* är det samma frågor....

Varför inte göra som vanligt att börja med att få en lysdiod att blinka och sen tända flera i följd osv??
Jag förstår om man vill ösa på och göra något särskilt för att få det till något användbart men man måste lära sig gå innan man kan cykla.

En stor eloge iallafall från mig till er som verkligen hjälper till på detta beundransvärda sett får att hjälpa Basmicke.

Lycka till Basmicke.

Nu drar jag mig tillbaka och programmerar min AVR som borde varit färdig kodad vid detta laget :/
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

Jag tror björn har rätt angående att börja enkelt.

Basmicke: Du sa på första sidan i tråden att du fått en diod blinka. Har du förstått hur det programmet funkar? Det vi försöker förklara för dig är igentligen samma sak (generellt sett) bara det att du skall blinka "oftare" och att tiden dioden är "tänd" mellan blinkningarna skall variera.

Iomed att du inte svarade på någon av mina 3 frågor ovan, så vet jag inte ens om du förstått vad HZ är?

Dessutom är jag inte säker på att du vet hur respektive instruktion i PIC:ens instruktionsuppsättning igentligen fungerar. Vad gör movlw eller bcf instruktionerna t.ex?

Som björn sa, du måste lära dig gå innan du kan cykla. Det är också svårt att förklara/hjälpa om man inte säkert vet att du förstått det första svaret innan du ställer nästa fråga.

Som sagt börja enklare, en diod en blinkning och försök förstå hur det fungerar. Ge inte upp.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Dessutom är jag inte säker på att du vet hur respektive instruktion i PIC:ens instruktionsuppsättning igentligen fungerar . Vad gör movlw eller bcf instruktionerna t.ex?
Movlw- flyttar litteralen till arbetsregistret.
BCF- bit clear f.
BSF- bit set f
Det kan jag och hänger med på det mesta. Kan ju visa ett demo exempel som man får med:

Kod: Markera allt

;**************************************************************************
;*           VELLEMAN   High-Q KIT  K8048/VM111 SAMPLE SOFTWARE           *
;**************************************************************************
;*           DEMO1: Simple Running light for testing LD1...LD5            *
;*	     DEMO1: Program for testing K8048/VM111 with PIC16F627!       *
;**************************************************************************
;*          (C) VELLEMAN Components,2003  All rights reserved             *
;**************************************************************************
;*          Hardw. Rev: P8048'1          Softw. Rev:  1.20                *
;*          OSC.......: XT 4MHz Max.     POWER.....:  12V DC              *
;**************************************************************************

W                            EQU     H'0000'
F                            EQU     H'0001'

;----- Register Files------------------------------------------------------

INDF                         EQU     H'0000'
TMR0                         EQU     H'0001'
PCL                          EQU     H'0002'
STATUS                       EQU     H'0003'
FSR                          EQU     H'0004'
PORTA                        EQU     H'0005'
PORTB                        EQU     H'0006'

INTCON                       EQU     H'000B'
OPTION_REG                   EQU     H'0081'
TRISA                        EQU     H'0085'
TRISB                        EQU     H'0086'
CMCON                        EQU     H'001F'

;----- STATUS Bits --------------------------------------------------------
IRP                          EQU     H'0007'
RP1                          EQU     H'0006'
RP0                          EQU     H'0005'
NOT_TO                       EQU     H'0004'
NOT_PD                       EQU     H'0003'
Z                            EQU     H'0002'
DC                           EQU     H'0001'
C                            EQU     H'0000'

;==========================================================================
;
;       RAM Definition
;
;==========================================================================

    __MAXRAM H'01FF'
    __BADRAM H'07'-H'09', H'0D', H'13'-H'14', H'1B'-H'1E'
    __BADRAM H'87'-H'89', H'8D', H'8F'-H'91', H'93'-H'97', H'9E'
    __BADRAM H'105', H'107'-H'109', H'10C'-H'11F', H'150'-H'16F'
    __BADRAM H'185', H'187'-H'189', H'18C'-H'1EF'

;==========================================================================
;
;       Configuration Bits
;
;==========================================================================

_BODEN_ON                    EQU     H'3FFF'
_BODEN_OFF                   EQU     H'3FBF'
_CP_ALL                      EQU     H'03FF'
_CP_75                       EQU     H'17FF'
_CP_50                       EQU     H'2BFF'
_CP_OFF                      EQU     H'3FFF'
_DATA_CP_ON                  EQU     H'3EFF'
_DATA_CP_OFF                 EQU     H'3FFF'
_PWRTE_OFF                   EQU     H'3FFF'
_PWRTE_ON                    EQU     H'3FF7'
_WDT_ON                      EQU     H'3FFF'
_WDT_OFF                     EQU     H'3FFB'
_LVP_ON                      EQU     H'3FFF'
_LVP_OFF                     EQU     H'3F7F'
_MCLRE_ON                    EQU     H'3FFF'
_MCLRE_OFF                   EQU     H'3FDF'
_ER_OSC_CLKOUT               EQU     H'3FFF'
_ER_OSC_NOCLKOUT             EQU     H'3FFE'
_INTRC_OSC_CLKOUT            EQU     H'3FFD'
_INTRC_OSC_NOCLKOUT          EQU     H'3FFC'
_EXTCLK_OSC                  EQU     H'3FEF'
_LP_OSC                      EQU     H'3FEC'
_XT_OSC                      EQU     H'3FED'
_HS_OSC                      EQU     H'3FEE'

	__CONFIG        _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;==========================================================================
;       Variable Definition
;==========================================================================
TIMER1		EQU	H'20'		;Used in delay routine
TIMER2		EQU	H'21'		; "	"	"	
PATERN		EQU	H'22'		;Pattern data for effect's

		ORG	0		;Reset vector address
		GOTO	RESET		;goto RESET routine when boot.


;		*********************************************
;		*  Example of a delay routine               *
;		*********************************************

DELAY_ROUTINE   MOVLW   D'255'         ;54 Generate approx 10mS delay at 4Mhz CLK
                MOVWF   TIMER2
DEL_LOOP1       MOVLW   D'255'	       ;60	
                MOVWF   TIMER1
DEL_LOOP2       DECFSZ  TIMER1,F
                GOTO    DEL_LOOP2
                DECFSZ  TIMER2,F
                GOTO    DEL_LOOP1
		RETLW   0


;	       **********************************
;              **  RESET :  main boot routine  **
;              **********************************

RESET		MOVLW	B'00000111'	;Disable Comparator module's
		MOVWF	CMCON
		;
		BSF	STATUS,RP0	;Switch to register bank 1
					;Disable pull-ups
					;INT on rising edge
					;TMR0 to CLKOUT
					;TMR0 Incr low2high trans.
					;Prescaler assign to Timer0
					;Prescaler rate is 1:256
		MOVLW	B'11010111'	;Set PIC options (See datasheet).
		MOVWF	OPTION_REG	;Write the OPTION register.
		;
		CLRF	INTCON		;Disable interrupts
		MOVLW	B'11000000'
		MOVWF	TRISB		;RB7 & RB6 are inputs.
					;RB5...RB0 are outputs.
		MOVLW	B'11111111'	;all RA ports are inputs
		MOVWF	TRISA
		BCF	STATUS,RP0	;Switch Back to reg. Bank 0
		CLRF	PORTB		
		;

EFFECT_1	MOVLW	B'00000001'	;Activate LD1 (RB0)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00000010'	;Activate LD2 (RB1)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00000100'	;Activate LD3 (RB2)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00001000'	;Activate LD4 (RB3)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00010000'	;Activate LD5 (RB4)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00100000'	;Activate LD6 (RB5)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		GOTO	EFFECT_1
		END

Den hänger jag ju med på det mesta man gör om det inte är nått som jag fattar så kollar ja förklaringen på den instruktionen i databladet å då hänger jag med.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Sämre exempel ska man nog leta efter!

Dels definierar den register direkt vilket det finns .INC-filer till, dels definierar den RAM'en vilket även den finns i .INC-filen precis som CONFIG-bitsen.

Dessutom finns det INGET om interrupt i detta.

Spola den direkt, läs den inte!
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Iomed att du inte svarade på någon av mina 3 frågor ovan, så vet jag inte ens om du förstått vad HZ är?
Jo Hz vet jag vad det är det är svägningar per sekund t.ex vårt 230V nät i hu har ju 50Hz.
Jag går faktiskt el_programmet så det mest basic kan jag.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Håller med Icecap, skriv om koden så att den ser vettig ut, t.ex :

- Lägg till en #INCLUDE av rätt INC fil för den processor du använder.

- Plocka bort allt som har har definition av register, minne och config bitar.
(__CONFIG måste vara kvar så klart).

- Byt ut "RETLW 0" mot "RETURN". RETLW är en gammal kvarleva från äldre
processorer, och det ser väldigt oproffsigt ut att ha med det i dag.

- Byt ut alla "BSF STATUS,RPx" mot BANKSEL xxxx. Bara för att ta ett exempel på varför :

Kod: Markera allt

BSF   STATUS,RP0   ;Switch to register bank 1 
För att vara korrekt ska det stå :

Kod: Markera allt

BSF   STATUS,RP0   ;Switch to register bank 1 or bank 3
Vilken bank man hamnar i beror på hur RP1 står !!.
Samma sak med :

Kod: Markera allt

BCF   STATUS,RP0   ;Switch Back to reg. Bank 0
vilket bör vara :

Kod: Markera allt

BCF   STATUS,RP0   ;Switch Back to reg. Bank 0 or bank 2
BANKSEL hanterar detta korrekt, om man har en processor med fler än 2 banker, så sätter BANKSEL alltid både RP0 och RP1.
På en processor med enbart två banker är den "smart enough" att bara sätta RP0...

Så koden behöver en riktig genomgång innan det finns någon anledning att
titta på själva funktionen...
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Är den korrekt nu?

Kod: Markera allt

	processor   16f627 
      	include       <p16f627.inc> 


	__CONFIG        _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;		*********************************************
;		*  Example of a delay routine               *
;		*********************************************

DELAY_ROUTINE   MOVLW   D'255'         ;54 Generate approx 10mS delay at 4Mhz CLK
                MOVWF   TIMER2
DEL_LOOP1       MOVLW   D'255'	       ;60	
                MOVWF   TIMER1
DEL_LOOP2       DECFSZ  TIMER1,F
                GOTO    DEL_LOOP2
                DECFSZ  TIMER2,F
                GOTO    DEL_LOOP1
		RETURN


;	       **********************************
;              **  RESET :  main boot routine  **
;              **********************************

RESET		MOVLW	B'00000111'	;Disable Comparator module's
		MOVWF	CMCON
		;
		BANKSEL	H'0006'	;Switch to register bank 1
					;Disable pull-ups
					;INT on rising edge
					;TMR0 to CLKOUT
					;TMR0 Incr low2high trans.
					;Prescaler assign to Timer0
					;Prescaler rate is 1:256
		MOVLW	B'11010111'	;Set PIC options (See datasheet).
		MOVWF	OPTION_REG	;Write the OPTION register.
		;
		CLRF	INTCON		;Disable interrupts
		MOVLW	B'11000000'
		MOVWF	TRISB		;RB7 & RB6 are inputs.
					;RB5...RB0 are outputs.
		MOVLW	B'11111111'	;all RA ports are inputs
		MOVWF	TRISA
		BANKSEL	H'0005'	;Switch Back to reg. Bank 0
		CLRF	PORTB		
		;

EFFECT_1	MOVLW	B'00000001'	;Activate LD1 (RB0)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00000010'	;Activate LD2 (RB1)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00000100'	;Activate LD3 (RB2)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00001000'	;Activate LD4 (RB3)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00010000'	;Activate LD5 (RB4)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00100000'	;Activate LD6 (RB5)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		GOTO	EFFECT_1
		END
Skriv svar