uživatelské znaky na LCD (HD44780) pomocí PIC

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

Moderátor: Moderátoři

Zpráva
Autor
Johny_Servis

#16 Příspěvek od Johny_Servis »

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?

Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 02:00
Bydliště: Kladno

#17 Příspěvek od Mendor »

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

Návštěvník

#18 Příspěvek od 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

#19 Příspěvek od 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

#20 Příspěvek od Návštěvník »

Po x letech programování v assembleru buï odpadneš nebo zaèneš i u obìda pøemýšlet, do kterého registru dáš vidlièku, do kterého nùž a øízek zásadnì krájíš na poèet kusù, který je mocninou dvou :D

Návštěvník

#21 Příspěvek od Návštěvník »

ještì by mì zajímalo jestli je nìjaká prostý pøíkaz pro dìlení v assembleru pro PIC
motorola ho mìla - tady sem zatím nic nenašel

jde mi o to dìlení 10 - jak jednoduše 16bitový registr vydìlit 10ti?

Uživatelský avatar
caven
Příspěvky: 417
Registrován: 15 srp 2006, 02:00

#22 Příspěvek od caven »

co nenaprogramuješ to není, že to motorola měla neznamená, že to budou mít všechny. 8051 o atmelu měla taky dělení v instrukční sadě a AVR už ho nemá, a musí se naprogramovat, ale je to chvilka práce ne ?

Johny_Servis

#23 Příspěvek od Johny_Servis »

Už od toho sedím od rána a mám hlavu jako balón a blbì se mì pøemýšlí :-)

Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 02:00
Bydliště: Kladno

#24 Příspěvek od Mendor »

O pár řádků nahoru jsem ti napsal odkaz na hotové rutiny pro násobení i dělení 16bit čísel ...

Johny_Servis

#25 Příspěvek od Johny_Servis »

Mendor píše:O pár øádkù nahoru jsem ti napsal odkaz na hotové rutiny pro násobení i dìlení 16bit èísel ...
Ten odkaz ale nejede ani v Opeøe ani v IE (i s vypnutým FW)

Johny_Servis

#26 Příspěvek od Johny_Servis »

zpìt - už to jede: Norton je prostì sfiòa s rùznýma nastaveníma

Uživatelský avatar
Maskot
Příspěvky: 1772
Registrován: 19 lis 2004, 01:00
Bydliště: Wien

#27 Příspěvek od Maskot »

Odkaz sice funguje lec viz.priloha.
Přílohy
snímek2.png
(121.76 KiB) Staženo 81 x

Uživatelský avatar
socern
Příspěvky: 1
Registrován: 09 srp 2009, 02:00
Bydliště: nedaleko ČK

#28 Příspěvek od socern »

Také zde jsou matematické rutiny:
www.s-o.webnode.cz/matematika-pro-pic

Johny_Servis

#29 Příspěvek od Johny_Servis »

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)

Odpovědět

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