Forum: Mikrocontroller und Digitale Elektronik Teilen durch eine Fliesskommazahl in Assembler


von andy (Gast)


Lesenswert?

Hallo Leute

Ich hab mal ne Frage und hoffe, dass mir jemand weiterhelfen kann.
Ich baue mommentan einen Strom- Frequenz konverter. Dabei programmiere 
ich gerade einen ADuC834 (intern 8052) und auch einen PIC16F84A.
Der ADuC übernimmt die 24Bit AD-Wandlung und mit dem PIC generiere ich 
die Frequenz.
Nun sollte ich den 24Bit gewandelten Wert mit einer Konstanten 
Fliesskommazahl (1,386765864) teilen. Wie kann ich das in Assembler 
realisieren? Der 8052 verfügt zwar über einen Divisionsbefehl doch 
meiner Meinung nach nur Ganzzahlig.
Kann mir da jemand helfen? Besten Dank im Voraus..
andy

von crazy horse (Gast)


Lesenswert?

wie kommste auf so ne Zahl? Kann man die auch anders darstellen? Evtl. 
Kannst du auch mit Ganzzahlarithmetik auskommen.
Den div-Befehl kannst du vergessen, der hilft nur bei einfacher 
8bit-Division und läßt sich nicht größere Zahlen benutzen.

von andy (Gast)


Lesenswert?

Ich habe mommentan bei Full-scale (Alle 24Bit->High), am Ausgang vom PIC 
eine Frequenz von ungefähr 16,876....kHz!!(weiss sie Mommentan nicht 
auswendig)
Ich sollte aber auf 12,5kHz/50ppM genauigkeit kommen! Also dachte ich 
mir den 24Bit Wert mit dem Verhältnis der Ist- und Sollfrequenz zu 
teilen.
(Ich dachte man könne mit dem DIV-Befehl auch 32Bit-Werte mit 16Bit 
verrechnen?!)Kann aber auch sein dass ich mich irre..

von Michael Pohl (Gast)


Lesenswert?

und wenn du den pic einfach langsamer taktest ?
weiß ja net ob das bei pic möglich ist
hab noch nie mit den gearbeitet

von andy (Gast)


Lesenswert?

Ich bezweifle das ich einen Quarz in dem von mir benötigten Verhältnis 
finde.. (muss ja auf die Verlangten 50ppM kommen)
aber trotzdem danke

von Michael Pohl (Gast)


Lesenswert?

mh den quarz kannste ja aber auch durch hinziehen dazu bekommen...  ich 
weiß zwar net genau wie... aber das geht...
mein pa macht das öfters mal...für messgeräte
gehen tut das....

von crazy horse (Gast)


Lesenswert?

Versuch es mit einer Kombination aus niedrigerer Quarzfrequenz und 
Analogabgleich (Referenzspannung ändern, falls möglich, oder Teiler vor 
dem Analogeingang).
Ansonsten würde ich für diese Aufgabe lieber gleich z.B. einen AD654 
einsetzen.

von Reiner (Gast)


Lesenswert?

Must Du denn die Teilung im AD vornehmen? Für die PICs gibt es 16 und 
24Bit Algorhythmen. Die machen zwar keinen richtigen Spaß, funktioniert 
aber (war für mich die Entscheidung mich von den PICs zu verabschieden).
Wenn die Taktung so prezise sein soll, wirst Du wohl um einen 
temperaturstabilisierten Quarz nicht herumkommen. Sonst nützt Dir das 
"Ziehen" auch nichts. 24Bit ist ja auch keine kleine Sache (knapp 300nV! 
bei 5V Eingangsbereich).
Bei 50ppm bleiben Dir von den 24Bit nur noch 18 übrig.

Reiner

von Peter D. (peda)


Lesenswert?

Hier meine Arithmetikbibliothek:

http://www.specs.de/users/danni/appl/soft/arithmet/index.htm

Die ist skalierbar von 16 Bit ... 640 Bit.


Aber warum soll da noch ein extra PIC mit ran ?
Der 8051 langweilt sich doch nur, warum darf der denn nicht die Frequenz 
erzeugen ?


Peter

von andy (Gast)


Lesenswert?

Ich hatte eigentlich schon vor die Teilung im AD-wandler vorzunehmen, 
weil ich den PIC nicht unnötig noch mit weiteren Befehlen belasten 
wollte (dachte mir, dass das Tastverhältnis meiner Ausgangsfrequenz 
gestört werden könnte.) Sorry konnte leider keine 16 und 24Bit 
Algorhytmen für den PIC finden, ist das erste mal dass ich mit PICs 
arbeite. èbrigens stimmt es das ich mit 18Bit fahren könnte doch dachte 
ich mir wenn er schon 24 Bit wandelt...

PS: der ADUC834 wird mit einem Uhrenquarz getaktet und intern durch eine 
PLL auf maximal 12,58MHz +-20% gebracht!(Also für meine Anwendung völlig 
nutzlos)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.