ATMega8 3digit LED-Anzeige ansteuern
Hallo zusammen,
heute melde ich mich mal wegen eines Problem(chen)s hier in der Firma.
Wir haben hier eine vor Jahren selbstgebaute Platine mit einem ATMega8, drei gemultiplexten Großanzeige-LED-Siebensegmentanzeigen und ein paar weiteren LEDs und einer seriellen Schnittstelle.
Das Ding macht nichts anderes, als eine Analogspannung auswerten mit Zehnerlogarithmus und das Ergebnis auf der Anzeige anzeigen. Und zusätzlich als einen String auf der seriellen ausgeben, aber das ist bereits optional, weil nie benutzt.
Die Analogspannung kommt von Vakuum-Messgeräten, die logarithmisch ausgeben: Atmosphäre (1000mbar) ist 10V, 1mbar ist 8V, 1e-3mbar ist 6V, bis herab auf 1e-9mbar gleich 2V. Und alle Zwischenwerte.
Nun haben wir andere Messgeräte, die nur 1-9v ausgeben und deren Range von Atmosphäre bis herab auf 1e-5mbar geht.
Also Programm ändern nötig.
Problem: Quelltext verschwunden!
Was ich noch weiß: Der Kollege hat in C programmiert. Und hat doch einige Wochen gebraucht, weil er sich erst in die ungewohnte Aufgabe reinfuchsen mußte. Ich kann mich noch erinnern, das Umrechnen flutschte relativ bald, aber bis alles wie gewünscht ging (z.B. daß die LEDs in der gesamten zur Verfügung stehenden Zeit angesteuert wurden, also hell genug waren), dauerte es eben so lange. Das wollen wir nicht wiederholen, das dauert einfach zu lange und ist zu teuer, wenn diese hochbezahlte Fachkraft wieder alles von vorne macht. Es gibt natürlich einen funktionierenden ATMega8 mit dem (bisherigen) Programm drauf, dort kann man es assemblermäßig auch runterlesen.
Zur Verfügung steht: 2x diese Platine, einfach über NV-Stecker mit 12V zu versorgen. Schaltplan könnma auftreiben, aber welcher Port was tut, hab ich eh schon rausgeklingelt. Braucht man also noch ein Netzteil und eine regelbare Spannungsquelle zum Simulieren der Messgeräte-Ausgangsspannung (können wir natürlich stellen)
So, wer könnte helfen, und zu welchem Preis?
Fragt und grüßt
der Tom.
Liste der Anhänge anzeigen (Anzahl: 1)
Präzisieren wir die Aufgabe:
Die Analogspannung kommt über einen Spannungsteiler geteilt rein, so daß die 10V des Meßgerätes AD-Wandler-kompatible 5V werden.
Der Zahlenwert hängt im alten Fall so von der Spannung ab: P [mbar] = 10 hoch (1,5 * U [V] - 12)
Beim neuen Meßgerät: P [mbar] = 10 hoch (U [V] - 6)
Es gibt die zwei gültigen Stellen mit einem feststehenden Komma, einen feststehenden Querbalken des PlusMinus für die Größenordnung, dazu einen geschalteten Strich (der aus dem Minus ein Plus macht) und ein großes Digit für die Größenordnung.
Wie man nun die Info an die Stellen verteilt, weiß ich nicht. Der Kollege kann sich auch nicht erinnern, es ist ca. 6 Jahre her. Ich könnte mir vorstellen, daß man die Entscheidung der Größenordnungsanzeige (+2 bis -8 ) mit lauter Fallunterscheidungen macht, und nur für die zwei gültigen Stellen eine Art Float-Berechnung macht.
Daß es nicht heller werden kann als 100% Zeitausnutzung, ist mir schon klar, ich kann mich nur vage erinnern, daß der erste Anlauf eher so war: Gemütlich in der Hochsprache die Rechnerei erledigen, danach die drei Digits mit je 6ms ansprechen (rechnerisch ca. 50Hz Wiederholrate). Ohne ISR. Und daß dabei nur ein dunkles Schimmern rauskam, weil die Rechnerei auch eine Zeit benötigt hat, der Punkt der Lernkurve mußte erstmal durchschritten werden. Aus dieser Erinnerung heraus habe ich das Multiplexen per ISR als "echte Aufgabe" angesprochen.
So, hier noch ein Bildchen von der Platine, zur besseren Vorstellung...
- - - Aktualisiert - - -
Ja, und nun verbrauch ich selbst schon ne Menge Zeit. Jetzt müßt ich neben dem Tippen und nachdenken "nur noch" ATMega in C programmieren können, dann hätte ich's quasi.
Die Float-Berechnung kann man vielleicht in eine Tabelle mit 100 Werten stecken. Nach Abstreifen der Größenordnung hat man ja nur noch den Bereich 10 hoch 0 bis 10 hoch 1 übrig, den man mit zwei gültigen Stellen darstellen muß...