PIC16F676, konfigurace A/D převodníku

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#31 Příspěvek od procesor »

Del hodiny číslom 8..a viac.
Daj celý asm, takto je ťažko poradiť. Možno banálna chyba s popletením "bank"

Uživatelský avatar
feliz_navidad
Příspěvky: 591
Registrován: 15 říj 2009, 02:00

#32 Příspěvek od feliz_navidad »

Technická poznámka: MPLAB ASM umí už hodně dlouho direktivu "BANKSEL". Je to mnohem pohodlnější , než nastavovat přímo bity ve STATUS registru. Navíc je to i nezávislé na MCU, neboť některé nové typy už nemají Register Bank Select bits ve STATUS.

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#33 Příspěvek od procesor »

Samo..., občas je dôležitý aj čas a priestor. Zaberie to dve inštrukcie, kde stačí jedna alebo žiadna. No výhodou je, že sa nestaráš..., ale pri dôslednej aplikácii tohoto pravidla aj na General Purpose Registers sa procesor ubankuje a pamäť za..rie BCF,BSF inštukciami.

Uživatelský avatar
fikes
Příspěvky: 70
Registrován: 15 lis 2005, 01:00
Bydliště: Trutnov

#34 Příspěvek od fikes »

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.

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#35 Příspěvek od procesor »

Ak je to v rozsahu 1,6...6,4us to bude o.k. Takže tak i tak.

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#36 Příspěvek od procesor »

A hlavne rozdiely medzi F676 F88 si pozrieť...

Uživatelský avatar
fikes
Příspěvky: 70
Registrován: 15 lis 2005, 01:00
Bydliště: Trutnov

#37 Příspěvek od fikes »

Tak se nějak nedaří, nejde a nejde, už nevím kde hledat a co zkoušet.

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#38 Příspěvek od procesor »

OSCCON máš nastavený s 01100010 na interný RC (4MHz). Pre externý XT musí byť 0xxxxx00

Uživatelský avatar
fikes
Příspěvky: 70
Registrován: 15 lis 2005, 01:00
Bydliště: Trutnov

#39 Příspěvek od fikes »

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.

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#40 Příspěvek od procesor »

Máš mail

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#41 Příspěvek od procesor »

Na rýchlo...
V START...

CALL MAIN nahraď GOTO MAIN
totiž šlapeš na vyššej hodnote stacku a ten má iba max. 8
... Toto len preventívne

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#42 Příspěvek od procesor »

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

Uživatelský avatar
fikes
Příspěvky: 70
Registrován: 15 lis 2005, 01:00
Bydliště: Trutnov

#43 Příspěvek od fikes »

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

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#44 Příspěvek od procesor »

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
Přílohy
systemOSC.JPG
(44.59 KiB) Staženo 33 x

Uživatelský avatar
fikes
Příspěvky: 70
Registrován: 15 lis 2005, 01:00
Bydliště: Trutnov

#45 Příspěvek od fikes »

Provedl jsem úpravy v nastavení časování a hodin dle rad zde na foru a dle manuálu. Zrušil jsem čtení znaků z EEPROM a všechna měření fungují jak mají.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“