So, nachdem das mit dem ADC jetzt klappt und ich auch die Werte in Dezimal auf meinem Display sehe, brauche ich jetzt irgenwie mal ne Ansatzhilfe... :( Wie kann ich meinen Wert beispiel 7,6Volt der per Opamp um 0,303 Verstärkt wird. Jetzt auf mein Display bringen. ? Theoretisch am Taschenrechner geht es ja... (AREF / 255) * ADCWert ---------------------- = Angelegte Spannung 0,30303030 (OpAmp Faktor) Aber wie rechne ich das jetzt in ASM so um das ich mir das ganze am LCD Display anzeigen lassen kann. 7,6 Volt in der Anzeige... Bitte um Hilfe Gruß Dennis P.S.: ASM ATMega8 bei 3,6864 Mhz
Du musst ein paar Werte geschickt zusammenfassen: ADC*(ARef/256)/0,3030303 = ADC/(0,30303*255/ARef) = ADC/30 (für 2,56V VRef)
Du rechnest entweder mit Fliesskommazahlen, brauchst einen fetteren Prozessor und zeigst so aller Welt da du keine Ahnung von Mathe hast. Oder da du besinnst dich auf Festkomma und Bruchrechnen ueberlegst dir welche Genauigkeit du wirklich brauchst. Ausserdem schadet es nicht sich vorher ein paar Gedanken um Wertebereiche und Registergroessen zu machen und notfalls die Formeln etwas umzuformen damit Zahlen nicht zu gross (ueberlauf) oder zu klein (ungenauigkeit) werden. Olaf
Am einfachsten und schnellsten könnte man das so machen: 1/0,3030303 (Verstärkungsfaktor) = 3,3. Als Integer also 33 als Multiplikator. Also ADC-Wert * 33 in ASM: ldi r16,33 mul ADCWert,r16 In r0 und r1 ist dann das Ergebnis von 0 bis 8415 (0 bis 8,415). Das schickst Du dann zu Deiner Binär-BCD-Routine für 16Bit-Zahlen die vor den letzten 3 Stellen ein Komma einfügt. Oder Du teilst das Ergebnis mittels DIV1616 aus einer Atmel-Note vorher durch 100 für Werte von 0 bis 84 (0 bis 8,4). Gruß Andi
Hi Andi &@all , danke Dir für Deine Hilfe. Jetzt hängt es bei mir leider an der bin2bcd routine... :( Ich habe bisher immer nur die 8 Bit Variante der Routine gemacht um halt z.b. TempSensor DS18S20 auf meinDisplay auszugeben... finde nur leider nichts in ASM für 16bit BIN -> BCD Vieleicht hast Du da auch noch einen Tip für mich. Gruß Dennis
Ist im Prinzip einfach: Eine Schleife, die solange 10000 (natürlich zerlegt in die einzelnen Bytes) abzieht, bis der Wert <0 ist. Dann hast du die Anzahl an Durchläufen-1 für die 10000er Stelle. Dasselbe machst du auch für die 1000er und die 100er Stelle. Die 10er und 1er Stelle lässt sich mit einer Division durch 10 und den Rest berechnen.
Du hast doch schon ein Bin2BCD für 8Bit gemacht. Erweiter es halt einfach auf 16Bit-Zahlen bzw. nimm Deine 8Bit-Version für max. 3 Ziffern als Vorlage und mach daraus eine 16Bit-Version mit max. 5 Ziffern und Kommastelle dazwischen. Ich könnte Dir jetzt was fertiges für 8Bit- bis 32Bit-BCD geben aber jeder hat doch selbst ein bißchen Grips. Es kommt nicht nur drauf an, die ASM-Befehle zu kennen sondern auch darauf, was man mit denen für Algorithmen daraus machen kann. Ansonsten ist im Ordner Appnotes von AVR-Studio eine .asm mit Bin to BCD-Algorithmen Gruß Andi
Hi Andi, danke Dir auf jedenfall ;) So bin2bcd geht, hatte mal wieder einfach nur einen befehlsdreher... :( Womit ich aber immer noch einen Denkfehler habe ist der Multiplikationsfaktor von 33 der bezieht sich ja nur auf den Verstärkungsfaktor vom OpAmp aber was ist mit meinem Bezugspunkt von AREF ? Wie kann ich den Rechnerisch mit einbinden ? oder ist der in den 33 drin ? Grübel jetzt schon zu zweit an deinem Vorschlag. Funktionieren tut er Prinzipiell, nur haut der wert nicht genau hin. Und ich kann es halt in der "Theorie" noch nicht nachvollziehen... Bitte noch mal um ne kleine Hilfestütze ;) Gruß Dennis
Sorry, weiß auch nicht, wie ich auf eine Höchstspannung von 8,4V gekommen bin. Im Prinzip mußt Du nur wissen, welche Spannung bei einem bestimmten ADC-Wert ist um den Multiplikator auszurechnen. Sagen wir mal bei einem ADC-Wert von 255 sind es 12V. 12 / 255 * 1000 = 47,05 Wenn man das ohne Kommastellen zurück rechnet kommt man auf 255 * 47 = 11985 also 11,985V. In ASM gibt es leider nicht von Haus aus Fließkommaberechnungen also machen wir einfach ADC-Wert mal 47. Ist zwar nicht so genau aber mit entsprechender Multiplikation vorher und/oder Division hinterher kann man das dann auch genauer hinbekommen. Vielleicht kennt ja ein Bitschieber-Spezi noch was gutes. Laß Dir jetzt einfach noch mal einen ADC-Wert am LCD anzeigen und miß dann die Spannung und gib es hier mal durch. Am besten bei einen ADC-Wert von knapp unter 255 wegen Überlauf. Gruß Andi
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.