uživatelské znaky na LCD (HD44780) pomocí PIC
Moderátor: Moderátoři
-
Johny_Servis
Ten předchozí anonym je můj.
1. Vzhledem k tomu, že mám Vdd=5V, tak jednomu bitu odpovídá 4,88mV = 48*10^(-4)
2. výsledek z převodu (který je v registrech ADRESL a ADRESH) si zkopíruju do svého 16bitového registru "resu"
3. pak bych registr "resu" vynásobil konstantou 48(dekadických), při 10 bit. A/D převodníku dostanu nejvyšší číslo 49152, takže 16bit registr stačí.
4. Vydělím tenhle registr konstantou 10000(dekadických) a mám volty dále 1000(dekad) a mám desetiny voltu...
problém je v tom, že neznám instrukci na násobení a dělení - jak to mám udělat?? nevíte?
http://www.cmail.cz/doveda/procesory/index.htm
-
Návštěvník
4. Vydělím tenhle registr konstantou 10000(dekadických) a mám volty dále 1000(dekad) a mám desetiny voltu...
To jsou divné počty a efektivita kódu taky mizerná. Když to číslo z převodníku posuneš o 6 bitů nahoru a vynásobíš číslem 500 a dolních 16bitů výsledku zahodíš, tak máš rovnou výsledek v setinách voltu. Pak stačí 2 dělení 10ti a máš výsledek na 3 platná čísla (tj. 0,00 až 4,99).
-
Johny_Servis
Anonym píše:4. Vydělím tenhle registr konstantou 10000(dekadických) a mám volty dále 1000(dekad) a mám desetiny voltu...
To jsou divné počty a efektivita kódu taky mizerná. Když to číslo z převodníku posuneš o 6 bitů nahoru a vynásobíš číslem 500 a dolních 16bitů výsledku zahodíš, tak máš rovnou výsledek v setinách voltu. Pak stačí 2 dělení 10ti a máš výsledek na 3 platná čísla (tj. 0,00 až 4,99).
Doufám že máš pravdu - já už se celkem ztratil až to bude hotové, tak napíšu jak to dopadlo
Jinak zajímal by mě tvoje mozkové pochody jak si na to přišel - zdá se to být velmi efektivní a šikovné, moje myšlení je bohužel příliš těžkopádné
-
Návštěvník
-
Návštěvník
-
Johny_Servis
www.s-o.webnode.cz/matematika-pro-pic
-
Johny_Servis
dle datasheetu PIC16F877A by mělo být na stránce 0 (bank 0) od adresy 0x20 po adresu 0x7F 96 osmibitových univerzálních registrů
tak si je tedy postupně zabírám pro své pomocné registry stylem
regA equ 0x20
regB equ 0x21
...
problém je v tom, že watch (v MPLABu) je neumí zobrazit (píše "not found"), jelikož tam mám i vícebajtové registry, rozhodl sem se to přepsat na:
cblock 0x20
regA
regB
regC:4
...
endc
stále to však watch neumí zobrazit a ani program po nahrání do PICu nechodí jak by měl. Jak to tedy s těmito registry je (upozorňuji že si pečlivě hlídám přepínání mezi jednotlivími paměťovými bankami)