Hallo ik heb net men eerste programmatje voor'n pic16F628 erop zitten en zit met drie vraagjes:

;****************************************************************
;bepalen welke pic je gaat gebruiken gebeurd met volgende functie
;****************************************************************

		LIST	P=16F628		;zoals je kan zien gebruiken we de PIC16F628

;****************************************************************
;Microchip heeft voor ons een include file gemaakt die dit doet:
;****************************************************************

		include	<P16F628.INC>		;deze include file maakt het ons mogelijk
						;om het programmeren meer symbolisch te doen

;****************************************************************
;Gebruik maken van eigen registers -> deze moet je dan aanmaken:
;****************************************************************

		CBLOCK	0x20
			cntr1
			cntr2
			cntr3
		ENDC

;****************************************************************
;Digitale I/O instellen:
;****************************************************************

		movlw	d'7'
		movwf	CMCON

;****************************************************************
;Programma: Een led laten knipperen op RB0
;****************************************************************

		bsf	STATUS, RP0		;we selecteren bank 1 omdat de registers TRISA en 
						;TRISB zich daar bevinden
						;bank 1 bevindt zich in het STATUS register en
						;heet RP0 -> om bank 1 te hebben set je RP0

		movlw	b'00000000'
		movwf	TRISB			;we hebben van alle pinnen aan poort B uitgangen
						;gemaakt, ook al hebben we enkel RB0 nodig
		bcf	STATUS, RP0
		
lus:		bsf 	PORTB,0			;de led op RB0 aanzetten
		call	delay			;we roepen de subroutine aan die voor een 	
						;tijdsvertraging zorgt -> om het pinken zichtbaar 
						;te maken
		bcf	PORTB,0			;de led op RB0 uitzetten
		call	delay			;eveneens de vertraging aanzetten na het uitzetten
		goto	lus			;er wordt steeds vanaf hier naar lus gesprongen
						;zodat de led oneindig aan en uit gaat.

delay		movlw	d'5'			;voor de 3e loop die 5 x de 2e loop uitvoert
		movwf	cntr3			
delay1		movlw	h'82'			;130 x de 1e loop uitvoeren (82h = 130d)
		movwf	cntr2			
delay2		movlw	h'ff'			;waarde 255 in het register cntr1 zetten (zie later)
		movwf	cntr1
delay3		decfsz	cntr1,f			;van die 255 één aftrekken en terugzetten in cntr1
						;dit terugzetten is door "f" achteraan de instructie
		goto	delay3			;terugspringen naar delay3 en als cntr1 '0' is wordt
						;deze stap overgeslagen
		decfsz	cntr2,f			
		goto	delay2			;"ff" wordt in cntr1 gezet en de stap van "delay3"
						;begint weer opnieuw
		decfsz	cntr3,f
		goto	delay1			;cntr3 = 5d
						;cntr2 = 130d
						;cntr1 = 255d
						;cntr1xcntr2xcntr3 = 497250 -> +- 0,5s
		return				;beïndigen van de CALL subroutine
		END				;einde van het programma

1) is er iemand die me iets meer kan zeggen over de digitale I/O instelling want dit heb ik klakkeloos overgenomen uit de tutorial

2) is er nog iets extra van instellingen nodig om dit programma in de pic te kunnen laden (met een K8048/VM111 van velleman)

3) die "P16F628.inc" waar haal je die/waar moet je die zetten in een map ofzo?

Alvast erg bedankt!

Waar je misschien op zou moeten letten is dat je de goede poort aanstuurt. Ik weet zo niet op welke poort de ledjes aangesloten zijn. Maar daar kun je achter komen door de lijntje op de print te volgen en te kijken naar welke pin hij gaat. Als je dan in het datasheet van de PIC kijkt zie je welke poort het is.

Die pic16f628a.inc heeft MPLAB meestal automatisch wel te pakken.

[Bericht gewijzigd door ReneBiemans op (10%)]

Op 19 november 2007 20:37:56 schreef gitaarstudentje:
1) is er iemand die me iets meer kan zeggen over de digitale I/O instelling want dit heb ik klakkeloos overgenomen uit de tutorial

Datasheet erbij pakken

2) is er nog iets extra van instellingen nodig om dit programma in de pic te kunnen laden (met een K8048/VM111 van velleman)

Misschien handig: http://www.circuitsonline.net/artikelen/view/37

3) die "P16F628.inc" waar haal je die/waar moet je die zetten in een map ofzo?

Staat al in een map van MPlab, anders krijg je wel een seintje.

[Bericht gewijzigd door Henry S. op (20%)]

in de tris registers bepaal je of een poort ingang of uitgang is. (0 is uitgang 1 is ingang)

De fuses moeten geset worden, kan in de code kan ook in MPLAB in de code begint het met __config

De inc. file staat 'gewoon' in je map van MPLAB, daar haalt hij bepaalde registers namen weg, bijvoorbeeld trisB anders moet je het registernummer invoeren ipv TRISB dus dit is veel overzichtelijker en makkelijker.......

al een dikke merci!

Maar euh Henry dat van die instellingen bedoelde ik op die ik er nog moet bijschrijven in het programma (heb al programma's gezien waar vanalles instaat van config word etc. en weet niet waar dat allemaal op slaat)

Ook dat staat in de datasheet.
En heb je http://www.circuitsonline.net/artikelen/view/8 gelezen? Jeroen V. is bezig met een nieuwe tutorial.

Oke nu heb ik het volgende programma gemaakt, maar als ik het in de pic steek met de 8048 kit (velleman) dan doet die niets... is er iets fout aan ofzo?


;****************************************************************
;NIET OP LETTEN ->UIT INC FILE
;****************************************************************

IFNDEF __16F628
           MESSG "Processor-header file mismatch.  Verify selected processor."
        ENDIF

;==========================================================================
;
;       Register Definitions
;
;==========================================================================

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'
PCLATH                       EQU     H'000A'
INTCON                       EQU     H'000B'
PIR1                         EQU     H'000C'
TMR1L                        EQU     H'000E'
TMR1H                        EQU     H'000F'
T1CON                        EQU     H'0010'
TMR2                         EQU     H'0011'
T2CON                        EQU     H'0012'
CCPR1L                       EQU     H'0015'
CCPR1H                       EQU     H'0016'
CCP1CON                      EQU     H'0017'
RCSTA                        EQU     H'0018'
TXREG                        EQU     H'0019'
RCREG                        EQU     H'001A'
CMCON                        EQU     H'001F'

OPTION_REG                   EQU     H'0081'
TRISA                        EQU     H'0085'
TRISB                        EQU     H'0086'
PIE1                         EQU     H'008C'
PCON                         EQU     H'008E'
PR2                          EQU     H'0092'
TXSTA                        EQU     H'0098'
SPBRG                        EQU     H'0099'
EEDATA                       EQU     H'009A'
EEADR                        EQU     H'009B'
EECON1                       EQU     H'009C'
EECON2                       EQU     H'009D'
VRCON                        EQU     H'009F'

;----- 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'

;----- INTCON Bits --------------------------------------------------------

GIE                          EQU     H'0007'
PEIE                         EQU     H'0006'
T0IE                         EQU     H'0005'
INTE                         EQU     H'0004'
RBIE                         EQU     H'0003'
T0IF                         EQU     H'0002'
INTF                         EQU     H'0001'
RBIF                         EQU     H'0000'

;----- PIR1 Bits ----------------------------------------------------------

EEIF                         EQU     H'0007'
CMIF                         EQU     H'0006'
RCIF                         EQU     H'0005'
TXIF                         EQU     H'0004'
CCP1IF                       EQU     H'0002'
TMR2IF                       EQU     H'0001'
TMR1IF                       EQU     H'0000'

;----- T1CON Bits ---------------------------------------------------------
T1CKPS1                      EQU     H'0005'
T1CKPS0                      EQU     H'0004'
T1OSCEN                      EQU     H'0003'
NOT_T1SYNC                   EQU     H'0002'
TMR1CS                       EQU     H'0001'
TMR1ON                       EQU     H'0000'

;----- T2CON Bits ---------------------------------------------------------
TOUTPS3                      EQU     H'0006'
TOUTPS2                      EQU     H'0005'
TOUTPS1                      EQU     H'0004'
TOUTPS0                      EQU     H'0003'
TMR2ON                       EQU     H'0002'
T2CKPS1                      EQU     H'0001'
T2CKPS0                      EQU     H'0000'

;----- CCP1CON Bits ---------------------------------------------------------
CCP1X                        EQU     H'0005'
CCP1Y                        EQU     H'0004'
CCP1M3                       EQU     H'0003'
CCP1M2                       EQU     H'0002'
CCP1M1                       EQU     H'0001'
CCP1M0                       EQU     H'0000'

;----- RCSTA Bits ---------------------------------------------------------
SPEN                         EQU     H'0007'
RX9                          EQU     H'0006'
SREN                         EQU     H'0005'
CREN                         EQU     H'0004'
ADEN                         EQU     H'0003'
FERR                         EQU     H'0002'
OERR                         EQU     H'0001'
RX9D                         EQU     H'0000'

;----- CMCON Bits ---------------------------------------------------------

C2OUT                        EQU     H'0007'
C1OUT                        EQU     H'0006'
C2INV                        EQU     H'0005'
C1INV                        EQU     H'0004'
CIS                          EQU     H'0003'
CM2                          EQU     H'0002'
CM1                          EQU     H'0001'
CM0                          EQU     H'0000'

;----- OPTION Bits --------------------------------------------------------

NOT_RBPU                     EQU     H'0007'
INTEDG                       EQU     H'0006'
T0CS                         EQU     H'0005'
T0SE                         EQU     H'0004'
PSA                          EQU     H'0003'
PS2                          EQU     H'0002'
PS1                          EQU     H'0001'
PS0                          EQU     H'0000'

;----- PIE1 Bits ----------------------------------------------------------

EEIE                         EQU     H'0007'
CMIE                         EQU     H'0006'
RCIE                         EQU     H'0005'
TXIE                         EQU     H'0004'
CCP1IE                       EQU     H'0002'
TMR2IE                       EQU     H'0001'
TMR1IE                       EQU     H'0000'

;----- PCON Bits ----------------------------------------------------------

OSCF                         EQU     H'0003'
NOT_POR                      EQU     H'0001'
NOT_BO                       EQU     H'0000'
NOT_BOR                      EQU     H'0000'
NOT_BOD                      EQU     H'0000'

;----- TXSTA Bits ----------------------------------------------------------
CSRC                         EQU     H'0007'
TX9                          EQU     H'0006'
TXEN                         EQU     H'0005'
SYNC                         EQU     H'0004'
BRGH                         EQU     H'0002'
TRMT                         EQU     H'0001'
TX9D                         EQU     H'0000'

;----- EECON1 Bits ---------------------------------------------------------
WRERR                        EQU     H'0003'
WREN                         EQU     H'0002'
WR                           EQU     H'0001'
RD                           EQU     H'0000'

;----- VRCON Bits ---------------------------------------------------------

VREN                         EQU     H'0007'
VROE                         EQU     H'0006'
VRR                          EQU     H'0005'
VR3                          EQU     H'0003'
VR2                          EQU     H'0002'
VR1                          EQU     H'0001'
VR0                          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'

        LIST

;****************************************************************
;Gebruik maken van eigen registers -> deze moet je dan aanmaken:
;****************************************************************

		CBLOCK	0x20
			cntr1
			cntr2
			cntr3
		ENDC

;****************************************************************
;Digitale I/O instellen:
;****************************************************************

		movlw	d'7'
		movwf	CMCON

;****************************************************************
;Programma: Een led laten knipperen op RB0
;****************************************************************

		bsf	STATUS, RP0		;we selecteren bank 1 omdat de registers TRISA en 
						;TRISB zich daar bevinden
						;bank 1 bevindt zich in het STATUS register en
						;heet RP0 -> om bank 1 te hebben set je RP0

		movlw	b'00000000'
		movwf	TRISB			;we hebben van alle pinnen aan poort B uitgangen
						;gemaakt, ook al hebben we enkel RB0 nodig
		bcf	STATUS, RP0
		
lus:		bsf 	PORTB,0			;de led op RB0 aanzetten
		call	delay			;we roepen de subroutine aan die voor een 	
						;tijdsvertraging zorgt -> om het pinken zichtbaar 
						;te maken
		bcf	PORTB,0			;de led op RB0 uitzetten
		call	delay			;eveneens de vertraging aanzetten na het uitzetten
		goto	lus			;er wordt steeds vanaf hier naar lus gesprongen
						;zodat de led oneindig aan en uit gaat.

delay		movlw	d'5'			;voor de 3e loop die 5 x de 2e loop uitvoert
		movwf	cntr3			
delay1		movlw	h'82'			;130 x de 1e loop uitvoeren (82h = 130d)
		movwf	cntr2			
delay2		movlw	h'ff'			;waarde 255 in het register cntr1 zetten (zie later)
		movwf	cntr1
delay3		decfsz	cntr1,f			;van die 255 één aftrekken en terugzetten in cntr1
						;dit terugzetten is door "f" achteraan de instructie
		goto	delay3			;terugspringen naar delay3 en als cntr1 '0' is wordt
						;deze stap overgeslagen
		decfsz	cntr2,f			
		goto	delay2			;"ff" wordt in cntr1 gezet en de stap van "delay3"
						;begint weer opnieuw
		decfsz	cntr3,f
		goto	delay1			;cntr3 = 5d
						;cntr2 = 130d
						;cntr1 = 255d
						;cntr1xcntr2xcntr3 = 497250 -> +- 0,5s
		return				;beïndigen van de CALL subroutine
		END				;einde van het programma
	

Kan het misschien kwaad dat er een voeding van 12V aanhangt ipv 15V? (men voeding van men externe HD)

En toevallig niemand in de buurt van Hamme die't me anders wat wil aanleren? :D

alvast bedankt he!

Zoals ook in de beschrijving staat: http://www.velleman.be/product/view/?lan=1&id=350903#

power supply: 12 or 15V DC, min. 300mA, non-regulated adapter

Kun je dus een 12v voeding erop aan zetten zonder problemen.

Maar die INC file hoef je niet handmatig te includen. Als je boven in je file gewoon die standaard file van je PIC include werkt dat veel makkelijker en overzichtelijker.

Ik gok dat het verkeerd gaat in de lus er staat lus: en je goto zegt goto lus. Oftewel als je die : verwijdert doet hij het waarschijnlijk wel.

[Bericht gewijzigd door ReneBiemans op (16%)]

oke die ":" verwijdert maar doet nog steeds niets... Zou het kunnen dat het ligt aan men config word? Krijg daarover steeds een berichtje dat het er niet bij zit en dan staat er ergens rechts "3FFF" en dat neem ik dan want ik weet niet juist hoe je dat moet kiezen.

MISschien is hert handig om eerst dit pakketje te downloaden: http://www.velleman.be/downloads/files/downloads/k8048_2_3_2.zip

En dan wat dingen daarmee te testen en dan daar wat dingen in de code aan te passen. Dan weet je denk ik zeker dat het met dat boardje werkt.

Wat het zou kunnen zijn met dat script wat je nu hebt is wat je al zegt van die configwords


_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'

dit zijn je configwords. afhankelijk van wat je wilt instellen moet je deze worden achter __CONFIG platsen

hier een voorbeeld:


__CONFIG        _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
		errorlevel -302

deze zou je ook kunnen gebruiken. instellingen: maak geen gebruik van interne MRCL, Brown-out-detect enable aan, geen code protecion,watchdogtimer uit, low voltage programming uit, interne oscilator gebruiken, power on timer enable aan.

de errorlevel -302 is voor het onderdrukken van een warning die je tegen komt als je met je banken loopt te prutsen
(wat je dus eigenlijk altijd doet ;))

is een vrij standaard instelling van het config-word voor de PIC16F628(A)

Oooh goeie uitleg, bedankt jonges!