uživatelské znaky na LCD (HD44780) pomocí PIC
Moderátor: Moderátoři
Takže:
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?
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?
Tady jsou rutiny pro násobení a dělení. V levo na stránce zmáčkni "Matematika".
http://www.cmail.cz/doveda/procesory/index.htm
http://www.cmail.cz/doveda/procesory/index.htm
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).4. Vydìlím tenhle registr konstantou 10000(dekadických) a mám volty dále 1000(dekad) a mám desetiny voltu...
Doufám že máš pravdu - já už se celkem ztratil až to bude hotové, tak napíšu jak to dopadloAnonym píše: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).4. Vydìlím tenhle registr konstantou 10000(dekadických) a mám volty dále 1000(dekad) a mám desetiny voltu...
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é
Také zde jsou matematické rutiny:
www.s-o.webnode.cz/matematika-pro-pic
www.s-o.webnode.cz/matematika-pro-pic
Mám tu teï problém
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)
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)