O kas yra pull'up'ai žmoniška kalba? 7/13/11 7:44 PM, Kantega rašė: > Sveiki, > > pagelbėkit su megos ADC, jau antrą dieną nesugebu jo paleisti cikle.. > ADC sukonfiginau vienetinio keitimo režime, ADC5 kanalas, su pertraukimais. > Problema - ADC "suveikia" tik vieną kartą, po to į įtampos pokyčius ant pino nereaguoja, visą laiką nusiskaito tas pats rezultatas. > Jeigu tą patį piną nuskaityti skaitmeniniame režime, tai jis gražiai vartosi ir su pull´up´u ir be jo. > Pinas kaba laisvas, su pincetu arba įžeminu, arba į pliusą; skaitmeniniame režime suveikia o ADC režime - ne... > kodas toks: > > ADC5_DDR = 0; //configure ADC5 as input > ADC5 = 0; > ADMUX=0x45 ; //0100.0101 - Vcc ref, ADC5 > DIDR0 = 0x20; // isj. skaitmenine dali > ADCSRA =0x8E; //1000.1110/ int e,nable div. factor 64 > > > while(1){ > WriteByteToDOG(0x01, DOG_CMD); //clrscr > ADCSRA |= _BV(ADSC); //start conversion > while (!F_ADCIRQ); > F_ADCIRQ = 0; > ADCResult = (ADCH<<8)|ADCL; > //ADCResult = ADC5_PIN; cia nuskaitymas skaitmeniame rezime, veikia > WriteShortToDisplay(ADCResult); > ADCResult = 0; > _delay_ms(1000); > LED1 = !LED1; > }//while 1 > }// main > > pertraukimas labai paprastas sprendžiant pagal LED mirksėjimą, jis vyksta: > ISR (ADC_vect){ > //ADCSRA |= 0x10; > F_ADCIRQ = 1; > LED=!LED; > } > Displėjaus duomenys pajungti per žemesnyjį PORTC ketvertuką, todėl išvedimo funkcijos daro tokias operacijas: > > duomenų išvedimui į displėjų: > DDRC|=0x0F; //cause direction is changed to read data > PORTC = (PORTC& 0xF0) | (BitsToSend& 0x0F); //do not touch upper niblle of portc > > displėjaus statuso nuskaitymui: > DDRC&= 0xF0; // PC0..PC3 - input > _delay_us(10); > ... > ... > status=PINC; > > > būčiau dėkingas už bet kokią pagalbą...