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? 
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
Red-E
Gr. Red-E || There are only 10 types of people in the world. Those who understand binary, and those who don't ||
_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)