Börjat skriva C, problem med __CONFIG (Hi-tech C - PIC)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Börjat skriva C, problem med __CONFIG (Hi-tech C - PIC)

Inlägg av brauer »

Har tagit upp lite programmerande efter långt uppehåll och passade på att gå över till C.
Dumt nog har jag bytt till Mac så det blev en lång startsträcka bara för att få min Wisp628 att prata med macbooken :shock:

Nåväl, till problemet! :)
Har provat Voti's b628i-1.hex och allting fungerar, men när jag skriver min egen kod så vill Wispen inte skriva till picen (16F628a).
Någon som har en aning om vad jag gör för fel?

Info om min miljö:
* os x 10.6.8
* Mplab X beta 7.02
* Hi-tech C compiler


main.c

Kod: Markera allt

#include <pic16f628a.h>
#include <htc.h>

#use delay(clock=4000000)
#define _XTAL_FREQ 4000000

__CONFIG(WDTE_ON & CP_OFF & MCLRE_ON & FOSC_INTOSCCLK & BOREN_ON);

void main()
{
    TRISB = 1;
    while(1) 
    {
        RB1 = 1;
        __delay_ms(100);
        RB1 = 0;
        __delay_ms(100);
    }
}
Terminalen

Kod: Markera allt

 Jonas$ python xwisp.py port /dev/tty.usbserial go blink.hex
XWisp 1.39, command line mode
hardware: Wisp628 1.09 (fast) 
target: 16f628, device code 07C0 revision bits 00
                                                            
An exception ocurred which was not explicitly handled by the XWisp application. The traceback below might give some information about the exception.

Traceback (most recent call last):
  File "xwisp.py", line 6738, in Interpret
    self.Execute( Command )
  File "xwisp.py", line 6716, in Execute
    exec( 'self.CMD_' + Command.upper() + '()' )
  File "<string>", line 1, in <module>
  File "xwisp.py", line 5946, in CMD_GO
    Regions = self.Selection )
  File "xwisp.py", line 5437, in Write_Verify
    self.Write( Image, [ Region ], Warn = ( Region == Region_Fuses ) )
  File "xwisp.py", line 5338, in Write
    self.Type.Region[ Region ], A, Image.Get( A, 0x3FFF ))
  File "xwisp.py", line 5158, in Put
    self.Bus.Send_Expect(( '%04X' % Data ) + 'w' )
  File "xwisp.py", line 1117, in Send_Expect
    "send='" + String + "' received='" + Reply + "'"
WBus_Protocol_Error: send='FFFDw' received='FFFD?'

ERROR
Har även provat med "tom" main.c, dvs tom funktion och inga inställningar ovan main().
Då får jag följande:

Kod: Markera allt

 python xwisp.py port /dev/tty.usbserial go blink.hex
XWisp 1.39, command line mode
hardware: Wisp628 1.09 (fast) 
target: 16f628, device code 07C0 revision bits 00
warning: no fuses information in image                      
OK 
Senast redigerad av blueint 6 september 2011, 00:18:19, redigerad totalt 1 gång.
Anledning: vad det rör sig om
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat skriva C, problem med __CONFIG

Inlägg av sodjan »

Du bör inte hemlighålla dina kommandon till XWisp.
Är det en 628, inte 628A som är vanligare ?

Det jag kan tänka mig är att du bygger koden för en
annan processor än den du faktiskt använder.
Användarvisningsbild
hcb
Moderator
Inlägg: 5980
Blev medlem: 23 februari 2007, 21:44:50
Skype: hcbecker
Ort: Lystrup / Uppsala
Kontakt:

Re: Börjat skriva C, problem med __CONFIG

Inlägg av hcb »

Funkar det att flasha om PICen med Votis hex-fil? Jag har för mig att "i" i namnen betyder intern MCLR vilket kan ställa till det en aning.
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: Börjat skriva C, problem med __CONFIG

Inlägg av LHelge »

För att få med config-värdena så behöver du köra export på hex-filen i MPLAB också, räcker inte att bara kompilera.
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Re: Börjat skriva C, problem med __CONFIG

Inlägg av brauer »

hcb: Ja, det är inga problem att flasha om med votis fil. Jag kan köra den flera gånger, eller prova med min egen kod mellan varven. Det är därför jag misstänker att jag har något "mindre lyckat" i min egen kod.

Sodjan: Hur menar du hemlighålla? Om du syftar på kommandot till Xwisp så står det i kodblocket ovan "python xwisp.py port /dev/tty.usbserial go blink.hex". Eller menar du att jag specifikt ska ange target?
Ang 628 eller 628a så var det faktiskt en 628 jag provade på. :doh: Tyvärr får jag samma resultat när jag provar med en 628a, utan att ändra i koden. Symptomen är identiska på 628a.

Om man läser i felmeddelandet från xwisp så står det "Warn = ( Region == Region_Fuses)". Det känns ju som att det kan vara där problemet ligger.
Jag är inte alls bekant med att programmera i C. Har jag något syntaxfel i __config? Jag får inga felmeddelanden när jag kompilerar men en varning på "(1273) Omniscient Code Generation not available in Lite mode". Känns dock inte så relevant då det har med kodoptimering att göra, om jag förstått det hela rätt.

LHelge: Det kan säkert vara så. Jag kör ju mplab X, och efter lite googling insåg jag att just exportfunktionen inte är implementerad än. Dock så genereras hex-filen när man bygger projektet.

Jag har fördmodligen gjort det onödigt krångligt för mig genom att köra mplab X, som dessutom är i betafas. Men det hade varit skönt att kunna köra det på macen, och inte ha en separat installation bara för detta. :?

Bifogar deklarering av configvariabler från headerfilen, om det kan var till någon hjälp.

Kod: Markera allt

// Config Register: CONFIG
#define CONFIG               0x2007
// Oscillator Selection bits
// RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN
#define FOSC_EXTRCCLK        0xFFFF
// RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN
#define FOSC_EXTRCIO         0xFFFE
// INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
#define FOSC_INTOSCCLK       0xFFFD
// INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
#define FOSC_INTOSCIO        0xFFFC
// EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
#define FOSC_ECIO            0xFFEF
// HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
#define FOSC_HS              0xFFEE
// XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
#define FOSC_XT              0xFFED
// LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
#define FOSC_LP              0xFFEC
// Watchdog Timer Enable bit
// WDT enabled
#define WDTE_ON              0xFFFF
// WDT disabled
#define WDTE_OFF             0xFFFB
// Power-up Timer Enable bit
// PWRT disabled
#define PWRTE_OFF            0xFFFF
// PWRT enabled
#define PWRTE_ON             0xFFF7
// RA5/MCLR/VPP Pin Function Select bit
// RA5/MCLR/VPP pin function is MCLR
#define MCLRE_ON             0xFFFF
// RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD
#define MCLRE_OFF            0xFFDF
// Brown-out Detect Enable bit
// BOD enabled
#define BOREN_ON             0xFFFF
// BOD disabled
#define BOREN_OFF            0xFFBF
// Low-Voltage Programming Enable bit
// RB4/PGM pin has PGM function, low-voltage programming enabled
#define LVP_ON               0xFFFF
// RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming
#define LVP_OFF              0xFF7F
// Data EE Memory Code Protection bit
// Data memory code protection off
#define CPD_OFF              0xFFFF
// Data memory code-protected
#define CPD_ON               0xFEFF
// Flash Program Memory Code Protection bit
// Code protection off
#define CP_OFF               0xFFFF
// 0000h to 07FFh code-protected
#define CP_ON                0xDFFF
Output från kompileringen:

Kod: Markera allt

make -f nbproject/Makefile-default.mk SUBPROJECTS= .clean-conf
make[1]: Entering directory `/Users/Jonas/MPLABXProjects/blink-a-led.X'
rm -f  -r build/default
rm -f  -r dist/default
make[1]: Leaving directory `/Users/Jonas/MPLABXProjects/blink-a-led.X'

CLEAN SUCCESSFUL (total time: 274ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `/Users/Jonas/MPLABXProjects/blink-a-led.X'
make  -f nbproject/Makefile-default.mk dist/default/production/blink-a-led.X.production.cof
make[2]: Entering directory `/Users/Jonas/MPLABXProjects/blink-a-led.X'
mkdir -p build/default/production 
/Applications/HI-TECH/picc/9.82/bin/picc --pass1 main.c  -q --chip=16F628A -P  --outdir=build/default/production -N31 --warn=9 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9  --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s"
/Applications/HI-TECH/picc/9.82/bin/picc --scandep --pass1 main.c  -q --chip=16F628A -P  --outdir=build/default/production -N31 --warn=9 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9  --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s"
echo "build/default/production/main.p1:\\" > build/default/production/main.p1.d
mkdir -p dist/default/production 
/Applications/HI-TECH/picc/9.82/bin/picc  -odist/default/production/blink-a-led.X.production.cof -mdist/default/production/blink-a-led.X.production.map --summary=default,-psect,-class,+mem,-hex --chip=16F628A -P --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -N31 --warn=9  --double=24 --float=24 --addrqual=ignore --mode=lite --output=default,-inhx032 -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" build/default/production/main.p1  
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode)  V9.82
Copyright (C) 2011 Microchip Technology Inc.
(1273) Omniscient Code Generation not available in Lite mode (warning)

Memory Summary:
    Program space        used    23h (    35) of   800h words   (  1.7%)
    Data space           used     4h (     4) of    E0h bytes   (  1.8%)
    EEPROM space         used     0h (     0) of    80h bytes   (  0.0%)
    Configuration bits   used     1h (     1) of     1h word    (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)


Running this compiler in PRO mode, with Omniscient Code Generation enabled,
produces code which is typically 40% smaller than in Lite mode.
See http://microchip.htsoft.com/portal/pic_pro for more information.

make[2]: Leaving directory `/Users/Jonas/MPLABXProjects/blink-a-led.X'
make[1]: Leaving directory `/Users/Jonas/MPLABXProjects/blink-a-led.X'

BUILD SUCCESSFUL (total time: 1s)
Loading /Users/Jonas/MPLABXProjects/blink-a-led.X/dist/default/production/blink-a-led.X.production.cof...
Loading completed
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat skriva C, problem med __CONFIG

Inlägg av sodjan »

> För att få med config-värdena så behöver du köra export på hex-filen i MPLAB också, räcker inte att bara kompilera.

Skapas inte en komplett HEX fil vid varje "build" ?

> Sodjan: Hur menar du hemlighålla?

Shit, missade det. Glöm hela den frågan...

Jag brukar oftast köa med XWisp2 from http://www.robh.nl.
Då slipper man att göra hela Python installtionen enbart för att köra detta.

Ja, det verkar vara något problem med verifieringen av config efter skrivning.

> WBus_Protocol_Error: send='FFFDw' received='FFFD?'

Det hela ser lite märkligt ut. Spontant så borde båda värderna vara ett
2 bytes vårde med 4 hex siffror. Jag förstår inte var "w" och "?" kommer från...

Men kolla själv i HEX filerna och se om det ser konstigt ut !
Du kan ju jämföra adressen för config bitarna mellan filerna...
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Re: Börjat skriva C, problem med __CONFIG

Inlägg av brauer »

Ok, lite framgång till slut. :)
Jag gjorde som Sodjan sa och jämförde filerna. Lyckades läsa mig till att näst sista raden skulle innehålla configbitarna.
Tog den raden från Votis fil och ersatte i min egen. BINGO!

Nu är bara frågan varför MIN fil blir fel... :humm:
Jag kan ju ha fel, men det känns som att problemet bör ligga i min syntax, eller någon inställning i mplab X. Alternativt att det är en bug i betan.

Votis config

Kod: Markera allt

:02400E00103F61
Min config
__CONFIG(FOSC_INTOSCIO & WDTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF);

Kod: Markera allt

:02400E00DCFFD5
Hur läser man hexkoden?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat skriva C, problem med __CONFIG

Inlägg av sodjan »

> :02400E00DCFFD5

:02 400E 00 DCFF D5

":02" = "byte count".

"400E" = adress. Notera att det är i bytes så eftersom
PIC'en i sig anger sina adresser som 14-bitars ord, så
motsvarar 400E det 2007 som amnges som adress till
Config "ordet" i databladet.

"00" = "data record".

"DCFF" = "data"

"D5" = "checksum".

DCFF = 1101 1100 1111 1111

Ta bort de två första bitarna så kan du matcha resten
mot CONFIG registret i databladet.

En liten notering...
Du bör ange *ALLA* inställningar i ditt CONFIG direktiv.
Bl.a LVP saknas (vilket kan vara problemet). Även andra
saknas som CPD ON/OFF. Så ta som vana att alltid sätta
*alla* CONFIG bitar så som *du* vill ha det.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat skriva C, problem med __CONFIG

Inlägg av sodjan »

> Bl.a LVP saknas (vilket kan vara problemet).

Och där blandade jag ihop denna tråd med den andra tråden med
den spontant omstartande processorn... :-)

Aja, det i alla lägen en bra ide att alltid sätta *alla* config bitar... :-)
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: Börjat skriva C, problem med __CONFIG

Inlägg av LHelge »

sodjan skrev:> För att få med config-värdena så behöver du köra export på hex-filen i MPLAB också, räcker inte att bara kompilera.

Skapas inte en komplett HEX fil vid varje "build" ?
Kan hända att jag har mitt MPLAB felkonfigurerat eller att det bara gäller C30-kompilatorn som jag använder i huvudsak, men när jag gör en build så får jag en hex-fil som innehåller programmet men inga konfig-inställningar. För att få med dem måste jag gå File->Export och kryssa i att jag vill ha med konfig-värden.

Hur det är i MPLAB X vet jag inte, har installerat det men inte testat än.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat skriva C, problem med __CONFIG (Hi-tech C - PIC)

Inlägg av sodjan »

Fast du har CONFIG direktiv i källkoden ?
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: Börjat skriva C, problem med __CONFIG (Hi-tech C - PIC)

Inlägg av LHelge »

Japp!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Börjat skriva C, problem med __CONFIG (Hi-tech C - PIC)

Inlägg av sodjan »

Så det som beskrivs i "7.6.1 Configuration Bits Setup Macros"
i C30 manualen fungerar inte och de kommer inte med i HEX filen ?
Ja, det låter ju lite märkligt.
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: Börjat skriva C, problem med __CONFIG (Hi-tech C - PIC)

Inlägg av LHelge »

Ska jag vara helt ärlig har jag inte grävt speciellt mycket i det. Jag gör så att första gången jag tankar över en mjukvara så exporterar jag config (eller om jag ändrat något) och därefter skiter jag i det. PICkit 2 programmet som jag använder för att föra över hex-filen gnäller lite men det skriver inte över config-bitarna så de gamla finns kvar. Verför det är så vet jag inte, jag har bara konstaterat att det är så.
Skriv svar