Nybörjarfråga om OSCCAL och andra register.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
m4rtin
Inlägg: 34
Blev medlem: 23 januari 2008, 14:21:42
Ort: Halmstad

Nybörjarfråga om OSCCAL och andra register.

Inlägg av m4rtin »

Hej.
Jag är helt grön på Pic-programmering, men har ändå läst lite assamblerprogrammering, så jag borde kunna reda ut mina problem...
Jag har en PIC 10f206 som jag tillslut bara vill skall vakna när en insignal ändras, sen skall den göra en utgång hög, och sedan hamna i vila igen. jag tror inte det skall vara ett omöjligt jobb, men behöver lite hjälp att förstå hur man sätter register som de skall vara.
Jag använder MPLAB IDE tillsammans med en Picstart plus, och har tyvärr ingen chasn att välja nån annan pic än ju st 10f206. "Fördelen" men denna pic är att den har en intern klocka, doch vet jag inte hur den används :)

Mitt mål till att börja med är enbart att kunna göra en utgång hög, tillex för att tända en lysdiod.
Jag har läst på i några dagar nu om PIC-programmering, men jag har rätt svårt att ta i nya saker i huvudet... Att läsa datablad är något av det svåraste som finns ju... Vad jag förstått är det första man skall göra att sätta registerna korrekt.
Hur skriver jag rent praktiskt i OSCCAL and Registert för att få min interna klocka att fungera?
På något sätt känns det som om jag skall sätta OSCCAL = %00000001, så den hamnar i "center-freq". Allt en nolla i slutet beroende på vad jag vill ha GPIO.2 att göra?


Är enbart starten av koden jag gjort rätt på än...

list p=10F206 ; Berätta villken processor som används
#include <p10F206.inc> ; Inkludera fil med definerade grejor



Mvh MArtin S
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

OSCCAL används om du ska kalibrera den interna klockan. Av ditt projekt att döma så är inte exekveringen tidskritisk. Jag har bara skumläst databladet men jag ser ingenstans där det står att du *måste* kalibrera klockan, så du kan med andra ord skippa i kalibreringen.

Databladet säger också:

9.2.1 OSCILLATOR TYPES
The PIC10F200/202/204/206 devices are offered with
Internal Oscillator mode only.
• INTOSC: Internal 4 MHz Oscillator

Vilket innebär att du inte kan ställa in vilken klocktyp du ska ha. Med andra ord så får du 4MHz-klockan direkt.

Och läsa datablad är svårt om man är ovan. Fördelen är att de flesta PIC-datablad är så gott som exakta i sina upplägg. Har man väl läst igenom ett datablad så kommer resten att flyta på av egen maskin.
m4rtin
Inlägg: 34
Blev medlem: 23 januari 2008, 14:21:42
Ort: Halmstad

Inlägg av m4rtin »

Okej, men det var ju bra. Nä, exekveringen är inte det minsta tidskritisk, bara jag som trodde att man var tvungen att sätta nått kalibreringsvärde, annars skulle det inte fungera överhuvudtaget.
Kommer snart en ny fråga när jag läst vidare om vad jag skall göra.


/Martin
probe
Inlägg: 282
Blev medlem: 2 februari 2008, 21:04:26
Ort: Stockholm

Inlägg av probe »

Kod: Markera allt


	list      p=10F206       	; list directive to define processor

	#include <p10f206.inc>    	; processor specific variable definitions







;Center LED on GP0

;Two seris LED´s on GP1 and GP2

;Pulledupp trigg input on GP3 (start blink when pulled low)

;******************************************************************************



__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC



;=====================================

;Memory map

;=====================================



temp 	EQU 0x10

delay1 	EQU 0x11

delay2 	EQU 0x12

i		EQU 0x13



;*************************************

	org 0x3FF			;Reset vector

	org 0x00

	movwf OSCCAL		;Write OSCAL

	bcf OSCCAL,FOSC4

	goto MAIN

;=======================================

;subroutines



;========================================

;Long delay //loop 63750 times//

;========================================

delay

	movlw 0xfa

	movwf delay1

	movlw 0xFF

	movwf delay2

delay_loop1

	decfsz delay1,F

	goto delay_loop2

	retlw 0x00

delay_loop2

	decfsz delay2,F

	goto delay_loop2

	goto delay_loop1

;========================================

;Short delay //loop 21165 times//

;========================================

wait

	movlw 0x53

	movwf delay1

	movlw 0xFF

	movwf delay2

delay_loop11

	decfsz delay1,F

	goto delay_loop12

	retlw 0x00

delay_loop12

	decfsz delay2,F

	goto delay_loop12

	goto delay_loop11

   

;========================================

;Low light CenterLed //light CenterLed at 9% dutycykle//

;========================================



flash

	movlw 0xFA

	movwf delay1

	movlw 0xFF

	movwf delay2

flash1	

	decfsz delay1,F

	goto flash3

	retlw 0x00

flash3

	bsf GPIO,0

	bcf GPIO,0

	nop

	nop

	nop

	nop

	nop

	nop

	decfsz delay2,F

	goto flash3

	goto flash1

;========================================

;High light CenterLed //light CenterLed at 17% dutycykle//

;========================================

flash_h

	movlw 0xFA

	movwf delay1

	movlw 0xFF

	movwf delay2

flash1_h	

	decfsz delay1,F

	goto flash3_h

	retlw 0x00

flash3_h

	bsf GPIO,0

	bcf GPIO,0

	nop

	nop

	decfsz delay2,F

	goto flash3_h

	goto flash1_h

 	

;=======================================

;MAIN

;=======================================

MAIN

	movlw b'10000000'		;Turn on WPU

	option

	movlw b'11110011'

	movwf CMCON0

	movlw b'00000000'		;Turn off all ports

	movwf GPIO

	movlw b'11111000'

	tris GPIO				;Set TRIS GP0,GP1,GP2 outputs, GP3 input

	

TRIGG_WAIT

	btfsc GPIO,3

    goto TRIGG_WAIT			;Wait for GP3 to go low

	movlw 0x04				;Load counter

	movwf i

	bsf GPIO,1				;Light GP1

	call wait

	bcf GPIO,1				;Turn off GP1

	bsf GPIO,2				;Light GP2

	call wait

	bcf GPIO,2				;Turn off GP2

	call wait

	bsf GPIO,1				;Light GP1 and GP2

	bsf GPIO,2

	call wait

	bcf GPIO,1				;Light GP0 and turn off GP1 and GP2

	bcf GPIO,2

	bcf GPIO,0

blink						;Run flash 4 times

	call flash

	decfsz i,F

	goto blink

	bsf GPIO,0				;Light GP0

	call wait

	bsf GPIO,1				;Light GP1 and GP2

	bsf GPIO,2

	call delay

	bcf GPIO,1				;Turn off GP1 and GP2

	bcf GPIO,2

	call delay

	bsf GPIO,1				;Light GP1 and GP2	

	bsf GPIO,2

	call delay

	bcf GPIO,1				;Turn off GP1 and GP2

	bcf GPIO,2

	call wait

	call flash				;Run flash

	call flash_h			;Run flash_h (high brightness)

	call flash				;Run flash

	decfsz i,F

	bcf GPIO,0				;Turn off GP0 -not needed, just to be sure-

	goto TRIGG_WAIT			;Start again waiting for trigg

	END
Där har du ett fungerande exempel för en 206á tror att koden förklarar sig själv nästan
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

Ett plus är om kommentarerna stämmer, blir lättare att följa koden då.

Jag tänker på detta:

Kod: Markera allt

	bcf GPIO,1				;Light GP0 and turn off GP1 and GP2
	bcf GPIO,2
	bcf GPIO,0
Dessutom inbjuder tre bcf i rad - på samma port - till R-M-W-problem. Det kanske råkar fungera i detta fall, men det är inte säkert det går det på nästa processor.

Jag skulle ha gjort såhär:

Kod: Markera allt

movfw GPIO
andlw b'11111000'   ; Keep a copy of bits 3-7, 0-2 will be destroyed
iorlw b'00000001'   ; Light GP0
movwf GPIO
(om nu en etta anger att dioden ska tändas)

En rad kod mer, men då undgår man R-M-W och samtidigt så behåller man eventuellt viktiga bitar i GPIO.
probe
Inlägg: 282
Blev medlem: 2 februari 2008, 21:04:26
Ort: Stockholm

Inlägg av probe »

Det spelar ingen roll i detta fall men visst. Gör inte anspråk på att vara någon perfekt kod, men dock något som fungerar -
m4rtin
Inlägg: 34
Blev medlem: 23 januari 2008, 14:21:42
Ort: Halmstad

Inlägg av m4rtin »

ny fråga... JAg ka ninte föra över programmet till min pic! Tetstat göra ett program till en 16f-serie-pic, det fungerar utmärkt. Men när ajg föröker föra över nått till min lilla 10f206 står det :


Program Memory Errors

Address Good Bad

0000: 04E3 3FFF
0001: 0583 3FFF
0002: 0C00 3FFF
0003: 0025 3FFF
0004: 0526 3FFF
0005: 0446 3FFF
0006: 0CF8 3FFF
0007: 0006 3FFF
0008: 0A04 3FFF


Vad menas med det? Kan picen vara sönder? Kan ha råkat koppla fel innan när jag skulle prova den....., kanske brände jag den?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Programmerare ?
probe
Inlägg: 282
Blev medlem: 2 februari 2008, 21:04:26
Ort: Stockholm

Inlägg av probe »

Det är en annan algoritm för 10F är 16F vid programmering - går att läsa mer om det på microchips sidor, eller välj en programmerare som säkert tar 10F. Jag har programmerat 10F med ICD-2 och någon "base-line-demo-kit-mumbo-jumbo" microchip programmerare. Hade dock problem med ISP-PRO med 10F, har för mig att det gick om man tvingade över den till samma algoritm som de gamla 12-bitarstyperna (typ 12f84), men som sagt enklast att köra med en dyr microchip programmerare eller välja WISPén som jag TRO fungerar med 10F (har inte testat med 10F med WISP fast jag har en..)

PG164101 hette visst den gamla baseline programmeraren, men den tillverkas nog inte längre.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> eller välja WISPén som jag TRO fungerar med 10F

Ja, det är en av de få saker som VOTI's original Xwisp klarar.
För övrigt (och 10F är inte speciellt vanlig) så är Xwisp2 från
Rob Hammerling lite smidigare och snabbare.
m4rtin
Inlägg: 34
Blev medlem: 23 januari 2008, 14:21:42
Ort: Halmstad

Inlägg av m4rtin »

Använder den senaste versionen av picstart plus, så den borde stödja 10f-serien...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vadå "borde" ? Varför inte ta reda på det ?
Visst, det är sannolikt så, men i alla fall....
m4rtin
Inlägg: 34
Blev medlem: 23 januari 2008, 14:21:42
Ort: Halmstad

Inlägg av m4rtin »

Okej, menar att den "borde" det för att den stödjer ju min PIC. Den finns med i rulllisten när man skall välja vilken pic man programmerar så. Är det något mer ställe jag skall kika på?

/Martin
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jaha, ja då så... :-)

Hur som helst, ingen annan än du själv kan nog
säga vad som är problemet här. Med den information
som vi har.

Har du programmerat någon 10F tidigare ?
Har du programmerat någon annan PIC alls ?
m4rtin
Inlägg: 34
Blev medlem: 23 januari 2008, 14:21:42
Ort: Halmstad

Inlägg av m4rtin »

Jag är helt nybörjare på programmera PIC, men föröker lära mig så gott det går. Har som sagt testat att programmera några enkla rader kod till en 16F pic, och det fungerade som det var tänkt. Sen gör jag likadant till min 10F, men det fungerar inte alls. Koden jag skickar har jag plockat från givna, fungerande program, så det borde itne vara det som felar.
Skriv svar