Bien estoy intentando leer de dos puertos de un mismo pic, concretamente del A= y A1, lo hago en C el programa es de la siguiente forma:
// hello16f88.c
//
// jackie lee
// jackylee@media.mit.edu
// 2005/10/06
//
// This example demonstrates how to use 16F88 ADC.
//
//
// For full details on the iRX board and this program, refer to
//
http://www.media.mit.edu/~r/projects/picsem/GettingStarted///
//
#include "C:\Program Files\PICC\Devices\16f88.h"
// Configure PIC to use: HS clock, no Watchdog Timer,
// no code protection, enable Power Up Timer
//
#fuses HS,NOWDT,NOPROTECT,PUT
#fuses INTRC_IO,NOWDT,NOPROTECT,PUT, NOLVP, MCLR, NODEBUG, NOFCMEN, NOIESO
// Tell compiler clock is 8MHz. This is required for delay_ms()
// and for all serial I/O (such as printf(...). These functions
// use software delay loops, so the compiler needs to know the
// processor speed.
//
#use delay (clock=8000000)
// Declare that we'll manually establish the data direction of
// each I/O pin on port B.
//
#use fast_io(B)
// Standard definitions for the irx2_1 board
//
#define RS232_XMT PIN_B1 // (output) RS232 serial transmit
#define RED_LED PIN_B2 // (output) Red LED (low true)
#define IR_LED PIN_B3 // (output) Infrared LED (low true)
#define IR_SENSOR PIN_B4 // (input) IR sensor (Sharp IS1U30)
#define RS232_RCV PIN_B5 // (input) RS232 serial receive
// Macros to simplify I/O operations
//
#define RED_LED_ON output_low(RED_LED)
#define RED_LED_OFF output_high(RED_LED)
#define IR_LED_ON output_low(IR_LED)
#define IR_LED_OFF output_high(IR_LED)
#define IR_RECEIVED (!input(IR_SENSOR))
// Default tri-state port direction bits: all PORT B bits are
// output except for IR_SENSOR (bit 4) and RC232_RCV (bit 5).
//
#define IRX_B_TRIS 0b00110000
// Inform printf() and friends of the desired baud rate
// and which pins to use for serial I/O.
//
#use rs232(baud=9600, xmit=RS232_XMT, rcv=RS232_RCV)
void main() {
setup_adc_ports(sAN0 | sAN1 | VSS_VDD);
setup_adc(ADC_CLOCK_DIV_64);
while (1) {
RED_LED_ON; // turn on the led
set_adc_channel(0);
adc_value = read_adc();
volts_read = adc_value*20.00000/1024;
volts_send = (double) volts_read;
printf("Voltage %i: %f --- %x \r\n", volts_send, volts_read); // print to serial port
delay_ms(500);
set_adc_channel(1);
adc_value = read_adc();
volts_read = adc_value*20.00000/1024;
volts_send = (double) volts_read;
printf("Voltage %i: %f --- %x \r\n", volts_send, volts_read); // print to serial port
RED_LED_OFF; // turn off the led
delay_ms(500); // do nothing for half a second
}
}
los resultados de la segunda variable, no dan lo que debene de dar, y otra cosa que pasa es que cuando pasa de 1 voltio de entrada se desestabiliza sin dar ningun resultado coherente.
gracias foreros