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ą...