Tema: Re: PIC programavimas 2
Autorius: Gediminas
Data: 2017-02-08 23:07:34
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ą.