
Hade programmerat en PIC12F675 i MikroBasic och "tankat över" till PIC-kretsen. Ändrade lite och tankade över igen. Höll på så 4-5 gånger. Allt fungerade som det skulle. Sedan kodade jag så att 3st lysdioder visade var i programmet den var. Lysdioderna var kopplade på GPIO0 - 2.
Flyttade över hex-filen från datorn till datorn som är kopplad till Wisp-programmeraren och knappade in samma rad som tidigare: xwisp2w go flakts~1. Resultat?
Kod: Markera allt
C:\XWISP2170\12F675>xwisp2w go flakts~1
XWisp2 version 1.6.01 (Aug 14 2005, Open Watcom C 1.30)
File FLAKTS~1.Hex loaded and is Intel Hex format conforming
Programmer Wisp628, firmware version 1.09
Target not found in configuration table
Target not auto-detected, please specify on commandline!
XWisp2 failed after 1.86 seconds, rc 23!
Jag har inte ens rört en sladd från gångerna då det fungerat.
Testade med en annan (likadan) PIC-krets, rensade labbplattan och kopplade om igen (på ett annat ställe). Har startat om labbagget flera gånger, mätt spänning, bytt avkopplings/"filter"-kondensatorer. Ingen skillnad alls. Det blir samma meddelande som ovan ändå.
Vad kan ha hänt?
Det enda som är kopplat till PIC-kretsen (förutom MCLR-motstånd) var från början 1st lysdiod med 220-ohms motstånd. Sedan kopplade jag in 2st motstånd och lysdioder till. Det fungerade fortfarande då. Sedan ändrade jag lite i koden (bara så att lysdioderna skulle tändas i början och slutet av koden) och sedan dess har jag bara fått felmeddelandet som visas ovan.
Det fungerar inte heller om jag plockar bort lysdioder och motstånd.
**EDIT**
Testade med en 3e PIC-krets (av samma sort) med bara programmeraren och MCLR-motstånd. Då fungerar det.
Det verkar som om något grillade den förra PIC-kretsen. Men vad? Den andra och tredje PIC'en var oanvänd.
GPIO0 - 2 (GP0 - GP2) var satta som utgångar. Till dessa hade jag som sagt kopplat 220ohms-motstånd och lysdioder ner till jord. GPIO0 och GPIO1 "extraknäcker" även som ICSPDAT och ICSPCLK för programmeraren, men det kan väl inte ha ställt till något?
Vill ju inte att detta händer igen....
Koden:
Kod: Markera allt
'INTRC_OSC_NOCLKOUT ska vara satt i Project -> Edit -> Device Flags.
'GPIO.0 = LED 0 visar bit0
'GPIO.1 = LED 1 visar bit1
'GPIO.2 = LED 2 visar bit2
'GPIO.4 = Från TempKoll (Analog in. Det blir AN3)
'GPIO.5 = PWM ut
symbol LED0 = GPIO.0 ' Visar bit0
symbol LED1 = GPIO.1 ' Visar bit1
symbol LED2 = GPIO.2 ' Visar bit2
dim ntc_lo as byte ' Låga delen av NTC-värdet
dim ntc_hi as byte ' Höga delen av NTC-värdet
dim ntc as word 'Hela NTC-värdet (10bit används) Förväntar spänning mellan 2.3V och 4.4V
sub procedure Init
TRISIO = %00011000 ' Utgångar överallt, förutom GP4 (AN3) som är ingång. GP3 är alltid ingång.
IOC = %00000000 ' Interrupt on change - Disabled
VRCON = 0 ' VoltRef (Comparator) off
T1CON.TMR1ON = 0 ' Stoppar timern
'AD-omvandling initiering
ADCON0.ADFM = 1 ' Högerjusterad
ADCON0.VCFG = 0 ' VDD som referens
ADCON0.CHS1 = 1 ' AN3 som ingång
ADCON0.CHS0 = 1 ' AN3 som ingång
ADCON0.1 = 0' GO/DONE - Sätt den här hög för att starta en AD-omvandling
ADCON0.ADON = 1 ' AD-modulen är igång
ANSEL.ADCS2 = 1 ' FOSC/64 (blir 62.5kHz samplingfrekvens)
ANSEL.ADCS1 = 1 ' FOSC/64 (blir 62.5kHz samplingfrekvens)
ANSEL.ADCS0 = 0 ' FOSC/64 (blir 62.5kHz samplingfrekvens)
ANSEL.ANS3 = 1 ' AN3 som analog in
ANSEL.ANS2 = 0 ' Digital I/O
ANSEL.ANS1 = 0 ' Digital I/O
ANSEL.ANS0 = 0 ' Digital I/O
'Interrupt initiering
INTCON.GIE = 1 ' Global interrupt enable
INTCON.PEIE = 1 ' Peripheral Interrupt Enable (AD t.ex)
PIE1.ADIE = 1 ' AD-omvandlare ger interrupt
PIR1.ADIF = 0 ' Clearat interruptet
ntc = 0 ' Nollställer NTC-värdet
LED0 = 0
LED1 = 0
LED2 = 0
end sub
sub procedure ntc_reader
'Ett interrupt har hänt:
if TestBit(PIR1, ADIF) = 1 then
ClearBit(PIR1, ADIF)
'Läsa av AD-omvandlaren:
ntc_lo = ADRESL
ntc_hi = ADRESH
ntc = (word(ntc_hi << 8)) OR ntc_lo
end if
SetBit(ADCON0, ADON) 'Gör klart för en ny omvandling
SetBit(ADCON0, 1) 'GO/DONE
end sub
main:
init
while true
LED2 = 1
LED1 = 1
LED0 = 1
delay_ms(500)
LED2 = 0
LED1 = 0
LED0 = 0
delay_ms(500)
wend
end.

Sedan en fråga: LED1 (kopplad till GP1) lyser aldrig. Jag har med andra ord missat något i koden, men vad? Jag är 10000% säker på att jag kopplat rätt. En lysdiod är ju inte direkt svår att koppla in..
