Zdravím pánové programátoři, nevím co dělám špatně, když “zaboha” nemůžu přečíst výsledek převodu low bytu AD převodníku. V programu mám nastavené, aby skočil do Banky1 a vybral registr ADRESL (9Eh) a vypsal ho na LCD, ale vždy se mi zobrazí to co je v high bytu ADRESH. Nepomůže ani levý a pravý odsun. Přikládám i program
ad_prevodnik.txt (5.05 KB)
Zkus čtení AD registrů napsat takto:
BANKSEL 1
MOVF ADRESL,W ;PŘESUN VÝSLEDKU A/D LOW BYTE DO PAM. BUNKY
BANKSEL 0
MOVWF ADL
MOVF ADRESH,W ;PŘESUN VÝSLEDKU A/D HIGH BYTE DO PAM. BUNKY
MOVWF ADH
BANKSEL 1
JE NEFUNKČNÍ, už jsem to tu kdesi kdysi psal
Musíš za banksel napsat jmeno registru.
BANKSEL ADRESL
Jestliže BANKSEL nefunguje, tak se RAM banka přepne klasicky.
BSF STATUS,RP0 ;Banka1
MOVF ADRESL,W ;PŘESUN VÝSLEDKU A/D LOW BYTE DO PAM. BUNKY
BCF STATUS,RP0 ;Banka0
MOVWF ADL
MOVF ADRESH,W ;PŘESUN VÝSLEDKU A/D HIGH BYTE DO PAM. BUNKY
MOVWF ADH
Pánové mockrát děkuji, samozřejmě že už to funguje s tím načtením registru v bance 1 přepnutím do banky 0 a teprve zapsáním do pomocného registru. Nevím, proč jsem si myslel, že se tyto všeobecné registry zrcadlí a když budu např. v bance 3, že se nebudu muset přepínat třeba do banky 0 a teprve zapsat výsledek. A ještě otázka když mám 4 MHz krystal, tak AD převodník může teda pracovat podle datasheetu max. do 2,5MHz ? Pochopil jsem to správně? Dík.
Několik řádek z datasheetu PIC16F88
Pro správný AD převod je nutné zajistit, aby doba TAD byla zvolena v rozmezí od 1,6 μs do 6,4 μs. (to je maximálně 625KHz)
Po dokončení AD převodu je nutné počkat minimálně po dobu 2x TAD.
Aha, díky moc za vysvětlení těch TAD mezních dob, něco o nich jsem v datasheetu zahlídl. Jinak je fajn když si člověk umí sám naprogramovat takovou věc, jakou je mikročip . Teď se pouštím do naprogramování teploměru s čidlem PT100 (rozsah od 0-200 stupňů) a tam právě potřebuji ten ad převodník.
Nezabudni, ze Pt100 by si nemal budit vyssim prudom ako 4mA. Lebo potom si ju budes neprijatelne ohrievat vlastnym meranim. Dobre je do nej tlacit prud okolo 1mA a menej. Ale aj pri tych 4mA budes mat na nej ubytok 0.4V pri 0st.C 1st.C zodpoveda cca 0.4ohmu. Z toho vyplyva, ze 1st.C je cca 1.6mV. Pre informaciu by bolo dobre merat s rozlisenim aspon jedna desatina.
Ty vies na tom tvojom mcu zosnimat 160uV? Alebo tam budes davat predzosilovat, ale ak ti ten bude zosilnovat napr. 10x (0.4V->4V), potom bude musiet mat vstupny napatovy ofset mensi ako 160uV (x10 = 1.6mV) aby ti nezanasal chybu vacsiu ako tu desatinu. Da sa to samozrejme i prekalibrovat. Preto by ma zaujimalo, ako to chces riesit.
Jo vím, že na to musí být převodník t/U, ani jinak bych to nerealizoval. Zatím jsem našel v Praktické elektronice č.5 z roku 2001 takový převodník. Mám to sestavené zatím na nepájivém poli a “jakštakš” to funguje (je to s operačním zesilovačem). Taky vím, že se na to čidlo dá koupit přímo průmyslový modul převodníku, ale je to celkem drahé.
Tak pouzi Ni1000, pozor su v dvoch vyhotoveniach s 5000ppm a 6800ppm.
Ale ak chces merat bezne teploty, pouzil by som LM334 alebo LM335. Su velmi jasne strucne a zrozumitelne, naviac linearne (v K). Prud cez LM334 netreba volit vacsi ako 100uA, je to ako s tou Pt100 a vysokym prudom.
K LM33x nepotrebujes uz ziadny OZ a vystup je linearny, netreba linearizovat.
Daj vediet ako si sa rozhodol.
Ak mozes, tak sem prosim ta hod cely hotovy funkcny program toho AD prevodnika, lebo som z toho jelen. Btw, kde mam zistit ze ktory register je v ktorej banke ?? A co je to ta pamatova bunka, prvy krat to vidim,…