Behöver hjälp med PIC16F882 [Löst]

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Fredde
Inlägg: 20
Blev medlem: 5 december 2003, 21:17:37

Behöver hjälp med PIC16F882 [Löst]

Inlägg av Fredde »

Jag har gjort ett kort med en PIC16F882 som ska användas bl.a. för att styra en LED. Mitt problem är att jag inte kan få mikrokontrollern att exekvera utan att momentant jorda MCLR ingången.
Kortet matas med +12 V, PICen matas med +5 V via en linjär regulator kopplad till +12 V. MCLR är kopplad till +5 V via ett 10k motstånd samt till jord via 100 nF kondensator. PICen använder intern oscillator inställd på 8 MHz.

Jag använder MPLAB ICD 2 som programmerare, med denna ansluten kan jag styra MCLR och på så sätt starta/stoppa mikrokontrollern utan problem (Release from Reset/Hold in Reset från MPLAB IDE). Använder jag inte programmeraren utan bara ansluter matningen till kortet går inte mikrokontrollern igång. Triggar jag MCLR (genom att momentant kortsluta 100 nF kondensatorn) går PICen igång.

Någon som har tips på vad jag har gjort för fel?

EDIT:
Felet i mitt fall (för de som inte orkar läsa hela tråden) var att jag hade aktiverat Low-Voltage (Single-Supply) ICSP Programming (LVP-flaggan satt) samtidigt som jag hade lämnat PGM (RB3) flytande.
Ur datablad kapitel 14.10 Note 4: "RB3 should not be allowed to float if LVP is enabled. An external pull-down device should be used to default the device to normal operating mode. If RB3 floats high, the PIC16F882/883/884/886/887 devices will enter Programming mode.", vilket sannolikt var det som hände för mig.

Tack Marta!
Senast redigerad av Fredde 2 december 2012, 19:52:27, redigerad totalt 2 gånger.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Behöver hjälp med PIC16F882

Inlägg av Icecap »

För långsam stigning av VDD?
Dålig avkoppling?
Fel i koden?

Det finns så mycket du kan göra fel att det är svårt att svara på utan t.ex. lite kort eller ett schema eller liknande.
H.O
Inlägg: 5918
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Behöver hjälp med PIC16F882

Inlägg av H.O »

Min gissning: Skippa 100nF kondingen på MCLR.
Användarvisningsbild
Fredde
Inlägg: 20
Blev medlem: 5 december 2003, 21:17:37

Re: Behöver hjälp med PIC16F882

Inlägg av Fredde »

För långsam stigning av VDD?
Det tror jag inte, jag får samma problem om jag matar +5 V direkt (kopplar förbi regulatorn).
Dålig avkoppling?
Det tror jag inte, 100 nF precis brevid PICens VDD (<3 mm).
Fel i koden?
Mycket möjligt. Se nedan
Det finns så mycket du kan göra fel att det är svårt att svara på utan t.ex. lite kort eller ett schema eller liknande.
Bifogar schema (Hoppas det fungerar)
Min gissning: Skippa 100nF kondingen på MCLR.
Testat att ta bort helt och bytt till en ny, ingen skillnad.

Testmjukvara:

Kod: Markera allt

// Compiler: CCS PIC C Compiler PCM Version 4.071

#include <16F882.h>

#fuses INTRC_IO,NOPROTECT
#fuses NOBROWNOUT, BORV21
#fuses NOWDT
#fuses PUT,NOCPD,NODEBUG
#fuses LVP,NOWRT,NOIESO,NOFCMEN
#fuses MCLR

#use delay(clock=8000000)

#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(E)


// Defines:


#define TRIS_A 0b00000011
#define TRIS_B 0b11000011
#define TRIS_C 0b10000000
#define TRIS_E 0b11111111


// Pin definitions:

#bit INPUT1				= 0x06.0	// RB0
#bit INPUT2 			= 0x06.1	// RB1

#bit SERVO_1_CURRENT	= 0x05.0	// RA0
#bit SERVO_2_CURRENT	= 0x05.1	// RA1

#bit LED_1				= 0x07.0	// RC0
#bit LED_2				= 0x07.1	// RC1
#bit SERVO_1_PWR		= 0x07.2	// RC2
#bit SERVO_2_PWR		= 0x07.3	// RC3
#bit SERVO_1_PULSE		= 0x07.4	// RC4
#bit SERVO_2_PULSE		= 0x07.5	// RC5
#bit UART_TX			= 0x07.6	// RC6
#bit UART_RX			= 0x07.7	// RC7


// Internal bit/byte mapping:

#byte OSCCON 	= 0x8F         /* Oscillator control register */


// Global variables:

long clk_tick = 0;
	

// Interrupt functions:

// Routine to keep a running timer that increments every 10 milli-second
#int_timer2
void isr_timer2(void)
{
	clk_tick++;
}


// Main Loop:

void main() {

	setup_oscillator(OSC_8MHZ);	// Setup internal oscillator to 8 MHz.
	
	set_tris_a(TRIS_A);	// Setup I/O
	set_tris_b(TRIS_B);
	set_tris_c(TRIS_C);
	set_tris_e(TRIS_E);

	setup_timer_2(T2_DIV_BY_16, 250, 5);	// Setup Timer2 for a clock tick of 10 ms
	
	enable_interrupts(INT_TIMER2);							
	enable_interrupts(GLOBAL);
	
	SERVO_1_PWR = 0;	// No power to servo
	SERVO_2_PWR = 0;	// No power to servo
	
	// Infinite loop:
   	while(TRUE)
   	{
		if(clk_tick > 50)
		{	   
			LED_1 = 1;
			LED_2 = 0;
		}
	
		if(clk_tick > 100)
		{
			LED_1 = 0;
			LED_2 = 1;
			clk_tick = 0;
		}

   	}// while(TRUE)
} // main
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Behöver hjälp med PIC16F882

Inlägg av Icecap »

Jag brukar inte ha den iaf. Normalt kopplar jag bara -MCLR till VDD via ett 10k motstånd, sedan får det räcka. Såklart har jag avkoppling av spänningsmatningen osv.

EDIT: Medan jag skrev kom dit svar och jag ser direkt en sak:
void isr_timer2(void)
{
clk_tick++;
}

Var nollar du interrupt-bitten?
Användarvisningsbild
Fredde
Inlägg: 20
Blev medlem: 5 december 2003, 21:17:37

Re: Behöver hjälp med PIC16F882

Inlägg av Fredde »

EDIT: Medan jag skrev kom dit svar och jag ser direkt en sak:
void isr_timer2(void)
{
clk_tick++;
}

Var nollar du interrupt-bitten?
Det gör jag inte, det gör kompilatorn åt mig när jag lämnar interruptfunktionen.

Problemet är att jag måste göra en reset via MCLR vid spänningspåslag för att PICen ska exekvera. Det ska jag inte behöva göra och frågan är vad jag gjort för fel eftersom det behövs.
Vi kan korta ner problemet ytterligare:

Kod: Markera allt

void main() {

	setup_oscillator(OSC_8MHZ);	// Setup internal oscillator to 8 MHz.
	
	set_tris_a(TRIS_A);	// Setup I/O
	set_tris_b(TRIS_B);
	set_tris_c(TRIS_C);
	set_tris_e(TRIS_E);
	
	LED_1 = 1;	// Tänd LED #1.
Triggar jag MCLR genom att momentant kortsluta 100 nF kondensatorn kopplad till MCLR, alternativt via ICD2->"Release from Reset" går PICen igång, jag kommer till sista raden i kodsnutten ovan och lysdioden tänds. Kopplar jag bara in spänningen så kommer jag inte till den raden.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Behöver hjälp med PIC16F882

Inlägg av Icecap »

Testa först att ta bort 100nF på -MCLR.
Användarvisningsbild
Fredde
Inlägg: 20
Blev medlem: 5 december 2003, 21:17:37

Re: Behöver hjälp med PIC16F882

Inlägg av Fredde »

Har tagit bort den helt och bytt till en ny, ingen skillnad.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Behöver hjälp med PIC16F882

Inlägg av Icecap »

Menar du att du har bytt den eller att du har testat utan?
Användarvisningsbild
Fredde
Inlägg: 20
Blev medlem: 5 december 2003, 21:17:37

Re: Behöver hjälp med PIC16F882

Inlägg av Fredde »

Jag har provat utan och provat byta till en ny. Ingen skillnad.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7476
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Behöver hjälp med PIC16F882

Inlägg av Marta »

Det ser ut som att Du aktiverar LVP och har PGM-pinnen flytande. Detta kan ge upphov till oförklarliga magiska fenomen om det vill sig illa. Prova att stänga av LVP och se om det gör skillnad, eller se till att PGM-pinnen hålls till logisk nolla med en pull-down.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Behöver hjälp med PIC16F882

Inlägg av jesse »

Testa att aktivera brown-out övervakning om det finns.
Användarvisningsbild
Fredde
Inlägg: 20
Blev medlem: 5 december 2003, 21:17:37

Re: Behöver hjälp med PIC16F882

Inlägg av Fredde »

Marta skrev:Det ser ut som att Du aktiverar LVP och har PGM-pinnen flytande. Detta kan ge upphov till oförklarliga magiska fenomen om det vill sig illa. Prova att stänga av LVP och se om det gör skillnad, eller se till att PGM-pinnen hålls till logisk nolla med en pull-down.
Provade att stänga av LVP och det löste problemet, nu fungerar den biten som det ska. Man lär sig något nytt varje dag, tusen tack för snabb hjälp! :tumupp:
(Har inte provat att ha LVP satt och hålla PGM låg)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: [Löst] Behöver hjälp med PIC16F882

Inlägg av sodjan »

Vad betyder [Löst] i rubriken ???
Skriv svar