
Untitled
By: a guest on
Jun 17th, 2012 | syntax:
C++ | size: 1.50 KB | hits: 29 | expires: Never
#include <p24fj128ga010.h>
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF)
_CONFIG2(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRI)
#define SCALE 308L
void czekaj(unsigned long ile){
unsigned long i = 0;
for(i=ile*SCALE; i>0; i--)
Nop();
}
#define POT 5 // 10k potencjometr podlaczony do wejscia AN5
#define AINPUTS 0xffdf // wejścia analogowe dla czujnika temperatury i potencjometru
void initADC (int amask)
{
AD1PCFG = amask; // maska do analogowych wejść, 0-an
AD1CON1 = 0x00E0; // auto konwersja po probkowaniu na uint
AD1CSSL = 0; // bez skanowania, , bo mamy jedno wejście
AD1CON2 = 0; // use MUXA, AVss and AVdd are used as Vref+/-
AD1CON3 = 0x1F02; // Tsamp = 32 x Tad; Tad=125ns, wybieramy czas probkowania
AD1CON1bits.ADON = 1; // włączmy ADC
} //initADC
int readADC (int ch)
{
AD1CHS = ch; // wybieramy które wejście jest analogowe
AD1CON1bits.SAMP = 1; // zaczynamy próbkowanie
while (!AD1CON1bits.DONE); // czekamy na koniec konwersji
return ADC1BUF0; // zwracamy wynik
}
#define PMDATA PMDIN1
#define TFLY 9000 // 9000 x 16us = 144ms
#define DELAY() TMR1=0; while( TMR1<TFLY)
main ()
{
int a;
initADC( AINPUTS); // inicjalizacja przetwornika A/C
TRISA = 0xff00; // wybór PORTA jako wyjścia do wysterowania diód
while(1)
{
a = readADC( POT);
//a >>= 2; // 10-bit do 8 bit (0..7)
PORTA = (a/4); //to to samo, przesuniecie o 1 bit to dzielenie na 2
}
}