får ej igång ADC 18f458 *LÖST*

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
slatte
Inlägg: 420
Blev medlem: 1 april 2008, 16:05:17
Ort: Jönköping

får ej igång ADC 18f458 *LÖST*

Inlägg av slatte »

som titeln säger får jag inte igång ADc på picen vet ej vad jag gör för fel eller har glömt, går det att simulera en Analog ingång i mplab? hur?
det som denna kod ska utföra är om spänningen understiger ca 2.5 v på RA0 så tänds en diod på RC6 (detta kollas i interrupten).
interruptrutinen mm behöver ni inte bry er om den bara blinkar en diod typ(och den fungerar för dioden blinkar :-) ) !
oscillator har jag en kristall på 4Mhz (så alltså har jag satt tad till 32 Tosc).
har läst datablade några gånger nu men fattar inte vad jaf har missat bah!

Kod: Markera allt

#include <p18f458.h>
#include <pwm.h>

#pragma config OSC = XT, OSCS = OFF
#pragma config PWRT = ON, BOR = OFF
#pragma config WDT = OFF
#pragma config STVR = ON, LVP = OFF
#pragma code high_vector = 0x0008

void interrupt_1(void);
void interrupt_at_high_vector(void)
{
	_asm GOTO interrupt_1 _endasm
}
#pragma code
#pragma interrupt interrupt_1

//******GLOBALS********
int temp = 0;
int temp2 = 0;

void init (void){
//************INIT PORTS*************
	TRISB = 0b00000000; // PORTB 0-7 OUT
	TRISC = 0b00000000; // PORT C OUT
	TRISA = 0b00000001; // PORT A0 IN resterande ut

//************TIMER2****************
	T2CON = 0b01111101; // prescaler 1:4, Timer2 on
 	INTCONbits.GIE = 1; // Global Interrupt
 	INTCONbits.PEIE = 1; // 
 	PIR1bits.TMR2IF = 0; //clearar flaggan
 	PIE1bits.TMR2IE = 1; //Timer 2 interrupt enable
 	IPR1bits.TMR2IP = 1; //High priority
 	TMR2 = 0;			//clear Timer 2
 	PR2 = 0b11111111;

//***********A/D********************
	ADCON0 = 0b10000001; // A/D settings
	ADCON1 = 0b00001110; // --::--
	PIE1bits.ADIE = 0; //A/D interrupt disable
	PIE2bits.ECCP1IE = 0;
	PIE2bits.EEIE = 0;
	PIE2bits.CMIE = 0;
	PIR2bits.ECCP1IF = 0;
	PIR2bits.EEIF = 0;
	PIR2bits.CMIF = 0;
	IPR2bits.ECCP1IP = 0;
	IPR2bits.EEIP = 0;
	IPR2bits.CMIP = 0;	  	
}

void interrupt_1(){
	if (temp <= 127){
		PORTCbits.RC7 = 0;
	}
	else{
		PORTCbits.RC7 = 1;
	}
	
	if (temp > 256){
		temp = 0;	
	}
	
	if (temp2 <= 127){
		PORTCbits.RC6 = 1;
	}
	else{
		PORTCbits.RC6 = 0;
	}
	
	temp++;
	PIR1bits.TMR2IF = 0;
	
}


void main (void){ 

	init();
	while (1){
		if(ADCON0bits.GO == 0){
			temp2 = ADRESH;
		}
		else{
		}
	}

}
Had evarit till stor hjälp om man bara hade kunnat simulera Analoga signaler i Mplab.

hoppas någon har några tips!
Senast redigerad av slatte 16 juni 2008, 19:57:06, redigerad totalt 1 gång.
Användarvisningsbild
Andy
Inlägg: 5893
Blev medlem: 26 september 2004, 18:24:52
Ort: Södern

Inlägg av Andy »

Vad har du för inställning på ANSEL eller motsvarande ?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Skriv ett litet enkelt test-case (gärna i assembler så att du vet vad som
händer) för att kolla att du kan få igång ADCn.
Användarvisningsbild
slatte
Inlägg: 420
Blev medlem: 1 april 2008, 16:05:17
Ort: Jönköping

Inlägg av slatte »

Kom på vad jag hade glömt :-)

hade glömt att starta avläsningen av porten genom att sätta!

Kod: Markera allt

ADCON0bits.GO = 1;
Men går det verkligen inte simulera analoga signaler i MPLAB ?

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

Inlägg av sodjan »

Du kan simulera värden i ADRESx registren.
Du kan däremot så vitt jag vet inte simulera
själva den analoga signalen.
Användarvisningsbild
slatte
Inlägg: 420
Blev medlem: 1 april 2008, 16:05:17
Ort: Jönköping

Inlägg av slatte »

Oki något för dem att utveckla då :-)

Tur att det löste sig relativt smidigt denna gång ialf
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Oki något för dem att utveckla då

Hur tänker du att det skulle fungera ?
Lite svårt att koppla in en *analog* signal i MPSIM.
Användarvisningsbild
slatte
Inlägg: 420
Blev medlem: 1 april 2008, 16:05:17
Ort: Jönköping

Inlägg av slatte »

Inte riktigt så jag menade!

utan t.ex att man kunde i programmet simulera att det ligger 3 v på en analog ingång t.ex RA0 sedan kan simulator göra om det till ett binärt tal. Vet inte hur jag ska förklara det men typ så. dock inte så viktigt :-)

ungefär som man använder stimulus men istället för att ge en logisk etta/nolla eller toggla så kan man istället på ingången ange ett späningingsvärde.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Men med stimuli kan man ange att ADC-register ska få ett visst värde, alltså kan man mycket väl klara av det.
Skriv svar