PIC 24FJ64GA002 problem a AD prevodnikom

Jj, v klidu, tohle nebude ten problém. Ten problém je, že jsem už asi třetí noc po sobě spal jen 4 až 6 hodin nekvalitního spánku, takže se mi aktálně zoufale moc nechce nic drátovat - ale asi budu muset. Jak jsem psal, nějak si poradím, jen to nebude úplně “na lusknutí prsty”. Ten UART asi vyhraje.

Edit 18:27: Už to chodí. Ještě si kdyžtak odmaž/te tu konfiguraci remappable pinů, tu jsem nějak zapomněl smazat a nechce se mi to dělat ve zdejším editoru zpráv. Jinak se skutečně se musí číst z bufferu 0, takže celý nějak takhle:

#include "p24FJ64GA002.h"
#define CLOCK 16

_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF
   & COE_OFF & ICS_PGx1 & FWDTEN_OFF)

_CONFIG2(IESO_OFF & FNOSC_FRCPLL & FCKSM_CSDCMD
   & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_NONE)

void delay_us(int usec);
void delay_ms(int msec);

unsigned long ADCValue = 0;

//----------------------

int main(void)
{
   CLKDIV = 0;                  // 
   AD1PCFG = 0xFFEF;            // AN4(RB2) - analog inputs
   TRISA = 0xFFFE;              // RA0
   TRISB = 0xFFBF;              // 0xFFBF; 0xFFFF puvodne

   //50msec, 1/256,FOSC=16MHz
   T3CON=0b1000000000110000;
   PR3 = 3124;                  // 50000 ·((1/16) —256)-1 = 3124

	//----------
	// Remappable pins config for UART TX (PC RX)
	// Configure Output Function

	// Unlock Registers
	__builtin_write_OSCCONL(OSCCON & 0xBF);

	RPOR1bits.RP3R = 3;			// Assign U1TX func. to pin RP3

	// Lock registers
	__builtin_write_OSCCONL(OSCCON | 0x40);
	//----------

	// UART1 transmit config



   // ADC config
   AD1CON1 = 0x8044;            // AD1CON1:A/D1
   AD1CON2 = 0x0400;            // AD1CON2:A/D2; 31Tad   3.0Tcy
   AD1CON3 = 0x1F05;            // AD1CON3:A/D3; AN4 MUX A
   AD1CSSL = 0x0010;            // AD1CSSL:A/D
   AD1CHS  = 0x0004;            // AD1CHS:A/D // 0x0000 puvodne

	IEC0bits.AD1IE = 1;          // A/D
	AD1CON1bits.ADON = 1;
	AD1CON1bits.ASAM = 1;	// if this is on, do not need to turn SAMP
	// AD1CON1bits.SAMP = 1;

	delay_us(50);

	// LATBbits.LATB6 = 1;	// DEBUG LED on RB6

   while(1)
   {
	delay_ms(ADCValue);
      	LATAbits.LATA0 = !LATAbits.LATA0;
   }

   return 0;
}

//----------------------

void __attribute__((interrupt,auto_psv)) _ADC1Interrupt(void)
{
	ADCValue = ADC1BUF0;
	IFS0bits.AD1IF = 0;   
}

//----------------------

void delay_us(int usec)
{
   usec=(int)(CLOCK*usec)/10;
   while(usec)
   {
      asm("NOP");
      asm("NOP");
      asm("NOP");
      asm("NOP");
      asm("NOP");
      asm("NOP");
      usec--;
   }
}

//----------------------

void delay_ms(int msec)
{
   int i;
   for(i = 0; i < msec; i++)
   {
      delay_us(1000); 
   }
}

//----------------------