Hög tröskel att komma igång med PIC igen efter ett antal år

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Hög tröskel att komma igång med PIC igen efter ett antal år

Inlägg av Walle »

Jo, så är det ju. Har inte pysslat med µCUer sen första hälften i förra årtiondet. Nu ska jag dessutom försöka komma igång med C-programmering, har tidigare nästan enbart kört asm när jag programmerat PIC. Dock har jag programmerat C för PC en hel del, så syntaxen kan jag (även om jag säkert är lite ringrostig eftersom även det var typ 10 år sedan sist).

Sitter här med en PICKit 1 och försöker att få till något körbart för att så att säga ha en grund att börja bygga på. Har laddat ner senaste versionen av MPLAB med HiTech PICC-kompilatorn. Försöker nu kompilera diverse olika gamla tutorial-projekt som kom med när jag köpte PICKitet, men det vill sig inte riktigt, för det verkar som att include-filerna har ändrats en del sen sist. Får bara upp en bunt med "unidentified symbol".
Error [800] test.as; 45. undefined symbol "PWRTEN"
Error [800] test.as; 45. undefined symbol "UNPROTECT"
Error [800] test.as; 45. undefined symbol "BORDIS"
Error [800] test.as; 45. undefined symbol "MCLRDIS"
Error [800] test.as; 45. undefined symbol "WDTEN"
Error [800] test.as; 45. undefined symbol "INTIO"
Kan man bara få något att kompilera så har man ju så att säga en bra grund att bygga vidare på sen, men när man inte ens får skiten att kompilera så är det tungt att komma vidare.

Det är inte så att någon råkar sitta på ett simpelt projekt (typ ramverk) som går att kompilera i MPLAB med HiTech PICC? Jag har ett antal olika PICar att programmera, just nu sitter det en 12F675 i programmeraren, men jag har även: 16F684, 12F629, 12F683 samt 16F630 som går att programmera i PICKit 1 (samt ett antal andra som kräver bättre programmerare).

Det finns ju mänger med olika tutorials på nätet, men de tenderar att inrikta sig på hur man gör specifika uppgifter (typ debouncing, blinka led, timers, o.s.v, men det är inte det jag behöver. Jag behöver bara få något att kompilera en gång, så jag kan komma igång.

Givetvis skulle jag kunna köra asm, då är det bara att sitta med databladet och göra all initiering och sen köra igång, men det är inte asm jag är ute efter att programmera nu.

Vore väldigt tacksam! :)
Användarvisningsbild
swesysmgr
Inlägg: 14957
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av swesysmgr »

Jag tror du glömt includefilen med symbolerna, på senare års Hitech är det #include <htc.h>.

Jag tycker MPLab X fungerar jättebra för PIC16/18, stödet för Pickit1 är jag osäker på men man ser tydligt i programmet vilka programmerare som fungerar med vilka kretsar för modernare hårdvara.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av sodjan »

Vad är det mer konkret du gör ???

> men det är inte asm jag är ute efter att programmera nu.

.as är nog en assemblerfil...
Man det kan vara ett mellansteg i en C-kompilering.
Helt omöjligt att säga om du inte förklarar vad du gör.
Användarvisningsbild
swesysmgr
Inlägg: 14957
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av swesysmgr »

Får återta mitt förslag där, stödet för Pickit1 i MPLabX verkar vara obefintligt, jag tror en investering i Pickit 2/3 är effektivaste vägen framåt.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av Walle »

Jag har faktiskt inkluderat htc.h, innan var det pic.h som var inkluderad.

Så här ser källfilerna ut:

state.h:

Kod: Markera allt

#include <htc.h>

__CONFIG(INTIO & WDTEN & MCLRDIS & BORDIS & UNPROTECT & PWRTEN);

// input and output definitions	
#define SW1				GPIO3			// toggle switch
#define TRIS_D0_D1	0b00001111	// TRISIO setting for D0 and D1
#define TRIS_D2_D3	0b00101011	// TRISIO setting for D2 and D3
#define TRIS_D4_D5	0b00011011	// TRISIO setting for D4 and D5
#define TRIS_D6_D7	0b00111001	// TRISIO setting for D6 and D7

//define LED state (what GPIO will equal)

#define D0_ON			0b00010000	// D0 LED
#define D1_ON			0b00100000	// D1 LED
#define D2_ON			0b00010000	// D2 LED
#define D3_ON			0b00000100	// D3 LED
#define D4_ON			0b00100000	// D4 LED
#define D5_ON			0b00000100	// D5 LED
#define D6_ON			0b00000100	// D6 LED
#define D7_ON			0b00000010 	// D7 LED

//Global Variable Declarations
unsigned char STATE_DEBOUNCE;

//Function Prototypes
void Init();
char ButtonPress();
och state.c:

Kod: Markera allt

;Filename:		state.c
;Author:			Reston Condit
;Date:			1/15/03  	
;Version:		1.00
;Description:  	
;	This firmware implements a simple state machine.  There are eight states:
;		STATE1 = D0 LED on
;		STATE2 = D1 LED on
;		STATE3 = D2 LED on
;		STATE4 = D3 LED on
;		STATE5 = D4 LED on
;		STATE6 = D5 LED on
;		STATE7 = D6 LED on
;		STATE8 = D7 LED on
;
;	User's Note: Under Edit -> Properties... -> Tabs set tabs to 3
;******************************************************************************
;Revision History:
;	none
;******************************************************************************

;******************************************************************************
;Instructions On How To Use This Program
;******************************************************************************
;	Press Switch 1 (SW1) on the PICkit(tm) demonstration board to cycle through
;	the eight LED states.
;******************************************************************************
*/

#include "state.h"

//*****************************************************************************
//Main() - Main Routine
//*****************************************************************************
void main()
{
	unsigned char STATE_LED = 0;
	Init();									// call initialize routine
	while(1)
	{
		CLRWDT();
		if (ButtonPress()) {				// if a button press is detected,
			STATE_LED++;					//  increment the LED state variable
		}
		STATE_LED &= 0x07;				// mask state variable
		switch (STATE_LED) {
			case 0:							// STATE0: turn only the D0 LED on
				TRISIO = TRIS_D0_D1;
				GPIO = D0_ON;
				break;
			case 1:							// STATE1: turn only the D1 LED on
				TRISIO = TRIS_D0_D1;
				GPIO = D1_ON;
				break;
			case 2:							// STATE2: turn only the D2 LED on
				TRISIO = TRIS_D2_D3;
				GPIO = D2_ON;
				break;
			case 3:							// STATE3: turn only the D3 LED on
				TRISIO = TRIS_D2_D3;
				GPIO = D3_ON;
				break;
			case 4:							// STATE4: turn only the D4 LED on
				TRISIO = TRIS_D4_D5;
				GPIO = D4_ON;
				break;
			case 5:							// STATE5: turn only the D5 LED on
				TRISIO = TRIS_D4_D5;
				GPIO = D5_ON;
				break;
			case 6:							// STATE6: turn only the D6 LED on
				TRISIO = TRIS_D6_D7;
				GPIO = D6_ON;
				break;
			case 7:							// STATE7: turn only the D7 LED on
				TRISIO = TRIS_D6_D7;
				GPIO = D7_ON;
				break;
		}	
	}
}

//*****************************************************************************
//Functions
//*****************************************************************************

//*****************************************************************************
//Init - Initialization Routine
//*****************************************************************************
void Init()
{

/* Comment out if using simulator, ICD2, or ICE2000
#asm   
	call 	0x3FF					// Load Factory Calibration Value Into OSCCAL
	bsf 	_STATUS,5  			// BANK1
	movwf _OSCCAL	
#endasm
*/
	OPTION_REG = 0b1000001;		// disable weak pullups, 1:64 prescaler on TMR0
									//  (TMR0 will overflow in 10.6ms)
	INTCON = 0;					// disable all interrupts, clear all flags
	GPIO = 0;					// clear all I/O pins
	TRISIO = 0b00111111;		// make all I/O pins inputs
	STATE_DEBOUNCE = 0;		// initialize debounce state machine
	return;
}

//*****************************************************************************
//ButtonPress() - Returns a 1 if a button press is detected and a 0 otherwise.
// This function implements a similar debounce routine as that in Tutorial #1.  
// The only difference is the debouce rountine is implemented as a state 
// machine instead.  
//*****************************************************************************
char ButtonPress()
{
	unsigned char temp = 0;
	switch (STATE_DEBOUNCE) {		// debounce state variable (SV)
		case 0:
			if (!SW1) {					// if switch is pushed increment the SV and
				STATE_DEBOUNCE++;		//  return a one
				temp = 1;
			}
			break;
		case 1:
			if (SW1) {					// if switch is released, initialize Timer0 
				TMR0 = 0;				//  in increment the SV
				T0IF = 0;
				STATE_DEBOUNCE++;		
			}
			break;
		case 2:
			if (T0IF) 					// if Timer0 overflows, reinitialize the 
				STATE_DEBOUNCE = 0;	//  debounce routine
			else if (!SW1)				// if switch is pressed before Timer0 over-
				STATE_DEBOUNCE++;		//  flows then decrement SV
			break;
		default:
			STATE_DEBOUNCE = 1;		// if for some reason the SV is corrupted
											//  goto state 1
	}										
	return (temp);
}

//***************************************************************************
//Interrupt Service Routine - Not implemented
//***************************************************************************
void interrupt Isr()
{
	return;
}
Sodjan: Sorry, jag brukar vara bra på att förklara lite mer vad jag gör, nu tog frustrationen över :)

Jag har alltså startat ett nytt projekt i MPLAB, valt den PIC som sitter i programmeraren (12F675) och sedan lägger jag till .h och .c-filerna för de exempel/tutorials som jag en gång i tiden fick med när jag köpte PICKit 1'an. Någonstans snappade jag upp att det är htc.h som ska inkluderas, och inte pic.h (och jag noterade att pic.h inkluderas i htc.h). Sen försöker jag kompilera genom MPLAB med "Build with compiler for PIC10/12/16 MCUs (lite mode) 9.83". Jag har lagt till sökvägen till HiTech-kompilatorn som installerades automatiskt när jag installerade MPLAB. Då får jag i nuläget följande output:
Build C:\Documents and Settings\Christoffer\Mina dokument\Pic-projekt\test\test for device 12F675
Using driver C:\Program\HI-TECH Software\PICC\9.83\bin\picc.exe

Make: The target "C:\Documents and Settings\Christoffer\Mina dokument\Pic-projekt\test\state.p1" is up to date.
Executing: "C:\Program\HI-TECH Software\PICC\9.83\bin\picc.exe" -otest.cof -mtest.map --summary=default --output=default state.p1 --chip=12F675 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.83
Copyright (C) 2011 Microchip Technology Inc.
(1273) Omniscient Code Generation not available in Lite mode (warning)
Error [800] test.as; 45. undefined symbol "PWRTEN"
Error [800] test.as; 45. undefined symbol "UNPROTECT"
Error [800] test.as; 45. undefined symbol "BORDIS"
Error [800] test.as; 45. undefined symbol "MCLRDIS"
Error [800] test.as; 45. undefined symbol "WDTEN"
Error [800] test.as; 45. undefined symbol "INTIO"

********** Build failed! **********
Projektet heter "test"

Jag inser ju att problemet är att symbolerna inte defineras, men jag är inte klar över vart de ska defineras, i vilken källfil. Jag tror att det beror på att jag använder gamla exempelfiler/tutorialfiler.

PICKit 1 går att välja i listan över programmerare i MPLAB.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av Walle »

swesysmgr skrev:Får återta mitt förslag där, stödet för Pickit1 i MPLabX verkar vara obefintligt, jag tror en investering i Pickit 2/3 är effektivaste vägen framåt.
MPLabX? Jag kanske inte har senaste versionen trots allt, jag laddade ner MPLAB 8.84 (trodde det var senaste, men i ärlighetens namn så läste jag inte så noga). Jag kör det på en gammal dator med windows XP (datorn är förövrigt från 2004 och har 512 MB RAM, går lite slött men borde inte vara några problem).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av sodjan »

Se även : http://www.microchip.com/forums/m606206-print.aspx
vilket är *mycket* likt ditt problem...
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av Walle »

Sodjan, du räddade precis min dag! :)

Från den länkade tråden:
To enable compatibility, make the very first line of your program (before the #include)
#define _LEGACY_HEADERS
It *IS* documented in the release notes, but far too many new users don't look at those . . . .
Och det funkade perfekt, efter att jag hade ändrat tillbaka till "OPTION" från "OPTION_REG" i initieringsfunktionen (jag ändrade det som ett test och glömde att jag hade ändrat det. Dessutom fick jag mig en liten känga, i.o.m. sista raden i citatet ovan :oops:

Nu har jag i alla fall någonstans att börja! :) Nu måste jag bara lära mig att använda rätt headers (och jag antar att jag kan hitta rätt så mycket information om rätt symboler i pic12f675.h i hitecs include-katalog) och motsvarande för mina andra PICar, så jag slipper använda legacy, för det måste ju finnas någon anledning till att de har ändrat headerfilerna.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av Walle »

Haha, höll på att bli tokig nyss. Gjorde några ändringar i koden ovan (nej, jag har inte suttit sedan sist jag postade, har sysslat med annat) som inte fungerade som avsett. Märkligt tyckte jag, då det var väldigt simpla ändringar. Så kommenterade jag ut ändringarna, och då funkade koden ändå inte som den skulle (ingen debounce)! Satt och jämförde med koden jag postade i tidigare inlägg, helt identisk. Till slut laddade jag in den orörda orginalkoden från CD'n, och det funkade ÄNDÅ inte! Bytte till en ny likadan PIC, hjälpte inte. Så knackade jag några gånger på kretskortet med fingret, och helt plötsligt så funkade det som det skulle igen, glappkontakt i kretskortet med andra ord! Just snyggt...blir nog till att investera i en ny (riktig) programmerare för ICSP-programmering. Då kan jag ju också programmera PICar med fler än 14 ben.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av sodjan »

För hobbybruk i dag är nog PICkit2 (och kanske 3) ganska bra val.
PICkit2 "Starter Kit" är fortfarande prisvärt, men även PICkit3 ("naken"
utan labbkort) verkar ha sjunkit i pris. Och kör man i alla fall på egen
hårdvara (labbplatta eller liknande) så behöver man inte labbkortet.
PICkit3 har lite bredare omfång av stödda kretsar. Men det fristående
"PICkit2 Application" verkar ha ett bra stöd utöver de som stöds direkt
från MPLAB's drivrutin.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av Walle »

Tackar för tipsen! Ja, det får nog bli tvåan eller trean. Jag ska jämföra lite priser och så, så får vi se vilken det blir. Känns som det blir smidigt med en ICSP, då jag inte är så jätteförtjust i såna här experimentkort, eller van man nu ska kalla ettan. Speciellt eftersom jag har för avsikt att på sikt försöka utveckla ett par säljbara produkter (det beror ju också lite på vilka volymer man kan tänkas sälja, eftersom det ju kostar en hel del med CE- och E-märkning. I värsta fall får man väl sälja som kit för att komma förbi CE-märkningen :))

Ikväll blir det till att läsa in sig på timers och interrupt, eftersom det kommer behövas till mitt första projekt som förhoppningsvis kommer hjälpa oss enormt mycket på jobbet i vår utveckling av variatorkit till fyrhjulingar.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av sodjan »

Nu så vet jag inte vilken "nivå" dina/era prylar ligger på (och om variator grejen
är samma dina "säljbara produkter"), men när det gäller PIC16 serien, och om
man så att säga börjar från scratch, så finns det ingen anledning att *inte*
köra med de nyare PIC16F1xxx modellerna. De har så mycket fler finnesser
och ofta lägre priser än motsvarande PIC16Fxxx modeller. De ger också
normalt snabbare kod och är smidigare att programmera på flera sätt.
Användarvisningsbild
Glenn
Inlägg: 36752
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av Glenn »

Min kollega skulle på min inrådan köpa en pickit2, men blev övertygad av säljaren att köpa en pickit3 istället, det var väl okej, förutom att den ju verkar sakna den fristående "pickit2" applikationen, HELT värdelöst enligt mej, tills det är fixat så lär jag då aldrig uppgradera, eller ska vi säga nedgradera.. det är ju den jag använder hela tiden och den stöder mycket mer picar än mplab.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av sodjan »

Hm, är det inte så att drivern i MPLAB för PICkit3 i sig stöder de
modeller där man i fallet med PICkit2 måste använda den fristående
applikationen? Om man ändå kör med MPLAB så ger ju den
fristående applikationen inget direkt mervärde i sig.

Annars så kör man "PICkit 3 Stand Alone Programmer App V1.0".
H.O
Inlägg: 5919
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Hög tröskel att komma igång med PIC igen efter ett antal

Inlägg av H.O »

Ja visst finns det en fristående applikation att köra med om man inte vill köra "innifrån" MPLAB.... Finns att tanka hem från Microchip, här.
Det går även utmärkt att köra med CLI så den (PK3) går att köra direkt från andra IDE'er än MPLAB. Jag vet att PK3 har fått mycket kritik men jag förstår faktiskt inte varför, jag tycker den funkar utmärkt.
Skriv svar