fantabulous68
Junior Member level 2
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.
My code to suit pic 16f690:
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 rightEasy part
//18F
//16F
*********************************************************
//18F
//16F
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
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 rightEasy 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