Tema: Re: PIC programavimas 2
Autorius: Levas
Data: 2017-02-09 19:10:47
ADC ir mygtukas:
http://www.vabolis.lt/2008/12/19/mygtukai-analoginiam-iejime/

On 2017.02.08 22:59, Gediminas wrote:
> Daug prirasyta, tingiu gilintis o tuo labiau nusikraudinet reference
> manualus. Tik keletas pastabu:
> - Kam naudot ADC vietoj mygtuko? Mygtukus paprastai arba skaitai pino
> reiksme pastoviai (tu ta ir darai), arba naudoji external interupta. Pas
> PICus bet kuris IO portas gali but external inpterrut.
> - Periferijos registram sustatyt taip kaip reikia daug patogiau naudot
> padefainintas bitu maskes ir po to rasyt konfiguracija daug
> suprantamesnej formoj. Pvz: AD1CON1 = ADC1_EN | ADC1_EI | ADC_blabla;
> Kur kazkur ADC.h faile #define  ADC1_EN   0x0400 ir taip toliau.
> Bus daug aiskiau ka tu cia konfiguruoji. Kazkur turi buti bibliotekos su
> visais periferijos bitais, registrais. Susirask ir prisiskirk, bus
> lengvesnis gyvenimas. Examplai uzrodys kur jie guli.
> - Pries kazka darant su periferija butu sveika paskaityt reference
> manuala apie tai. Kad butu supratimas ka ji daro, ir kaip ja naudot.
> - ADC periferija daznokai (realybej beveik visur kur sutikau) reikia
> vienokiu ar kitokiu budu nuskaityt ADC reiksme is registro, tam kad butu
> vykdoma sekanti ADC konversija. Tu cia jos niekur nenuskaitai.
> - Kas pas tave vyksta ar nevyksta debugeris, breakpointai ir watch
> listai daugiau papasakos negu as.
>
>> Tęsiu su tuo programavimu. Kad jau LEDas mirksi, tai toliau noriu
>> pridėti mygtuką. Šiaip tai veikia, bet nesuprantu kodėl. Man lyg turėtų
>> neveikti, arba veikti kitaip... Trumpai - vienas dvispalvis LEDas per
>> tranzus valdosi nuo RC7 ir RC9. Iš RA1 įsijungia LEDo maitinimas. Prie
>> RC2, o tiksliau AN8 (tas pats pinas) prijungtas "mygtukas". Kabutėse -
>> nes ten ne mygtukas, o temperatūros sensoriaus jungtis, po to per opampą
>> jau pajungimas prie AN8. Pagalvojau tuo pačiu ir ADC išmoksiu įjungt,
>> tai pažiūrėjau, kad ribinėse padėtyse (užtumpinus daviklį ir palikus
>> atvirą) ant AN8 įtampa kinta praktiskai nuo VCC iki VDD, kas visai
>> neblogai atitiktų mygtuką. Ir kas keisčiausia programikė veikia... Kad
>> išlaikytų colorcodingą ir formatavima prisegu paveiksliuką (gal kas
>> žino, kaip kopijuoti išlaikant tuos dalykus?).
>>
>> 1 dalykas - kodėl veikia "atvirkščiai" ? LEDai pajungti lyg ir be
>> sudėtingų navarotų, jeigu maitinimas yra (RA1 = 1 visada) tai galvojau
>> kol RC7 ir/ar RC9 0 arba 1 tai atitinkamai degs arba nedegs. O dabar
>> teisingumo lentelė tokia:
>>
>> LEDx       RC7  |  RC9
>>  0        |    1    |    1
>>  R        |    0    |    1
>>  Ž        |    1    |    0
>>  2        |    0    |    0
>>
>> Kai abu pinai 1 - LED nedega (bet vienetai yra RC7, RC9 ir RA1). Tranzų
>> bazės irgi turi tuos vienetus...
>> Kai abu pinai 0 - dega ir Raudonas ir Žalias LEDai. Blin, ir tranzų
>> bazės irgi turi po 1. Iš kur ? Pakeliui nieko nėra, tik rezistorius
>> (prieš rezistorių yra apie 2,3V, už jo link uCPU 0V, o toliau uCPU. Arba
>> dar pamečiau kokį takelį...
>> Kai dega po vieną - ant bazės gažus 3,3V.
>> Nu bet čia tik man labai įdomi smulkmena perpratimui.
>>
>> 2 dalykas - kodėl iš viso tokia programa veikia taip kaip aš noriu :D ?
>> Juk įjungiu ADC, o nuskaitau if (PORTCbits.RC2 == 0b0), kas būtų
>> skaitmeninis nuskaitymas (tik 1 arba 0, bet ne 0...1023). Chm... O gal
>> dėl to ir veikia ? Nors ir deklaruoju apie ADC, bet nuskaito kaip
>> skaitmeną ir pagal atitinkamus thresholdus duoda tik 1 arba 0, vietoj
>> sakykim 1019 ir 5. Chm... Nežinau kaip nuskaityti kaip analogą,
>> PORTCbits.AN8 meta klaidą.
>

-- 
Bye, Levas

--
http://www.vabolis.lt