Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Sharp GP2-programming distance sensor

Status
Not open for further replies.

fantabulous68

Junior Member level 2
Junior Member level 2
Joined
Aug 15, 2007
Messages
22
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,591
sharp gp2

This is for the PIC 18F1320 BUT i want to modify this code to suit the PIC16f690. I am trying but not sure about a few things. I attached a word document with the relevent datasheets from the 18F and 16F.

Code:
void main()
{
	// setup the [B]PIC 18F1320[/B]
	OSCCON = 0x72;      	// internal osc, 8MHz

	PORTA = 0;
	[COLOR="Red"]TRISA = 0b10000010;[/COLOR] 	// RA7 high imp, RA3 is serial out,
							// RA1 is ADC input measuring VR1
	PORTB = 0;
	INTCON2 = 0;            // PORTB pullups ON
	TRISB = 0b00000000; 	// PORTB not used

[COLOR="Indigo"]	ADCON0 = 0b00000101;	// ADC ON, RA1 is ADC input
	ADCON1 = 0b01111101;	// AN1 is ADC input
	ADCON2 = 0b10100010;	// right justify, [B][I]8Tad[/I][/B], 32Tosc[/COLOR]

	T1CON = 0b00010001;     // TMR1 is ON, 1:2 prescale, =1MHz

	T3CON = 0b00010001;     // TMR3 is ON, 1:2 prescale, =1MHz

	// main loop here;
	while(1)
	{
		// wait for 2 seconds, uses TMR1 free running at 1Mhz
		while(!PIR1.TMR1IF);    // wait for TMR1 overflow
        PIR1.TMR1IF = 0;		// clear overflow flag
		LATA = 0;				// all LEDs off
		
		bres += 65536;			// add 65536uS to bres value
		if(bres >= 2000000)		// if reached 2 seconds!
		{
			bres -= 2000000;	// subtract 2 seconds, keep error
		
			// flash Junebug LED1,  RA0=1 RA6=0 RA7=hiimpedance
			LATA.F0 = 1;			// LED on

		    // read the ADC voltage RA1 (Sharp GP2 sensor)
		    ADCON0.F1 = 1;		// set GO bit, start doing ADC
		    while(ADCON0.F1);	// wait until ADC done
			calc_distance();		// convert ADC value to distance
			send_serial_message();	// send message back to PC!
		}

	}
}

My code to suit pic 16f690:

Code:
	[COLOR="Red"]TRISA = 0b10000010;[/COLOR] 	// RA7 high imp, RA3 is serial out,
				// RA1 is ADC input measuring VR1

Question1:The 16f690 doesnt have a RA7. What does makin the pin a high impedance mean? Im assuming imp is impedance. I know TRIS sets pins as inputs and outputs.

*********************************************************
Im sure this part is right:)Easy part
//18F
Code:
PORTB = 0;
INTCON2 = 0;            // PORTB pullups ON
TRISB = 0b00000000; 	// PORTB not used

//16F
Code:
PORTB = 0;          
WPUB = 1;
RABPU = 0;


*********************************************************

//18F
Code:
[COLOR="Indigo"]ADCON0 = 0b00000101;	// ADC ON, RA1 is ADC input
ADCON1 = 0b01111101;	// AN1 is ADC input
ADCON2 = 0b10100010;	// right justify, 8Tad, 32Tosc[/COLOR]


//16F

Code:
ADCON0 = 0b10000101;	// bit 7 right justify,analogue channel select bits bits5-2  0001=AN1,ADC ON, RA1 is ADC input
ADCON1 = 0b00100000;	//bits6-4  fosc/32

Question2:
I dont know how to set 8Tad on the 16f690. Could someone please tell me how to do that?

Question3:
Does analogue channel select bits bits5-2 0001=AN1 mean that AN1 is ADC input?


Im going to collect the sharp GP2 today
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top