PIC16F688 Intern oscillator. Och: Hur löser man problem?
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Re: PIC16F688 Intern oscillator 8MHz
Sodjan:
"Jag fattar inte var FCMEM kommer från. Det finns inte med i din kod."
Nu kanske jag missförstår dig, men:
__CONFIG _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF
Från filen PIC16F688.INC:
;==========================================================================
;
; Configuration Bits
;
;==========================================================================
_FCMEN_ON EQU H'3FFF'
_FCMEN_OFF EQU H'37FF'
_IESO_ON EQU H'3FFF'
_IESO_OFF EQU H'3BFF'
edit: Nu ser jag.. Konstigt. Vänta lite.
"Jag fattar inte var FCMEM kommer från. Det finns inte med i din kod."
Nu kanske jag missförstår dig, men:
__CONFIG _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF
Från filen PIC16F688.INC:
;==========================================================================
;
; Configuration Bits
;
;==========================================================================
_FCMEN_ON EQU H'3FFF'
_FCMEN_OFF EQU H'37FF'
_IESO_ON EQU H'3FFF'
_IESO_OFF EQU H'3BFF'
edit: Nu ser jag.. Konstigt. Vänta lite.
Re: PIC16F688 Intern oscillator 8MHz
Från de felmeddelande som du postade :
"Symbol not previously defined (_FCMEM_OFF)"
Och som sagt, jag fick ju inte det även med din kod...
"Symbol not previously defined (_FCMEM_OFF)"
Och som sagt, jag fick ju inte det även med din kod...

Re: PIC16F688 Intern oscillator 8MHz
> (Har inte hittat något om config i MPASM-manualen.)
Från innehållsförteckningen i DS33014K ("MPASM Assembler, MPLINK Object Linker
MPLIB Object Librarian User’s Guide") :
EDIT: Sökning på "config" eller "__config" i hjälpfilen går lika bra, det är i princip
samma text på båda ställena. "hlpMPASMasm.chm" i "/MPASM Suite" katalogen (eller
direkt inifrån MPLAB, "Help" -> "Topics" -> "MPASM Assembler").
Från innehållsförteckningen i DS33014K ("MPASM Assembler, MPLINK Object Linker
MPLIB Object Librarian User’s Guide") :
Kod: Markera allt
4.11 __config - Set Processor Configuration Bits ............................ 55
4.12 config - Set Processor Configuration Bits (PIC18 MCUs) ................. 57
samma text på båda ställena. "hlpMPASMasm.chm" i "/MPASM Suite" katalogen (eller
direkt inifrån MPLAB, "Help" -> "Topics" -> "MPASM Assembler").
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Re: PIC16F688 Intern oscillator 8MHz
Den manualfilen saknar jag tydligen. Ska den ligga i MPLAB IDE\Utilities\Dokumentation ?
"Och som sagt, jag fick ju inte det även med din kod..."
Felmeddelandet måste ha varit från förra försöket. (Jag sitter ju inte direkt och bara väntar på svar.
Jag försöker så gott jag kan hela tiden att hitta vad som är galet.)
Det som är så svårt är att lära sig var i datablad och manualer man hittar det man behöver veta för att det man håller på med ska fungera...
Ibland vet man inte vad saker heter. Då är det lite svårt att försöka söka efter det, eftersom sökfunktionerna är textbaserade...
Att sedan förstå att "det som bestämmer strukturen på config-raderna" (vad det nu heter..) hör ihop med "MPLINK Object Linker" tillhör inte det mest logiska om man inte är van.
Jag är inte direkt trög och jag har nästan lika lätt för att läsa/förstå engelska som svenska,
men när det gäller PIC-programmering så är det ingen uppförsbacke. Det är en *vägg*.
Det tycks aldrig lossna.....
Jag tar väldigt gärna emot råd om vad jag ska göra, inte bara med det här specifika problemet i tråden alltså.
Jag får förresten fortfarande fel. Koden ser ut såhär:
Felmeddelandet, som den här gången är från samma kod som ovan
Rad 181-183:
"Och som sagt, jag fick ju inte det även med din kod..."
Felmeddelandet måste ha varit från förra försöket. (Jag sitter ju inte direkt och bara väntar på svar.
Jag försöker så gott jag kan hela tiden att hitta vad som är galet.)
Det som är så svårt är att lära sig var i datablad och manualer man hittar det man behöver veta för att det man håller på med ska fungera...
Ibland vet man inte vad saker heter. Då är det lite svårt att försöka söka efter det, eftersom sökfunktionerna är textbaserade...
Att sedan förstå att "det som bestämmer strukturen på config-raderna" (vad det nu heter..) hör ihop med "MPLINK Object Linker" tillhör inte det mest logiska om man inte är van.
Jag är inte direkt trög och jag har nästan lika lätt för att läsa/förstå engelska som svenska,
men när det gäller PIC-programmering så är det ingen uppförsbacke. Det är en *vägg*.
Det tycks aldrig lossna.....
Jag tar väldigt gärna emot råd om vad jag ska göra, inte bara med det här specifika problemet i tråden alltså.

Jag får förresten fortfarande fel. Koden ser ut såhär:
Kod: Markera allt
;****************************************************
list p=PIC16F688
include "p16f688.inc"
;****************************************************
;
; PIC16F688. Intern oscillator på 8MHz.
;
; LED-belysning till etshyllan
;
; Lysdioder 1 - 6 : RC0 - RC5.
; Knapp (JP1) : RA4. (pin 3).
; JP2 : RA5. (pin 2.) - Satt som utgång eftersom den inte behövs än så länge..
; Pot: RA2. (pin 11.)
;
;
;****************************************************
__CONFIG _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF
errorlevel -302
;****************************************************
; Definiera diverse namn...
#define KNAPP PORTA, 4
;****************************************************
knapp_vars udata_acs
knapplage res 1 ; Vilken knapp som tryckts ner
; det blir mer här senare..
;****************************************************
Boot CODE h'0000'
goto start
;****************************************************
Int_vect CODE h'0004'
; retfie
goto isr_rutin
;****************************************************
; MACRO
; kommer senare...
;****************************************************
Main CODE
Start
;Generell setup
bsf OPTION_REG, NOT_RAPU ;PORT A pull-ups disabled
bsf OPTION_REG, INTEDG ;Interrupt on rising edge of RA2/INT
bcf OPTION_REG, T0CS ;TMR0 internal clock
bcf WDTCON, SWDTEN ;WDT turned off
; Interrupt
bsf INTCON, GIE ;Global interrupt enable bit <--
bsf INTCON, PEIE ;Enable unmasked peripheral interrupts <--
bcf INTCON, T0IE ;Disable the Timer0 interrupt
bcf INTCON, INTE ;Disable the RA2/INT external interrupt <--
bsf INTCON, RAIE ;Enable the PORTA change interrupt <--
bcf INTCON, T0IF ;Timer0 did not overflow
bcf INTCON, INTF ;RA2/INT external interrupt did not occur
bcf INTCON, RAIF ;None of the PORTA-pins have changed state <--<<
movlw b'00010000' ;RA4 interrupt on change. <--
movwf IOCA
bcf PIE1, EEIE ;Disable the EE write complete interrupt
bsf PIE1, ADIE ;Enable the ADC-interrupt <--
bcf PIE1, RCIE ;Disable the EUSART receive interrupt
bcf PIE1, C2IE ;Disable the comparator C2 interrupt
bcf PIE1, C1IE ;Disable the comparator C1 interrupt
bcf PIE1, OSFIE ;Disable the oscillator fail interrupt
bcf PIE1, TXIE ;Disable the EUSART transmit interrupt
bcf PIE1, TMR1IE ;Disable the Timer1 overflow interrupt
clrf PIR1 ;Cleara alla interrupt
bcf PIR1, ADIF ;AD interrupt clear <--
; Klocka
bsf OSCCON, IRCF2 ;8MHz
bsf OSCCON, IRCF1 ;8MHz
bsf OSCCON, IRCF0 ;8MHz
bcf OSCCON, SCS ;Fosc = systemklockan
; I/O
movlw b'00010100' ;Allt till utgångar, bortsett från knappen och poten.
movwf TRISA
clrf TRISC ;Alla till utgångar, för lysdioderna.
clrf PORTA ;Tomt
movlw h'FF' ;Tomt (OBS: Inverterat för lysdioderna).
movwf PORTC
clrf WPUA ;Inga pull-ups
; Timers, comparators mm
bcf T1CON, TMR1ON ;Timer1 avstängd
bsf CMCON0, CM2 ;Comparators avstängda
bsf CMCON0, CM1 ;Comparators avstängda
bsf CMCON0, CM0 ;Comparators avstängda
bcf VRCON, VREN ;CVref powered down
; ADC
movlw b'00000100' ;AN2 (pin 11) analog. Resten digitala
movwf ANSEL
bsf ADCON0, ADFM ;Högerjusterad AD
bcf ADCON0, VCFG ;Vdd som referens
bcf ADCON0, CHS2 ;Channel: AN2 (pin 11)
bsf ADCON0, CHS1 ;Channel: AN2 (pin 11)
bcf ADCON0, CHS0 ;Channel: AN2 (pin 11)
bsf ADCON0, ADON ;ADC enabled <--
bsf ADCON0, GO_DONE ;AD-conversion in progress <-- OBS! Måste vara *efter* ADON !
bcf ADCON1, ADCS2 ;AD Conversion clock: Fosc/32 = 250kHz
bsf ADCON1, ADCS1 ;AD Conversion clock: Fosc/32 = 250kHz
bcf ADCON1, ADCS0 ;AD Conversion clock: Fosc/32 = 250kHz
; USART
bcf TXSTA, TXEN ;EUSART transmit disabled
clrf RCSTA ;EUSART port disabled
bcf BAUDCTL,ABDEN ;Auto-baud detect disabled
;****************************************************
;****************************************************
;****************************************************
;Övriga grejjer, dvs anrop till sub-rutiner/makron osv.
;
loop
goto loop ;Om och om igen...
;
;****************************************************
;****************************************************
;****************************************************
; Sub-rutiner här under
;****************************************************
; Interrupt
isr_vars UDATA_SHR
flagga_knapp RES 1
pot_lo RES 1
pot_hi RES 1
isr_rutin CODE
isr_rutin
;Knapp-interrupt.
btfsc INTCON, RAIF ;PORTA change interrupt? Isåfall körs nästa rad.
btfss KNAPP ;Knappen som gett interrupt? Isåfall körs inte nästa rad.
goto slut ;Hoppa till slutet.
bsf flagga_knapp, 0 ;Sätt flaggan.
bcf INTCON, RAIF ;Clerara PORTA change interrupt.
bsf INTCON, RAIE
;Pot-interrupt.
btfss PIR1, ADIF ;AD-interrupt? Isåfall körs inte nästa rad.
goto slut ;Hoppa till slutet.
bcf PIR1, ADIF ;Cleara AD-interruptet.
movf ADRESL, F ;Innehållet i ADRESL till W.
movwf pot_lo ;..och vidare till pot_lo
movf ADRESH, F ;Innehållet i ADRESH till W.
movwf pot_hi ;..och vidare till pot_hi
bsf ADCON0, ADON ;Starta AD igen
bsf ADCON0, GO_DONE ;Ny avläsning
slut
retfie
;****************************************************
;****************************************************
;Delay-rutiner
DLY_VARS UDATA_ACS
d1 RES 1
d2 RES 1
d3 RES 1
DLY_CODE CODE
;Delay 1s (1,00056s)
Delay_1s
movlw 0x5A
movwf d1
movlw 0xCD
movwf d2
movlw 0x16
movwf d3
Delay_1s_0
decfsz d1, f
goto Delay_1s_1
decfsz d2, f
Delay_1s_1
goto Delay_1s_2
decfsz d3, f
Delay_1s_2
goto Delay_1s_0
nop
return
;Delay 5ms. (5,0003ms)
Delay_5ms
movlw 0x07
movwf d1
movlw 0x28
movwf d2
Delay_5ms_0
decfsz d1, f
goto Delay_5ms_1
decfsz d2, f
Delay_5ms_1
goto Delay_5ms_0
nop
nop
return
;Delay 1us.
Delay_1us
nop
nop
nop
nop
nop
nop
nop
nop
return
;****************************************************
end
Felmeddelandet, som den här gången är från samma kod som ovan

Kod: Markera allt
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "D:\Program\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F688 "ledbelysning.asm" /l"ledbelysning.lst" /e"ledbelysning.err" /o"ledbelysning.o" /c-
Error[111] D:\PROGRAM\MICROCHIP\MPASM SUITE\P16F688.INC 182 : Missing symbol
Halting build on first failure as requested.
BUILD FAILED: Mon May 24 17:56:16 2010
Rad 181-183:
Kod: Markera allt
isr_rutin CODE <---- Rad 181
<---- Rad 182
isr_rutin <---- Rad 183
Re: PIC16F688 Intern oscillator 8MHz
Enligt felmeddelandet är det nåt knas med filen P16F688.INC på rad 182
Edit: såg nu att du skrev dessa rader
Edit: såg nu att du skrev dessa rader

Re: PIC16F688 Intern oscillator 8MHz
Kan du inte bara ta bort den?
Jag ser ingen nytta med den raden iaf.
Jag ser ingen nytta med den raden iaf.
Re: PIC16F688 Intern oscillator 8MHz
Det är rad 182 i p16f688.inc den klagar på *inte* din kod (ledbelysning.asm) om jag förstår det rätt. Har du råddat med p16f688.inc?
Re: PIC16F688 Intern oscillator 8MHz
> Den manualfilen saknar jag tydligen. Ska den ligga i MPLAB IDE\Utilities\Dokumentation ?
Ingen aning. Men den finns på MPLAB-sidan hos http://www.microchip.com.
> Felmeddelandet måste ha varit från förra försöket. (Jag sitter ju inte direkt och bara väntar på svar.
> Jag försöker så gott jag kan hela tiden att hitta vad som är galet.)
Självklart är det så !
Man när du väl postar något så är det ju väldigt enkelt att göra en sista "build"
och se till att koden och meddelanderna är från samma källa. Det blir ju faktiskt
*mer* jobb att posta en version av koden och en annan (äldre ?) version av
meddelanderna, då måste du ju spara det ena någon annanstans under tiden.
> Att sedan förstå att "det som bestämmer strukturen på config-raderna" (vad det nu heter..) hör ihop med "MPLINK Object Linker"
Det gör det inte. Det är dokumenterat i *MPASM* manualen.
Vilket i och för sig ligger i samma PDF fil, om det är det du menar...
> Jag tar väldigt gärna emot råd om vad jag ska göra, inte bara med det här specifika problemet i tråden alltså.
Det primära är alltid att ta ett fel i sänder och undersöka det för sig. Gärna i ordning eftersom
felen ofta är beroende på varandra, så att säga.
Om t.ex MPASM säger "Symbol not previously defined (RAPU)" så är det bara att undersöka varför.
Själva meddelanden är ju väldigt tydligt som det är. Det finns inget definierat som heter RAPU.
Symbolen heter för övrigt NOT_RAPU, vilket syns direkt om du söker efter "RAPU" i P16F688.INC).
Sen hade du ett fel "Symbol not previously defined (_FCMEM_OFF)" vilket var lite klurigt. Men med
lite noggranhet så ser man ju att det är ett gammalt meddelande från då du hade ett stavfel i koden,
den kod du postade var dock rättad (därför var det ju enkelt att se att koden och meddelanderna
inte hörde ihop). Att hitta det har igentligen inte ett smack med just *PIC* programmering att
göra, det behövs bara lite noggranhet i att kolla koden och att läsa meddelandet.
Ditt "...P16F688.INC 182 : Missing symbol" är lite märkligt. Det kan (som andra har sagt) vara
något fel i INC filen. Kolla den eller fixa en ny, jag har lagt med min INC fil nedan.
Din senaste kod byggde OK efter att jag hade fixat två UDATA_ASC -> UDATA_SHR. Du hade ju
ändrat på ett eller två andra stället, varför inte ändra alla ? Nu kom du aldrig så längt (d.v.s länkningen)
p.g.a av 111 felet, så du märkte inte det...
Notera alltså att jag inte får felet i P16F688.INC som du får...
Min kopia av P16F688.INC (så du kan byta ut din för att testa) :
Ingen aning. Men den finns på MPLAB-sidan hos http://www.microchip.com.
> Felmeddelandet måste ha varit från förra försöket. (Jag sitter ju inte direkt och bara väntar på svar.
> Jag försöker så gott jag kan hela tiden att hitta vad som är galet.)
Självklart är det så !

Man när du väl postar något så är det ju väldigt enkelt att göra en sista "build"
och se till att koden och meddelanderna är från samma källa. Det blir ju faktiskt
*mer* jobb att posta en version av koden och en annan (äldre ?) version av
meddelanderna, då måste du ju spara det ena någon annanstans under tiden.
> Att sedan förstå att "det som bestämmer strukturen på config-raderna" (vad det nu heter..) hör ihop med "MPLINK Object Linker"
Det gör det inte. Det är dokumenterat i *MPASM* manualen.
Vilket i och för sig ligger i samma PDF fil, om det är det du menar...
> Jag tar väldigt gärna emot råd om vad jag ska göra, inte bara med det här specifika problemet i tråden alltså.
Det primära är alltid att ta ett fel i sänder och undersöka det för sig. Gärna i ordning eftersom
felen ofta är beroende på varandra, så att säga.
Om t.ex MPASM säger "Symbol not previously defined (RAPU)" så är det bara att undersöka varför.
Själva meddelanden är ju väldigt tydligt som det är. Det finns inget definierat som heter RAPU.
Symbolen heter för övrigt NOT_RAPU, vilket syns direkt om du söker efter "RAPU" i P16F688.INC).
Sen hade du ett fel "Symbol not previously defined (_FCMEM_OFF)" vilket var lite klurigt. Men med
lite noggranhet så ser man ju att det är ett gammalt meddelande från då du hade ett stavfel i koden,
den kod du postade var dock rättad (därför var det ju enkelt att se att koden och meddelanderna
inte hörde ihop). Att hitta det har igentligen inte ett smack med just *PIC* programmering att
göra, det behövs bara lite noggranhet i att kolla koden och att läsa meddelandet.
Ditt "...P16F688.INC 182 : Missing symbol" är lite märkligt. Det kan (som andra har sagt) vara
något fel i INC filen. Kolla den eller fixa en ny, jag har lagt med min INC fil nedan.
Din senaste kod byggde OK efter att jag hade fixat två UDATA_ASC -> UDATA_SHR. Du hade ju
ändrat på ett eller två andra stället, varför inte ändra alla ? Nu kom du aldrig så längt (d.v.s länkningen)
p.g.a av 111 felet, så du märkte inte det...

Notera alltså att jag inte får felet i P16F688.INC som du får...
Min kopia av P16F688.INC (så du kan byta ut din för att testa) :
Kod: Markera allt
LIST
; P16F688.INC Standard Header File, Version 1.00 Microchip Technology, Inc.
NOLIST
; This header file defines configurations, registers, and other useful bits of
; information for the PIC16F688 microcontroller. These names are taken to match
; the data sheets as closely as possible.
; Note that the processor must be selected before this file is
; included. The processor may be selected the following ways:
; 1. Command line switch:
; C:\ MPASM MYFILE.ASM /PIC16F688
; 2. LIST directive in the source file
; LIST P=PIC16F688
; 3. Processor Type entry in the MPASM full-screen interface
;==========================================================================
;
; Revision History
;
;==========================================================================
;1.00 07/28/03 Original
;1.01 09/02/03 Modified to match datasheet
;1.02 09/19/03 Changed CMCON1 from 0x20 to 0x1A (pas)
;==========================================================================
;
; Verify Processor
;
;==========================================================================
IFNDEF __16F688
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'
PORTC EQU H'0007'
PCLATH EQU H'000A'
INTCON EQU H'000B'
PIR1 EQU H'000C'
TMR1L EQU H'000E'
TMR1H EQU H'000F'
T1CON EQU H'0010'
BAUDCTL EQU H'0011'
SPBRGH EQU H'0012'
SPBRG EQU H'0013'
RCREG EQU H'0014'
TXREG EQU H'0015'
TXSTA EQU H'0016'
RCSTA EQU H'0017'
WDTCON EQU H'0018'
CMCON0 EQU H'0019'
CMCON1 EQU H'001A'
ADRESH EQU H'001E'
ADCON0 EQU H'001F'
OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISC EQU H'0087'
PIE1 EQU H'008C'
PCON EQU H'008E'
OSCCON EQU H'008F'
OSCTUNE EQU H'0090'
ANSEL EQU H'0091'
WPU EQU H'0095'
WPUA EQU H'0095'
IOC EQU H'0096'
IOCA EQU H'0096'
EEDATH EQU H'0097'
EEADRH EQU H'0098'
VRCON EQU H'0099'
EEDAT EQU H'009A'
EEDATA EQU H'009A'
EEADR EQU H'009B'
EECON1 EQU H'009C'
EECON2 EQU H'009D'
ADRESL EQU H'009E'
ADCON1 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'
RAIE EQU H'0003'
T0IF EQU H'0002'
INTF EQU H'0001'
RAIF EQU H'0000'
;----- PIR1 Bits ----------------------------------------------------------
EEIF EQU H'0007'
ADIF EQU H'0006'
RCIF EQU H'0005'
C2IF EQU H'0004'
C1IF EQU H'0003'
OSFIF EQU H'0002'
TXIF EQU H'0001'
T1IF EQU H'0000'
TMR1IF EQU H'0000'
;----- T1CON Bits ---------------------------------------------------------
T1GINV EQU H'0007'
TMR1GE EQU H'0006'
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'
;----- BAUDCTL Bits --------------------------------------------------------
ABDOVF EQU H'0007'
RCIDL EQU H'0006'
SCKP EQU H'0004'
BRG16 EQU H'0003'
WUE EQU H'0001'
ABDEN EQU H'0000'
;----- TXSTA Bits --------------------------------------------------------
CSRC EQU H'0007'
TX9 EQU H'0006'
TXEN EQU H'0005'
SYNC EQU H'0004'
SENDB EQU H'0003'
BRGH EQU H'0002'
TRMT EQU H'0001'
TX9D EQU H'0000'
;----- RCSTA Bits --------------------------------------------------------
SPEN EQU H'0007'
RX9 EQU H'0006'
SREN EQU H'0005'
CREN EQU H'0004'
ADDEN EQU H'0003'
FERR EQU H'0002'
OERR EQU H'0001'
RX9D EQU H'0000'
;----- WDTCON Bits --------------------------------------------------------
WDTPS3 EQU H'0004'
WDTPS2 EQU H'0003'
WDTPS1 EQU H'0002'
WDTPS0 EQU H'0001'
SWDTEN EQU H'0000'
;----- COMCON0 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'
;----- COMCON1 Bits -------------------------------------------------------
T1GSS EQU H'0001'
C2SYNC EQU H'0000'
;----- ADCON0 Bits --------------------------------------------------------
ADFM EQU H'0007'
VCFG EQU H'0006'
CHS2 EQU H'0004'
CHS1 EQU H'0003'
CHS0 EQU H'0002'
GO EQU H'0001'
NOT_DONE EQU H'0001'
GO_DONE EQU H'0001'
ADON EQU H'0000'
;----- OPTION Bits --------------------------------------------------------
NOT_RAPU 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'
ADIE EQU H'0006'
RCIE EQU H'0005'
C2IE EQU H'0004'
C1IE EQU H'0003'
OSFIE EQU H'0002'
TXIE EQU H'0001'
T1IE EQU H'0000'
TMR1IE EQU H'0000'
;----- PCON Bits ----------------------------------------------------------
ULPWUE EQU H'0005'
SBODEN EQU H'0004'
NOT_POR EQU H'0001'
NOT_BOD EQU H'0000'
;----- OSCCON Bits --------------------------------------------------------
IRCF2 EQU H'0006'
IRCF1 EQU H'0005'
IRCF0 EQU H'0004'
OSTS EQU H'0003'
HTS EQU H'0002'
LTS EQU H'0001'
SCS EQU H'0000'
;----- OSCTUNE Bits -------------------------------------------------------
TUN4 EQU H'0004'
TUN3 EQU H'0003'
TUN2 EQU H'0002'
TUN1 EQU H'0001'
TUN0 EQU H'0000'
;----- ANSEL Bits ---------------------------------------------------------
ANS7 EQU H'0007'
ANS6 EQU H'0006'
ANS5 EQU H'0005'
ANS4 EQU H'0004'
ANS3 EQU H'0003'
ANS2 EQU H'0002'
ANS1 EQU H'0001'
ANS0 EQU H'0000'
;----- IOC Bits ---------------------------------------------------------
IOC5 EQU H'0005'
IOC4 EQU H'0004'
IOC3 EQU H'0003'
IOC2 EQU H'0002'
IOC1 EQU H'0001'
IOC0 EQU H'0000'
;----- IOCA Bits ---------------------------------------------------------
IOCA5 EQU H'0005'
IOCA4 EQU H'0004'
IOCA3 EQU H'0003'
IOCA2 EQU H'0002'
IOCA1 EQU H'0001'
IOCA0 EQU H'0000'
;----- VRCON Bits ---------------------------------------------------------
VREN EQU H'0007'
VRR EQU H'0005'
VR3 EQU H'0003'
VR2 EQU H'0002'
VR1 EQU H'0001'
VR0 EQU H'0000'
;----- EECON1 Bits --------------------------------------------------------
EEPGD EQU H'0007'
WRERR EQU H'0003'
WREN EQU H'0002'
WR EQU H'0001'
RD EQU H'0000'
;----- ADCON1 Bits --------------------------------------------------------
ADCS2 EQU H'0006'
ADCS1 EQU H'0005'
ADCS0 EQU H'0004'
;==========================================================================
;
; RAM Definition
;
;==========================================================================
__MAXRAM H'1FF'
__BADRAM H'06', H'08'-H'09', H'0D', H'1B'-H'1D'
__BADRAM H'86', H'88'-H'89', H'8D', H'92'-H'94'
__BADRAM H'106', H'108'-H'109', H'10C'-H'11F'
__BADRAM H'186', H'188'-H'189', H'18C'-H'18D', H'190'-H'1EF'
;==========================================================================
;
; Configuration Bits
;
;==========================================================================
_FCMEN_ON EQU H'3FFF'
_FCMEN_OFF EQU H'37FF'
_IESO_ON EQU H'3FFF'
_IESO_OFF EQU H'3BFF'
_BOD_ON EQU H'3FFF'
_BOD_NSLEEP EQU H'3EFF'
_BOD_SBODEN EQU H'3DFF'
_BOD_OFF EQU H'3CFF'
_CPD_ON EQU H'3F7F'
_CPD_OFF EQU H'3FFF'
_CP_ON EQU H'3FBF'
_CP_OFF EQU H'3FFF'
_MCLRE_ON EQU H'3FFF'
_MCLRE_OFF EQU H'3FDF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FEF'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FF7'
_LP_OSC EQU H'3FF8'
_XT_OSC EQU H'3FF9'
_HS_OSC EQU H'3FFA'
_EC_OSC EQU H'3FFB'
_INTRC_OSC_NOCLKOUT EQU H'3FFC'
_INTRC_OSC_CLKOUT EQU H'3FFD'
_EXTRC_OSC_NOCLKOUT EQU H'3FFE'
_EXTRC_OSC_CLKOUT EQU H'3FFF'
_INTOSCIO EQU H'3FFC'
_INTOSC EQU H'3FFD'
_EXTRCIO EQU H'3FFE'
_EXTRC EQU H'3FFF'
LIST
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Re: PIC16F688 Intern oscillator 8MHz
Jag hittade felet i P16F688.INC
Den här raden:
;----- WDTCON Bits --------------------------------------------------------
..hade ett tecken före semikolonet som notepad visade som en fyrkant (precis som notepad visar LF och liknande).
Jag tog bort det tecknet och då fick jag inte felmeddelandet.
Jag har bara öppnat den filen med notepad (.INC är associerat till notepad), så tecknet borde ha kommit från något annat program.
Det är iallafall ytterligare ett lysande exempel på något som bara jag kan lyckas med....
Nu när jag väl förstår felen så är de uppenbara. Ungefär som när någon påpekar en rostfläck i lacken och man bara efteråt bara ser den där rosten..
Att jag inte såg "rosthålen" innan är förstås jobbigt.
Hur mycket man än vill det så *kan* man inte med någon rätt beskylla mig för att vara slarvig.
Det är absolut inte så att jag skriker på hjälp så fort jag kör fast. När jag lägger upp en tråd så
är det när jag har suttit allt för länge (men jag har lärt mig ta pauser ..oftast
) och behöver lite input.
Slarvfel eller inte, jag vet inte varför jag ibland inte hittar felen.
Det kanske därför som jag är ljudtekniker/konsult/problemlösare och inte programmerare.
Det vore väldigt intressant att höra andras tankar kring detta.
Ni som tyckte det var jättesvårt i början och nu har det lossnat: Hur "gjorde" ni? 5-56?
Jag får nog ändra rubrik på den här tråden.
Ville ta tillfället i akt och skriva om detta nu när två jobbiga problem dök upp efter varandra.
edit:
"Det primära är alltid att ta ett fel i sänder och undersöka det för sig. Gärna i ordning eftersom
felen ofta är beroende på varandra, så att säga."
Det är nog så ja. Väldigt små steg, även om det är svårt att förstå vilka delar som hör ihop och
varför det (inte) fungerar som det gör. Det finns många sätt att missförstå (eller inte förstå alls) datablad och felmeddelanden, och då hjälper det inte att all information finns där. Den måste in i huvudet också. Så är det med allt nytt.
Efter ett tag lär man sig det nästan instinktivt. T.ex om bilen låter på ett sätt så är en viss del sliten. Startar PIC-kretsen om när man lutar sig framåt så beror det på en annan grej. Totalvägrar php-koden så kan man ha missat ett semikolon. Kurrar magen så är man hundrig. Ja, sånt där.
Jag tror att det är just det som man upptäckt när det har "lossnat", dvs när man kan sätta sig och programmera något utan några större problem och man vet exakt var man hittar svaren på problemen. Dit skulle jag vilja hitta när det gäller PIC-programmering.
Men det är väl bara att fortsätta programmera, göra små testcase när man kör fast och ta en sak i taget.
Hoppas det, för det har jag nämligen tänkt göra.
Den här raden:
;----- WDTCON Bits --------------------------------------------------------
..hade ett tecken före semikolonet som notepad visade som en fyrkant (precis som notepad visar LF och liknande).
Jag tog bort det tecknet och då fick jag inte felmeddelandet.
Jag har bara öppnat den filen med notepad (.INC är associerat till notepad), så tecknet borde ha kommit från något annat program.
Det är iallafall ytterligare ett lysande exempel på något som bara jag kan lyckas med....

Nu när jag väl förstår felen så är de uppenbara. Ungefär som när någon påpekar en rostfläck i lacken och man bara efteråt bara ser den där rosten..
Att jag inte såg "rosthålen" innan är förstås jobbigt.
Hur mycket man än vill det så *kan* man inte med någon rätt beskylla mig för att vara slarvig.
Det är absolut inte så att jag skriker på hjälp så fort jag kör fast. När jag lägger upp en tråd så
är det när jag har suttit allt för länge (men jag har lärt mig ta pauser ..oftast

Slarvfel eller inte, jag vet inte varför jag ibland inte hittar felen.
Det kanske därför som jag är ljudtekniker/konsult/problemlösare och inte programmerare.

Det vore väldigt intressant att höra andras tankar kring detta.
Ni som tyckte det var jättesvårt i början och nu har det lossnat: Hur "gjorde" ni? 5-56?

Jag får nog ändra rubrik på den här tråden.
Ville ta tillfället i akt och skriva om detta nu när två jobbiga problem dök upp efter varandra.
edit:
"Det primära är alltid att ta ett fel i sänder och undersöka det för sig. Gärna i ordning eftersom
felen ofta är beroende på varandra, så att säga."
Det är nog så ja. Väldigt små steg, även om det är svårt att förstå vilka delar som hör ihop och
varför det (inte) fungerar som det gör. Det finns många sätt att missförstå (eller inte förstå alls) datablad och felmeddelanden, och då hjälper det inte att all information finns där. Den måste in i huvudet också. Så är det med allt nytt.
Efter ett tag lär man sig det nästan instinktivt. T.ex om bilen låter på ett sätt så är en viss del sliten. Startar PIC-kretsen om när man lutar sig framåt så beror det på en annan grej. Totalvägrar php-koden så kan man ha missat ett semikolon. Kurrar magen så är man hundrig. Ja, sånt där.
Jag tror att det är just det som man upptäckt när det har "lossnat", dvs när man kan sätta sig och programmera något utan några större problem och man vet exakt var man hittar svaren på problemen. Dit skulle jag vilja hitta när det gäller PIC-programmering.
Men det är väl bara att fortsätta programmera, göra små testcase när man kör fast och ta en sak i taget.
Hoppas det, för det har jag nämligen tänkt göra.

Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Ta en promenad.. Sova på sakenNi som tyckte det var jättesvårt i början och nu har det lossnat:

Nä, allvarligt. Detdär med skräptecken som ställer till det har jag haft oxå, men oftast får jag problem för att jag antar att något skall vara på ett visst sätt, men sedan inte är det

Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
> Men det är väl bara att fortsätta programmera, göra små testcase när man kör fast och ta en sak i taget.
Visst är det så!
Sitter just nu med en web/html/cgi/Python grunka där det blir just så, *väldigt* små steg i taget
med mycket manualer, tester och Google mellan varje ny liten detalj som "fungerar"...
Att det dessutom körs remote via Citrix mot en maskin som står i Huskvarna gör det
bara mer spännande...
Jag har mycket hjälp av W3Schools-HTML i just detta jobb...
Ibland är det något som man fastnar på och som man går och funderar på flera dagar
och så plötsligt så hittar man det å så rullar det på. Bl.a så har det blivit ett par vändor
till de som underhåller själva web-servern (i Australien) och den Python modul som används för att
få en "persistent" Python miljö (i Frankrike), d.v.s där det ligger en server process igång som direkt
kan köra .PY script on-the-fly. Det blir väldigt bra prestanda men det var lite buggigt ett tag...
Just att fixa små "text-case" när man kör fast tycker jag personligen att många missar.
Många kastar ihop en stor app direkt, och sedan när det inte fungerar så kastar man sig på "hjälp-knappen".
Och att fixa en komplett "reproducer" när man söker hjälp borde också vara lite av en standard-åtgärd.
Så snart du postade en komplett kod så tog det ju bara ett par minuter för mig att ladda den i ett
test-projekt i MPLAB och se felen ganska direkt. Jag har ett färdigt test-projekt i MPLAB där jag
snabbt kan ladda problem-kod från forumet, det måste dock vara komplett och körbart för att det
ska ge något.
Jag tycker nog att tekniken att komma framåt är ungefär densamma helt oberoende på
vad det handlar om. COBOL, HTML, Python, PIC assembler eller något helt annat. Det är
bara att gräva och gräva tills det fungerar.
Felet från INC filen var ju lite märklig eftersom de filerna aldrig redigeras och
i princip aldrig ska ge några fel (om det inte är en bugg i MPLAB distributionen,
men det är knappast det första man ska utgå från
).
> Hur mycket man än vill det så *kan* man inte med någon rätt beskylla mig för att vara slarvig.
Jag hoppas att det inte lät så...
(Att lägga upp en källkod och en lista med felmeddelanden som inte ens hör ihop, är dock enbart slarv
och väldigt förvirrande. Jag har svårt att se att det någonsin skulle vara motiverat att göra det...
)
Visst är det så!
Sitter just nu med en web/html/cgi/Python grunka där det blir just så, *väldigt* små steg i taget
med mycket manualer, tester och Google mellan varje ny liten detalj som "fungerar"...

Att det dessutom körs remote via Citrix mot en maskin som står i Huskvarna gör det
bara mer spännande...

Ibland är det något som man fastnar på och som man går och funderar på flera dagar
och så plötsligt så hittar man det å så rullar det på. Bl.a så har det blivit ett par vändor
till de som underhåller själva web-servern (i Australien) och den Python modul som används för att
få en "persistent" Python miljö (i Frankrike), d.v.s där det ligger en server process igång som direkt
kan köra .PY script on-the-fly. Det blir väldigt bra prestanda men det var lite buggigt ett tag...
Just att fixa små "text-case" när man kör fast tycker jag personligen att många missar.
Många kastar ihop en stor app direkt, och sedan när det inte fungerar så kastar man sig på "hjälp-knappen".
Och att fixa en komplett "reproducer" när man söker hjälp borde också vara lite av en standard-åtgärd.
Så snart du postade en komplett kod så tog det ju bara ett par minuter för mig att ladda den i ett
test-projekt i MPLAB och se felen ganska direkt. Jag har ett färdigt test-projekt i MPLAB där jag
snabbt kan ladda problem-kod från forumet, det måste dock vara komplett och körbart för att det
ska ge något.
Jag tycker nog att tekniken att komma framåt är ungefär densamma helt oberoende på
vad det handlar om. COBOL, HTML, Python, PIC assembler eller något helt annat. Det är
bara att gräva och gräva tills det fungerar.
Felet från INC filen var ju lite märklig eftersom de filerna aldrig redigeras och
i princip aldrig ska ge några fel (om det inte är en bugg i MPLAB distributionen,
men det är knappast det första man ska utgå från

> Hur mycket man än vill det så *kan* man inte med någon rätt beskylla mig för att vara slarvig.
Jag hoppas att det inte lät så...

(Att lägga upp en källkod och en lista med felmeddelanden som inte ens hör ihop, är dock enbart slarv
och väldigt förvirrande. Jag har svårt att se att det någonsin skulle vara motiverat att göra det...


Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Håller fullständigt med!
Det är dom "metoderna", att t.ex göra små steg och göra saker reproducerbart, som är dom verkliga erfarenheterna. Inte att kunna ett visst språk eller en viss processors assemblerkod. Kan man metoderna så är det applicerbart på dom flesta saker.
Det är dom "metoderna", att t.ex göra små steg och göra saker reproducerbart, som är dom verkliga erfarenheterna. Inte att kunna ett visst språk eller en viss processors assemblerkod. Kan man metoderna så är det applicerbart på dom flesta saker.
Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Som ett avslutande tips för att undvika knepigheter med config så brukar jag hålla mig till de i MPASM medföljande mallarna.
(Under programkatalogen \Microchip\MPASM Suite\Template\Code)
Om man inte har någon bättre själv.
Sedan räcker det inte att man av misstag skriver i bifogade include filer (har man där att göra ens ??) man måste även ha sinnesnärvaron att spara när man stänger dom (för att strö lite salt i dina vidöppna sår)
Kul att det löste sig.
(Under programkatalogen \Microchip\MPASM Suite\Template\Code)
Om man inte har någon bättre själv.
Sedan räcker det inte att man av misstag skriver i bifogade include filer (har man där att göra ens ??) man måste även ha sinnesnärvaron att spara när man stänger dom (för att strö lite salt i dina vidöppna sår)

Kul att det löste sig.
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
"man måste även ha sinnesnärvaron att spara när man stänger dom"
Precis! Det gör det hela lite skumt.
Visserligen brakade åskan lös (och slog ner i vattentornet på andra sidan gatan) när jag hade bl.a den filen öppnad,
men jag sparade bara i MPLAB (med musen) och stängde snabbt ner allt som var öppet.
Till saken hör att jag har dålig erfarenhet av att spara med tangentkombinationer (t.ex CTRL+S) pga att jag för många år sedan använde program (och Win98) där kortkommandon inte alltid fungerade. Vi kallade det för "PC-sjukan" och det innebar att man antingen tryckte CTRL+S en massa gånger, eller hellre sparade genom att klicka i menyn.
Sedan dess så är det ytterst få program där jag använder kortkommandon för att spara. (Kommer bara på Eagle och Notepad++ nu.)
Att jag överhuvudtaget har t.ex P16F688.INC öppen är för att se hur diverse "symboler" ska se ut.
Sedan kan det tydligen bli lite fel ändå, men nu har jag lärt mig att config-raderna skrivs lite annorlunda för olika PIC-kretsar.
Sodjan:
>> Hur mycket man än vill det så *kan* man inte med någon rätt beskylla mig för att vara slarvig.
> Jag hoppas att det inte lät så...
Nej då. Ingen fara.
Det var inte riktat till någon. Jag bara tänkte högt för att försöka hitta vad såna här fel kan bero på. 
Det var väldigt intressant att läsa era tips och erfarenheter.

Jag ska fortsätta med koden (och problemet i första inlägget) och tänka på detta.
Precis! Det gör det hela lite skumt.
Visserligen brakade åskan lös (och slog ner i vattentornet på andra sidan gatan) när jag hade bl.a den filen öppnad,
men jag sparade bara i MPLAB (med musen) och stängde snabbt ner allt som var öppet.
Till saken hör att jag har dålig erfarenhet av att spara med tangentkombinationer (t.ex CTRL+S) pga att jag för många år sedan använde program (och Win98) där kortkommandon inte alltid fungerade. Vi kallade det för "PC-sjukan" och det innebar att man antingen tryckte CTRL+S en massa gånger, eller hellre sparade genom att klicka i menyn.
Sedan dess så är det ytterst få program där jag använder kortkommandon för att spara. (Kommer bara på Eagle och Notepad++ nu.)
Att jag överhuvudtaget har t.ex P16F688.INC öppen är för att se hur diverse "symboler" ska se ut.
Sedan kan det tydligen bli lite fel ändå, men nu har jag lärt mig att config-raderna skrivs lite annorlunda för olika PIC-kretsar.

Sodjan:
>> Hur mycket man än vill det så *kan* man inte med någon rätt beskylla mig för att vara slarvig.
> Jag hoppas att det inte lät så...

Nej då. Ingen fara.


Det var väldigt intressant att läsa era tips och erfarenheter.


Jag ska fortsätta med koden (och problemet i första inlägget) och tänka på detta.

Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Ett annat bra tips är att ändra en sak åt gången då man felsöker och att ha versionshantering. Antingen typ CVS eller oxå kopiera filer manuellt.