Heren,

misschien heeft er hier iemand een antwoord/oplossing.
ik ben zoals sommige weten bezig met het zelf maken van een spannings en stoommetertje dmv een PIC. hardware is inmiddels af en ben bezig met de laatste stukjes software :) et schiet dus al aardig op :)

nu heb ik in mijn software een stuk code nodig wat een getal door 1000 kan delen. ben zelf al aan het zoeken geweest en heb het een en ander getest, maar wat ik gevonden heb werkt allemaal niet correct volgens mij.

heb zelf nog niet getracht een code te schrijven, want heb geen idee hoe ik dit kan doen. ik weet dat bij een binair getal een Rotate Right zorgt voor een deling door 2, of klopt dit niet?

het gaat om de deling van een 16 bits waarde door 1000.
is er iemand die weet hoe dit moet of er een stuk code voor heeft??

Je trekt er net zo vaak 1000 vanaf als gaat zonder 'underflow'. Dat is meestal de kortste klap. Zal met een pic-ding vast ook wel kunnen...

@Marco69: je bent in de war met de "modulo" operatie: als maar 1000 aftrekken levert de restwaarde op...

of bedoel je dat je telt hoevaak je 1000 kan aftrekken? dan werkt het namenlijk wel :)

Ik wist niet dat bij de AVR jongens de kennis niet verder gaat dan optellen en aftrekken :)

Voorbeelden te over kan je hier vinden: http://www.piclist.com/techref/microchip/math/div/index.htm

Kan nog simpeler: eerst omzetten naar bcd en vervolgens de punt op je display 3 plaatsen naar links wegzetten.

Zonnepanneeltje heel erg bedankt!!! BRILJANT ^^ ;) echt eenvoudig en doeltreffend :D kan echt niet simpeler :)

....?? Omzetten naar BCD lijkt me nog veel complexer. Dat vereist ook een groot aantal deling-bewerkingen. Dan is één deling simpeler.

Omdat de gegevens op een display moeten komen moet je toch al de omzetting doen naar BCD. Een routine van 16bits naar 5 digits staat ook op piclist.com.
En dat gaat allemaal snel zat. Toevallig vorige week een 15A led-DVM gemaakt voor m'n labvoeding. De dickbest-LCD's er uit gegooid (waardeloze dingen , verlopen gewoon 5% binnen een week tijd :( )

De PIC in de A-meter draait op 2 MHz, 48x oversampling, en dan nog eigenlijk een te hoge refresh rate :+

@scherp: nee... moet toch naar BCD omdat ik het op mijn LCD kwijt moet... dus als ik dan 5 digits heb, moet ik de eerste 3 gebruiken en kan ze dan rechtstreeks op mijn scherm wegschrijven...

alleen nog even een kleine routine schrijven voor de afronding ;)

@zonnepanneeltje: De AD in een PIC is toch gewoon lineair??
naar mijn berekening krijg ik namelijk hele rare waarde (dus als ik de cijfers op het display zet).

deze waarde kloppen niet met de binaire waarde die ik uitlees.

bijv. bij b'1011000010' krijg ik 50.4V, terwijl volgens mijn berekening er 17.7V getoond moet worden.
berekening: AD waarde * 25 = spanning op de uitgang v.d. voeding.
25 is gebaseerd op: (Maximale spanning/maximale binaire waarde)*1000

dus b'1011000010' = d'706' => 706*25=17650(nu nog delen door 1000 en afronden),
dus na afronding zou ik op mijn display 17,7V moeten zien... dit is echter niet het geval...

Tja, als die routine er toch al in zit, natuurlijk. Ik ging uit van alles zelf schrijven in assembler.

Op 30 juli 2009 14:07:57 schreef JoWi:
Ik wist niet dat bij de AVR jongens de kennis niet verder gaat dan optellen en aftrekken :)

Kwestie van het niet moeilijker maken dan het is. En dat past wel bij AVR jongens :). Overigens moet je wel even oppassen met hoe vaak je dit max. doet. Met 16 bits kan het max. 65x zijn, en dat is doorgaans wel te overzien.
Als je het moet displayen, is de methode van Zonnepaneeltje uiteraard beter. Simpeler en dus minder gevoelig voor fouten, waarschijnlijk nog compacter ook. Ik had echter niet uit de start post gehaald dat die waarde direct gedisplayed moet worden.

das toch simpel. je hebruikt gewoon de DIV instructie van je processor .. oh wacht. Pruts in chipje... das gene processor he. je kan dat hoogstens een uitgebouwde statemachiene noemen.

free, niet iedereen gebruikt een cortex om een digitale stroomaflezing te maken ;)