Wisp648 kan ej längre identifiera 16F628A

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bos
Inlägg: 2306
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Wisp648 kan ej längre identifiera 16F628A

Inlägg av bos »

Suttit och labbat lite med en LCD-display (ansluten till en PIC16F628A) de senaste dagarna och har nu fått allt att funka. Inget mer än displayen och ett pull up-motstånd på RA4 har funnits på plattan.

Imorse tänkte jag ta ett steg till genom att göra en "klocka" på displayen. Kopplade då in en 32kHz-kristall på Timer1 (pinne 12 och 13, RB6/RB7), skrev lite kod och fick även denna att funka, på första försöket.

Sen skulle jag ändra lite i koden och flasha om. Då tyckte XWisp att kretsen inte längre går att identifiera och/eller är defekt. Tänkte inte så mycket på det utan bytte till en ny 628A och flashade utan problem. Sen ändrade jag koden ytterligare en gång och skulle flasha om, och får då samma felmeddelande.

Här började jag misstänka att det är något lurt med Timer1, så jag provade att koppla bort kristallen innan jag flashade, men felet kvarstod. Kopplade då bort samtliga kringkomponenter (LCD, kristall), men felet kvarstod. Bytte till en ny 628A, flashade, funkade bra. Försökte sen flasha samma krets direkt, och XWisp ger samma felmeddelande.

Jag har läst i Wouters FAQ men hittar inget om detta problem. Är det något med Wisp/628/Timer1 som jag har missat? Känns ganska konstigt att kretsen skulle bli obrukbar (läs: omöjlig att flasha om) bara för att man startat T1-oscillatorn.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av victor_passe »

Hur har du satt MCLR?
Prova att kortslut bygeln du har på wispen under programmeringen.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av sodjan »

Hur ser din __CONFIG ut i den aktuella koden ?
bos
Inlägg: 2306
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av bos »

victor: Jag har ett 10k-motstånd satt mellan MCLR-pinnen och Vcc. Ska prova med bygeln.

sodjan:

Kod: Markera allt

__CONFIG(INTIO & WDTDIS & PWRTDIS & MCLREN & UNPROTECT & BORDIS & LVPDIS);
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av Bosen »

hur gick det???
jag har samma problem med en(två) 12F675. Ungefär samma sak som du. Försökte få en OSRAM-display att funka (fick aldrig den att funka) men sedan kunde jag inte flasha om den. Testade med en ny 12F675. Körde först en led-blink kod, som fungerade. Testade sedan min osram-kod (som givetvis inte funkade denna gången heller) och sen gick den inte att flasha om! Först klagar xwisp2 på att det inte går att autodetecta. Så då testade jag att skriva in target vid flashningen och får följande felmedelande:

Kod: Markera allt

L:\Xwisp\Projects\12F675-1>xwisp2w TARGET 12F675 go ledtest
 xwisp2 version 1.9.5 for Windows (Jan 24 2008, Open Watcom C/C++ 1.70)
File ledtest.hex loaded and is Intel Hex format conforming
Detected programmer: Wisp648, firmware version 1.23
Target not auto-detected, using specified target: 12F675
Target erased
Transferring program to 12F675 via Wisp648
Transferring program memory...100%
Verifying program memory......  0%failed at 000000, expected: '280C', found: '3F
FF'
Write-Verify operation failed after 0.39 seconds, rc 21
xwisp2 failed after 2.74 seconds, rc 21
Press 'Enter' to continue:

EDIT:
Min __config:

Kod: Markera allt

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av sodjan »

Man ska **ALDRIG** (behöva) ange "target" för en PIC som har device-ID inbyggt !
Och det hjälper (i princip) **ALDRG** när man får denna typ av problem...

Någonting annan är galet...

> Körde först en led-blink kod, som fungerade.

Vilken "led-blink kod" ??
Och fungerade det att programmera om flera gånger ?

> Testade sedan min osram-kod (som givetvis inte funkade denna gången heller)

Fungerade det att programmera *en* gång ? Eller inte alls ?
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av Bosen »

Blinkaled-kod:

Kod: Markera allt

;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------

     LIST      P=12F675              ; list directive to define processor
     #INCLUDE <P12F675.INC>          ; processor specific variable definitions

;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the 
; .asm file. The lables following the directive are located in the respective 
; .inc file.  See the data sheet for additional information on configuration 
; word settings.
;
;------------------------------------------------------------------------------

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 

;------------------------------------------------------------------------------
; VARIABLE DEFINITIONS
;------------------------------------------------------------------------------

; example of using Shared Uninitialized Data Section
INT_VAR     UDATA_SHR   0x20   
W_TEMP      RES     1             ; variable used for context saving 
STATUS_TEMP RES     1             ; variable used for context saving

;------------------------------------------------------------------------------
; EEPROM INITIALIZATION
;
; The 12F675 has 128 bytes of non-volatile EEPROM, starting at address 0x2100
; 
;------------------------------------------------------------------------------

DATAEE    CODE  0x2100
    DE    "MCHP"          ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3

;------------------------------------------------------------------------------
; OSCILLATOR CALIBRATION VALUE
;------------------------------------------------------------------------------

OSC       CODE    0x03FF

; Internal RC calibration value is placed at location 0x3FF by Microchip as
; a 0xADDLW K instruction, where the K is a literal value to be loaded into 
; the OSCCAL register.  

;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------

RESET_VECTOR  CODE    0x0000  ; processor reset vector
        GOTO    START         ; go to beginning of program

;------------------------------------------------------------------------------
; INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------

INT_VECTOR    CODE    0x0004  ; interrupt vector location
        MOVWF   W_TEMP        ; save off current W register contents
        MOVF    STATUS,w      ; move status register into W register
        MOVWF   STATUS_TEMP   ; save off contents of STATUS register

; isr code can go here or be located as a call subroutine elsewhere

        MOVF    STATUS_TEMP,w ; retrieve copy of STATUS register
        MOVWF   STATUS        ; restore pre-isr STATUS register contents
        SWAPF   W_TEMP,f
        SWAPF   W_TEMP,w      ; restore pre-isr W register contents
        RETFIE                ; return from interrupt

;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------

MAIN_PROG     CODE

START

;------------------------------------------------------------------------------
; OSCCAL RESTORE (not required if internal OSC is not used)
;------------------------------------------------------------------------------

        errorlevel -302
        BSF     STATUS,RP0    ; set file register bank to 1 
        CALL    0x3FF         ; retrieve factory calibration value
        MOVWF   OSCCAL        ; update register with factory cal value 
        BCF     STATUS,RP0    ; set file register bank to 0
        errorlevel +302

;------------------------------------------------------------------------------
; PLACE USER PROGRAM HERE
;------------------------------------------------------------------------------

		banksel	cmcon
		movlw	h'7'
		movwf	cmcon			;stäng av komperatorer

		banksel	ansel
		clrf	ansel			;stäng av ADC

		banksel	trisio
		clrf	trisio			;alla pinnar utgångar

		banksel	GPIO
		clrf	GPIO			;alla pinnar låga



MAIN_VAR	UDATA_SHR
d1			RES	1
d2			RES 2

MAIN_CODE	CODE

		
loop
		incfsz	d1
		goto	loop
		incfsz	d2
		goto	loop

		comf	GPIO			;Blinka GPIO
		goto	loop

osram-kod:

Kod: Markera allt

;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------

     LIST      P=12F675              ; list directive to define processor
     #INCLUDE <P12F675.INC>          ; processor specific variable definitions

;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the 
; .asm file. The lables following the directive are located in the respective 
; .inc file.  See the data sheet for additional information on configuration 
; word settings.
;
;------------------------------------------------------------------------------

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 

;------------------------------------------------------------------------------
; VARIABLE DEFINITIONS
;------------------------------------------------------------------------------


    #define     SCDQ5542Q_LOAD    GPIO, GP0
    #define     SCDQ5542Q_SDATA   GPIO, GP1
    #define     SCDQ5542Q_SDCLK   GPIO, GP2


;------------------------------------------------------------------------------
; EEPROM INITIALIZATION
;
; The 12F675 has 128 bytes of non-volatile EEPROM, starting at address 0x2100
; 
;------------------------------------------------------------------------------

DATAEE    CODE  0x2100
    DE    "MCHP"          ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3

;------------------------------------------------------------------------------
; OSCILLATOR CALIBRATION VALUE
;------------------------------------------------------------------------------

OSC       CODE    0x03FF

; Internal RC calibration value is placed at location 0x3FF by Microchip as
; a 0xADDLW K instruction, where the K is a literal value to be loaded into 
; the OSCCAL register.  

;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------

RESET_VECTOR  CODE    0x0000  ; processor reset vector
        GOTO    START         ; go to beginning of program

;------------------------------------------------------------------------------
; INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------

INT_VAR     UDATA_SHR   0x20   
W_TEMP      RES     1             ; variable used for context saving 
STATUS_TEMP RES     1             ; variable used for context saving




INT_VECTOR    CODE    0x0004  ; interrupt vector location
        MOVWF   W_TEMP        ; save off current W register contents
        MOVF    STATUS,w      ; move status register into W register
        MOVWF   STATUS_TEMP   ; save off contents of STATUS register

; isr code can go here or be located as a call subroutine elsewhere

        MOVF    STATUS_TEMP,w ; retrieve copy of STATUS register
        MOVWF   STATUS        ; restore pre-isr STATUS register contents
        SWAPF   W_TEMP,f
        SWAPF   W_TEMP,w      ; restore pre-isr W register contents
        RETFIE                ; return from interrupt

;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------

MAIN_PROG     CODE

START

;------------------------------------------------------------------------------
; OSCCAL RESTORE (not required if internal OSC is not used)
;------------------------------------------------------------------------------

        errorlevel -302
        BSF     STATUS,RP0    ; set file register bank to 1 
        CALL    0x3FF         ; retrieve factory calibration value
        MOVWF   OSCCAL        ; update register with factory cal value 
        BCF     STATUS,RP0    ; set file register bank to 0
        errorlevel +302

;------------------------------------------------------------------------------
; PLACE USER PROGRAM HERE
;------------------------------------------------------------------------------

		banksel	cmcon
		movlw	h'7'
		movwf	cmcon			;stäng av komperatorer

		banksel	ansel
		clrf	ansel			;stäng av ADC

		banksel	trisio
		clrf	trisio			;alla pinnar utgångar

		banksel	GPIO
	


;
; Så då var grundinställningen av processorn klar...
;
; Ge displayen lite tid att starta upp efter power-on.
        call        delay_1s
;
; Se till att WR-pinnen är i "rätt" läge från början.
        bcf         SCDQ5542Q_SDCLK
        bsf         SCDQ5542Q_LOAD
;
; Ladda W med lite olika data och anropa rutinen för att
; skifta ut dom till dipslayen...
;
        movlw   b'11000000'             ; clear display
        call    SCDQ5542Q_write_char
        movlw   b'11110100'             ; brightnes 20%
        call    SCDQ5542Q_write_char
;
        movlw   b'10100011'             ; char 3
        call    SCDQ5542Q_write_char
        movlw   b'00010001'             ; Data för "H"
        call    SCDQ5542Q_write_char
        movlw   b'00110001'
        call    SCDQ5542Q_write_char
        movlw   b'01011111'
        call    SCDQ5542Q_write_char
        movlw   b'01110001'
        call    SCDQ5542Q_write_char
        movlw   b'10010001'
        call    SCDQ5542Q_write_char
;
        movlw   b'10100010'             ; char 2
        call    SCDQ5542Q_write_char
        movlw   b'00011111'             ; Data för "E"
        call    SCDQ5542Q_write_char
        movlw   b'00100001'
        call    SCDQ5542Q_write_char
        movlw   b'01011111'
        call    SCDQ5542Q_write_char
        movlw   b'01100001'
        call    SCDQ5542Q_write_char
        movlw   b'10011111'
        call    SCDQ5542Q_write_char
;
        movlw   b'10100001'             ; char 1
        call    SCDQ5542Q_write_char
        movlw   b'00000110'             ; Data för "J"
        call    SCDQ5542Q_write_char
        movlw   b'00101001'
        call    SCDQ5542Q_write_char
        movlw   b'01010000'
        call    SCDQ5542Q_write_char
        movlw   b'01110000'
        call    SCDQ5542Q_write_char
        movlw   b'10011111'
        call    SCDQ5542Q_write_char
;
        movlw   b'10100000'             ; char 0
        call    SCDQ5542Q_write_char
        movlw   b'00000100'             ; Data för "!"
        call    SCDQ5542Q_write_char
        movlw   b'00100000'
        call    SCDQ5542Q_write_char
        movlw   b'01000100'
        call    SCDQ5542Q_write_char
        movlw   b'01100100'
        call    SCDQ5542Q_write_char
        movlw   b'10000100'
        call    SCDQ5542Q_write_char
;
;
loop    goto loop                       ; Gör ingenting mer....
;
;               
;*********************************************************************
;*********************************************************************
; Subrutin för SCDQ5542Q
;
; Två temp variabler som används av rutinen.
; Lägger dom i "shared memory" så slipper vi banksel...
; SCDQ5542Q_CHAR håller byten som ska ut medan den
; skiftas, SCDQ5542Q_TMP är en bit-räknare...
;
SCDQ5542Q_VARS    UDATA_SHR             ; Starta ny data-section.
SCDQ5542Q_TMP     RES 1                 ; Position på displayen.
SCDQ5542Q_CHAR    RES 1                 ; Tecken som ska skrivas.
;
; Slut på variabler, här kommer koden...
;
SCDQ5542Q_CODE        CODE              ; Starta ny code-section.
;
; Rutin för att skriva ett tecken på displayen.
; Anropas av "SCDQ5542Q_out" macrot.
; Rutinen ska anropas med tecknet som ska skickas i W registret.
;
SCDQ5542Q_write_char
;
        movwf       SCDQ5542Q_CHAR      ; Spara W.
        movlw       h'08'               ; Antal bitar i en byte
        movwf       SCDQ5542Q_TMP       ; till "bit-räknaren"...
;
        bcf         SCDQ5542Q_LOAD      ; Starta överföring
        bcf         status, c           ; Se till att C är "nollad"
;
next_bit
        rrf         SCDQ5542Q_CHAR, f   ; Skifta en bit till C-flaggan
        btfss       status, c           ; Var den "1" ?
        goto        send_low            ; Nej, skicka en nolla...
        bsf         SCDQ5542Q_SDATA     ; Ja, skicka en etta...
        goto        clock
send_low
        bcf         SCDQ5542Q_SDATA
clock
        nop
        bsf         SCDQ5542Q_SDCLK     ; "Klocka" in biten på SDATA
        nop
        bcf         SCDQ5542Q_SDCLK     ; till displayen...
        nop
        decfsz      SCDQ5542Q_TMP, f    ; Alla bitar skickade ?
        goto        next_bit            ; Nej, kör ett varv till...
;
        nop
        bsf         SCDQ5542Q_LOAD      ; Avsluta överföringen genom att
        nop                             ; sätta LOAD pinnen hög igen.
        nop
;
        return
;       
;**********************************************************************
;**********************************************************************
; Diverse delay rutiner.
; Alla delay rutiner generade med kodgeneratorn här :
; http://www.piclist.com/techref/piclist/codegen/delay.htm
; OBS generatade för 4 Mhz processorhastighet.
;
DLY_VAR      UDATA_SHR
d1           RES 1
d2           RES 1
d3           RES 1
;
;
DLY_CODE        CODE
;
delay_1s
 movlw 0x08
 movwf d1
 movlw 0x2F
 movwf d2
 movlw 0x03
 movwf d3
Delay_1s_0
 decfsz d1, f
 goto $+2
 decfsz d2, f
 goto $+2
 decfsz d3, f
 goto Delay_1s_0
 goto $+1
 nop
    return
;
;**********************************************************************
;**********************************************************************
    end
Ledkoden fungerade (leden blinkade) och sen laddade jag osram-koden. Koden fungerade inte (fick inte ut det jag ville på displayen) så jag försökte med blinkaled-koden igen, men då gick den inte att flasha.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av vfr »

Jag tror att Sodjan är ute efter vilken variant av blinka-LED du körde. Alltså med avseende på intern/extern MCLR och intern/extern oscillator. Det finns olika varianter upplagda på hemsidan. Att PIC:en inte går att flasha om utan extra hjälpmedel brukar bli efter programmering med intern reset. PIC:en får då fel fel ordning på signalerna vid övergång till programmeringsläge.

Nu vet jag inte om det var det du gjorde, men ett allmänt råd. Undvik intern MCLR om du inte absolut måste ha det! Saker blir mycket enklare då. :)

Edit: Det låter mer på din beskrivning som att ditt program (osramkoden) kört med intern MCLR så som du beskriver det. Eller så är det något helt annat som är felet.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av sodjan »

> Ledkoden fungerade...

Även flera omprogrammeringar efter varandra utan problem?
(Jag frågade förrut men ser inte att det var något tydligt svar på det).

Om man har något i koden som gör att det strular med omprogrammeringar
så fungerar det oftast OK *första* gången (innan koden finns i kretsen).
Därför är det viktigt att veta om ledkoden fungerade att programmera
om flera gånger...
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av Bosen »

eftersom blinkaled-koden fungerade så testade jag ju av förklarliga skäl inte att programmera om den koden några fler gånger utan körde osramkoden. Det va efter det som det inte fungerade!

EDIT:
Alltså:
1. blinkaled.hex -->fungerar att flasha kretsen --> koden fungarar som den ska!
2. osram.hex --> fungerar att flasha kretsen --> koden fungerar inte som jag har tänkt mig
3. blinkaled.hex --> fungerar inte att flasha kretsen
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av sodjan »

Det hade varit bra att flasha om ledkoden 4-5 gånger för att se att
allt fungerade stabilt och repeterbart.

> ...utan körde osramkoden.

Och det gick alltså att flasha helt utan problem *första* gången ?
Även efter att ledkoden var i kretsen ? Men sedan gick det aldrig att
flasha om med osramkoden (eller med ledkoden) igen ?

Det går ju ganska snabbt att slänga upp en 675'a och testa.
Om jag hinner i morgon så provar jag med de koder som du har
postas här i tråden.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av Bosen »

Det gick utan problem att flasha första gången, även när led-koden fanns i kretsen. Men sedan gick det ej att flasha med någon av koderna.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av sodjan »

OK, som du ser så är tydlighet A och O här... :-) :-)

Som jag tolkar det nu så är det något med "osram-koden".
Ledkoden går att flasha om flera gånger utan problem.
Osramkoden går att flasha *en* gång, sedan är 675'an "låst".
Är du helt säker på att den HEX fil du använder faktiskt motsvarar
den källkod du har postas här ? Ibland dribblar man bort sig bland
alla filer... :-)

Just nu har jag något skumt fel på MPLAB (8.30), håller på att
installera om. Går det bra så kollar jag lite...
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av v-g »

Jag hade ett liknande fel då var det dags att uippgradera WISP och XWISP. Men detta verkar ju vara lite nyare versioner så jag vet inte om det kan vara nåt liknande.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Wisp648 kan ej längre identifiera 16F628A

Inlägg av sodjan »

OK, jag har byggt båda koderna i MPLAB (8.30) utan större problem.
Ledkoden saknade "end" och osramkoden hade en massa instruktioner
i pos 1 (i delay rutinerna). Fick du inte en massa varningar om det ??
Jag tror inte att det påverkar resultatet, men i alla fall...

> Jag hade ett liknande fel då var det dags att uippgradera WISP och XWISP.

Sant, men det "känns" inte som att det har med det att göra.
Jag ser ett par orsaker.
- Flashar med fel HEX fil som har fel CONFIG inställningar.
- Något med spänningsmatningen som inte är OK.
- Något annat med uppkopplingen...

Men visst, vid "konstiga" fel så är det ju en standard test att alltid
kolla med senaste versionerna.
Skriv svar