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