zdravim,
mam problem s rozchozenim “voltmetru” na PIC18F4520. Problem neni (alespon myslim) v nastaveni ADC, ale v samotnem algoritmu prepoctu z 10 bitove binarni hodnoty na skutecnou hodnotu napeti, kterou potrebuju zobrazit na LCD.
Zkousel jsem voltmetr od spruta
sprut.de/electronic/pic/prog … dclcd.html
prepsal jsem prikazy a vysledkem bylo zobrazeni 0-1022 s podivnou inkrementaci po 11 vzdy od 00.
Snazil jsem se odhalit chybu, tak jsem vzal jen ciste ten kod pro prepocet (tam jsem jeste nasel nejake “chyby”/asi rozdilny instrukcni set pro pic16xx a pic18xx), v debuggeru rucne nastavil do vstupnich registru napr ADRESH=0x00, ADRESL=0x01, ale ten prepocet nefunguje spravne.
Jde o Uadc*5/1024=Uout[mV]. Konkretne jde o to deleni. To v programu funguje jinak nez by melo, resp. nefunguje. Deleni 16bitoveho registru (f1 a f0) n^2 je provedeno rotaci o n bitu kazde jeho poloviny…??? Nemel by se spis posouvat cely 16 bitovy registr o n bitu vpravo? Ale to pak bude vysledek binarni cislo s desetinou carkou, nebo ne?
[code] s cz prekladem
;*****************************************************
; Division durch 2 wird w-mal ausgeführt ;(deleni 2 se provede w-krat)
; die zu dividierende Zahl steht in xw ;(vydelene cislo bude v xw)
Div2
movwf counter ; Anzahl der Divisionen speichern ;(ulozi pocet deleni dvemi)
Div2a ; 16 bit xw:=xw/2
bcf STATUS, C ; carry löschen ;(smaze carry)
rrf xw1, f
rrf xw0, f
decfsz counter, f ; fertig? ;(hotovo?)
goto Div2a ; nein: noch mal ;(ne: jeste)
return
;*****************************************************
[/code]
Nevim, jestli je ten projekt odzkouseny, treba to jen nechapu… jsem zacatecnik Nicmene to potrebuju nejak vyresit.
Napadlo me, tabulkou pro 1024 hodnot:) (pro 00 00000001 -> v bcd 0005mV … 11 11111111 -> 4996mV), ale to je asi sileny.
Nebo jestli to jde spocitat v C a vysledek ulozit do registru? nikdy jsem ale v C neprogramoval a nevim, jestli je mozny nejak kombinovat v jednom projektu ASM i C. Komplet projekt z mam vicemene hotovej v asm. Do toho potrebuju nejak zakomponovat ten prepocet.
Nebo mate nekdo ten “voltmetr” (pripadne neco podobnyho) funkcni…?
Predem dekuju za pomoc a vysvetleni.