PIC16F676, konfigurace A/D převodníku
Moderátor: Moderátoři
- feliz_navidad
- Příspěvky: 591
- Registrován: 15 říj 2009, 02:00
Díky za rady, včera se mi podařilo nastavit interní oscilátor, takže mi inicializace displeje z mobilu už běží a vše se korektně zobrazuje. Bylo třeba nastavit
BANKSEL OSCCON
MOVLW b'01100010' ; 4MHz, interní oscilátor jako taktovací kmitočet
MOVWF OSCCON
Ted jde o to, zda se AD převodník spouští od taktovacího kmitočtu, tj. 4MHz a nastavení děličky má být 1/8 pro 2us či 1/16 pro 4us, či interního oscilátoru 8MHz.
Je zajímavé, že pokud jsem v měl nastaven v OSCCON jen interní oscilátor 4MHz, nefungovala inicializace a zobrazení na displeji, s parametrem použití int. osc. jako taktovacího to funguje. Jak se říká, stále se člověk učí a manuály se vyplatí občas studovat
.
Vytiskl jsem český manuál pro 16F88 a dnes opět provedu detailní kontrolu nastavení časů, bank a pod.
Pokud opět neuspěju, napíšu.
Zatím díky za rady na co se zaměřit, chyba je ve dvou částech, tj. spuštění AD převodu (na 99%) a stím související konfigurace časů a pod. Bez této procedury vše ostatní funguje.
BANKSEL OSCCON
MOVLW b'01100010' ; 4MHz, interní oscilátor jako taktovací kmitočet
MOVWF OSCCON
Ted jde o to, zda se AD převodník spouští od taktovacího kmitočtu, tj. 4MHz a nastavení děličky má být 1/8 pro 2us či 1/16 pro 4us, či interního oscilátoru 8MHz.
Je zajímavé, že pokud jsem v měl nastaven v OSCCON jen interní oscilátor 4MHz, nefungovala inicializace a zobrazení na displeji, s parametrem použití int. osc. jako taktovacího to funguje. Jak se říká, stále se člověk učí a manuály se vyplatí občas studovat
![Smile :-)](./images/smilies/icon_smile.gif)
Vytiskl jsem český manuál pro 16F88 a dnes opět provedu detailní kontrolu nastavení časů, bank a pod.
Pokud opět neuspěju, napíšu.
Zatím díky za rady na co se zaměřit, chyba je ve dvou částech, tj. spuštění AD převodu (na 99%) a stím související konfigurace časů a pod. Bez této procedury vše ostatní funguje.
Pošlu ti Procesore v osobních vzkazech *.asm soubor, kdyby jsi měl chvilku čas. Jak jsem ti psal, tak oscilátor je interní, bez procedury pro spuštění AD převodu vše ostatní funguje. Procedury pro spuštění převodu a zpracování dat z ADRESL a ADRESH jsou použity z fungující aplikace též s 16F88 (téměř stejná aplikace, jen se použije pro jiný účel měření a místo LCD2x20 je použit displej z mobilu N5110), něco málo upraveno vzhledem ke konfiguraci i ostatních částí programu.
Máš odpoveď v ss
V podstate:
Používať BANKSEL reg. je OK, ale potom dôsledne. Je to však pamäťovo nákladné. npr tento program by sa musel riešiť v dvoch stránkach.
S EERAM sa pracuje s registrami v 2. a 3. bank-u a pri všeobecných najčastejšie v Bank-u 0. Pozor na zhodenie RP1-na ten sa zabudlo.
Testoval som to v MPLAB SIM
Na konci podprogramu WR_LCD (pred return) stačí zapísať BAKNSEL 0, alebo BCF STATUS, RP1 a BCF STATUS,RP0 odhliadnúc od chyby adresovania všeobecných registrov (npr. afisaj).
Doporučenie s používaním registrov: na konci bank-u 0 je 16 registrov ktoré sa zrkadlia aj v ostatných bank-och(väčšina novších PIC). Tie je vyhodné využiť keď sa spolupracuje s registrami v rôznych bank-och. Npr.: EEARD, EEDATA.... a pod, detto pre odloženie charakteristíky programu po isr(prerušení) keď nie je zaistené v krotom stave je bank(RP0,RP1).
V podstate:
Používať BANKSEL reg. je OK, ale potom dôsledne. Je to však pamäťovo nákladné. npr tento program by sa musel riešiť v dvoch stránkach.
S EERAM sa pracuje s registrami v 2. a 3. bank-u a pri všeobecných najčastejšie v Bank-u 0. Pozor na zhodenie RP1-na ten sa zabudlo.
Testoval som to v MPLAB SIM
Na konci podprogramu WR_LCD (pred return) stačí zapísať BAKNSEL 0, alebo BCF STATUS, RP1 a BCF STATUS,RP0 odhliadnúc od chyby adresovania všeobecných registrov (npr. afisaj).
Doporučenie s používaním registrov: na konci bank-u 0 je 16 registrov ktoré sa zrkadlia aj v ostatných bank-och(väčšina novších PIC). Tie je vyhodné využiť keď sa spolupracuje s registrami v rôznych bank-och. Npr.: EEARD, EEDATA.... a pod, detto pre odloženie charakteristíky programu po isr(prerušení) keď nie je zaistené v krotom stave je bank(RP0,RP1).
Díky za typ, poupravil jsem a ještě budu projíždět.
Zjistil jsem však další nečekanou skutečnost. Jestliže používám interní oscilátor, nastavím si v OSCCON požadovanou frekvenci, např. pro 4MHz b´01100000´, to ale není taktovací frekvence, jako kdybych použil externí krystal 4MHz. Proto mi nefungovala procedura pro zápis dat do displeje z mobilu, musel jsem nastavit OSCCON b´01100010´ pro použití interního oscilátoru i pro taktovací frekvenci. V případě prvního nastavení byla takt. frekvence 8MHz. A ted jak je to tedy s taktovací frekvencí pro AD převodník? Od jaké frekvence se počítá nastavení ADSC0 až ADCS2 v ADCON0 a ADCON1, taktovací nebo INTOSC?
Ověření jsem provedl tak, že jsem zdvojnásobil časové články pro zápis do LCD displeje. Chodí při nastavení OSCCON b´01100000´.
Zjistil jsem však další nečekanou skutečnost. Jestliže používám interní oscilátor, nastavím si v OSCCON požadovanou frekvenci, např. pro 4MHz b´01100000´, to ale není taktovací frekvence, jako kdybych použil externí krystal 4MHz. Proto mi nefungovala procedura pro zápis dat do displeje z mobilu, musel jsem nastavit OSCCON b´01100010´ pro použití interního oscilátoru i pro taktovací frekvenci. V případě prvního nastavení byla takt. frekvence 8MHz. A ted jak je to tedy s taktovací frekvencí pro AD převodník? Od jaké frekvence se počítá nastavení ADSC0 až ADCS2 v ADCON0 a ADCON1, taktovací nebo INTOSC?
Ověření jsem provedl tak, že jsem zdvojnásobil časové články pro zápis do LCD displeje. Chodí při nastavení OSCCON b´01100000´.
Ak chceš použiť interný oscilátor musí byť v OSCCON 'xxxx xx10', samozrejme s nastavením požadovanej fr.
Pre kryštálový (systémový)OSC1/OSC2 v OSCCON je 'xxxx xx00' z zároveň musí by zvolený typ oscilátora FOSC <2:0> v CONFIG1.
Ako to fungovalo v tvojom prípade rozhoduje aj ten CONFIG1: v zdrojáku máš nastavené INTRC_IO a v OSCCON ho máš zablokovaný .Odkiaľ sa zobralo 8MHz je mi nejasné. Tento stav akosi v dokumentácii nie je definovaný, takže neviem ako to takto funguje.
Tá sch. oscilátorov v doku PIC16F88 by mala stačiť.
Jedna možnosť je, že si v CONFIG2 povolil FCMEN a potom to ide na na náhradné hodiny
Pre kryštálový (systémový)OSC1/OSC2 v OSCCON je 'xxxx xx00' z zároveň musí by zvolený typ oscilátora FOSC <2:0> v CONFIG1.
Ako to fungovalo v tvojom prípade rozhoduje aj ten CONFIG1: v zdrojáku máš nastavené INTRC_IO a v OSCCON ho máš zablokovaný .Odkiaľ sa zobralo 8MHz je mi nejasné. Tento stav akosi v dokumentácii nie je definovaný, takže neviem ako to takto funguje.
Tá sch. oscilátorov v doku PIC16F88 by mala stačiť.
Jedna možnosť je, že si v CONFIG2 povolil FCMEN a potom to ide na na náhradné hodiny
- Přílohy
-
- systemOSC.JPG
- (44.59 KiB) Staženo 33 x