[ shadow-bg @ 19.05.2012. 17:49 ] @
Kako da setujem da ocitavam analogni signal sa RA1 i RA2 ? Ovaj kod mi ocitava samo sa RA1

Code:
unsigned int adc_rd;
char txt[5];

unsigned int adc_rd2;
char txt2[5];

void main() {
  INTCON = 0;                              // disable all interrupts
  ANSEL  = 0x06;                           // Configure AN2 pin as analog input
  TRISA  = 0x06;
  ANSELH = 0;                              // Configure other AN pins as digital I/O
  Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // Lcd_Init_EP5, see Autocomplete

  LCD_Cmd(LCD_CURSOR_OFF);                 // send command to LCD (cursor off)
  LCD_Cmd(LCD_CLEAR);                      // send command  to LCD (clear LCD)

  ADCON1     = 0x82;                       // configure VDD as Vref, and analog channels
  ADCON0     = 0x82;
  TRISA      = 0xFF;                       // designate PORTA as input

  while (1) {
 
  adc_rd = ADC_read(1);
  adc_rd2 = ADC_read(2);

  LongToStr(adc_rd, txt);
  LongToStr(adc_rd2, txt2);

  LCD_Out(2,1,txt);
  LCD_Out(1,1,txt2);

   Delay_ms(10);
  }
}
[ bogdan.kecman @ 19.05.2012. 18:20 ] @
ovo mi deluje kao mikroC ? nisam siguran kako tamo ali generalno kod PIC-a (a i vecine ostalih mikrokontrolera), na cipu postoji samo jedan ADC. Ispred njega je multiplexer kojim biras koji kanal citas. Kada setujes multiplexer (setujes koji ADC kanal citas) moras posle toga da sacekas odredjeno vreme pre nego uzmes da citas ADC vrednost (da se isprazni kond za merenje i jos kojesta tamo "smiri"). Sad, vidim da ti radis readADC(x), sto je verovatno neka mikroC funkcija koja radi "set" pa radi "read" .. moguce da tu nesto ne valja .. takodje moguce da nisi iskonfigurisao ADC kako treba, a ne mogu da proverim sta si uradio posto nisi napisao koji PIC je u pitanju

Citat:

Initializes PIC’s internal ADC module to work with RC clock. Clock determines the time period necessary for performing AD conversion (min 12TAD).


Evo mikroC kaze da ce on unutar te funkcije da odradi vec potreban 12TAD delay. Ne kapiram zasto nisu napravili neki ADC_SETUP posto oni uvek setuju taj ADC da koristi RC sto je malo bez veze, mozda bolje da ti sam nasetujes taj ADC i procitas to direktno i batalis mikroC biblioteku (glavni razlog sto ne volim mikroC su te zatvorene biblioteke, recimo da je ova otvorena ti bi lako mogao da promenis kako se konfigurise adc i slicno)
[ shadow-bg @ 19.05.2012. 19:13 ] @
Da, MikroC je u pitanju. Pic je 16F887, oscilator na 8Mhz
Skoro siguran sam da nisam setovao ADC kako treba, posto sam ga setovao "kako mali perica zamislja da se to setuje"

Koristim MikroC jer sam duduk i novajlija, a on mi je najlaksi. Kako bi ti to uradio ako mogu da te zamolim za neki primer?
[ goran_68 @ 19.05.2012. 20:38 ] @
Pitanje sta sve radi ta njihova funkcija ADC_read(1):

Pre nego nju pozoves napisao si sledece:

ADCON0 = 0x82;

Ovim nije postavljen bit ADON. A/D konvertor nij dakle ukljucen. Ako ga funkcija ADC_read(1) pri pozivu ne postavlja, onda ti ne radi zbog toga. Dakle probaj da pre poziva ove funkcije napises

ADCON0 = 0x83;

Trebalo bi da tako radi.
[ shadow-bg @ 19.05.2012. 20:55 ] @
Probao sam sa 0x83 i dalje isto. Ocitava sa RA1 samo. Tacnije,

Code:
adc_rd = ADC_read(1);
adc_rd2 = ADC_read(2);


ocitavaju istu vrednost iako su trimeri u razlicitim polozajima.
[ ZAS011 @ 19.05.2012. 22:48 ] @
Pretresi malko datasheet za 887. Cini mi sse da bi trebalo da setujes registre na sledeci nacin:

ADCON0 = 0x81; // 0b10000001
ADCON1 = 0x80; // 0b10000000
[ bogdan.kecman @ 20.05.2012. 01:11 ] @
nemam pri ruci 887 ali probaj

Code:

//scepin hint
ADCON0 = 0x81;
ADCON1 = 0x80;
...
adc_rd = ADC_read(1);
Delay_ms(10); //sacekaj posle citanja adc-a 10ms
adc_rd2 = ADC_read(2);
Delay_ms(10);
...


[ vukboban @ 20.05.2012. 07:28 ] @
ANSEL=0x06,tu si setovao da je samo AN2 analogni(tako pise,nisam gledao datasheet),a ocitavas sa 2 kanala-AN1 i AN2
Moras da namestis ANSEL da ti 2 kanala budu analogni.
[ ZAS011 @ 20.05.2012. 08:40 ] @
ANSEL = 0x06; // 0b00000110
je ispravno podesavanje, RA1 i RA2 podeseni kao analogni ulazi.