Die RS232 Schnittstelle funkt nun wieder wenn das Menü aktiv ist. Die mülligen Werte kamen daher, daß die Zahlen die am Display angezeigt werden und auch auf die RS232 Schnittstelle geschrieben werden von Unterprogrammen errechnet werden die beim Aktivsein des Menüs deaktiviert werden (sonst würde am Display Müll stehen...). Hab diese Unterprogramme nun so umgeschrieben (und nebenbei gleich eines löschen können), daß sie die Werte für die RS232 Schnittstelle trotzdem berechnen, sie aber bei aktivem Menü nicht anzeigen.
Dann hab ich jetzt noch mit der Maximalwertanzeige begonnen, diese kann entweder mit RAM Werten arbeiten, oder die Werte verwenden, die im EEPROM gespeichert werden. Soll heißen: wenn der Wert im EEPROM kleiner ist als der aktuelle Wert, dann wird der aktuelle Wert ins EEPROM geschrieben und bleibt aktiv bis man den PIC neu beschreibt. Die RAM Werte werden automatisch gelöscht wenn mal der Reset gedrückt wird oder man den Strom wegnimmt = Reset.
Derzeit kann ich nur Werte aus dem EEPROM lesen, allerdings blieb das Display vorerst leer. Hab im Debugmodus der Software mal geschaut, konnte aber nix feststellen, die Werte wurden korrekt in die entsprechenden RAM Register (diese stehen aus Platzmangel schon in einer anderen RAM Speicherbank) geschrieben. Dann ist mir das aus dem 1. Absatz wieder eingefallen, benutze nämlich zum Anzeigen der Maximalwerte die selben Unterprogramme wie bei den aktuellen Werten. Die blockieren aber die Ausgabe am Display wenn das Menü aktiv ist.


Nächster Schritt ist jetzt, wie ich am besten die Maximalwerte mit den aktuellen Werten vergleiche und bei einer Überschreitung des Maximalwertes diesen erhöhe. Da es 2 Werte mit je 2 Byte (16Bit) sind, könnte ich das mit einer 16Bit Subtraktion (Maximalwert-aktueller Wert) erschlagen. Kommt da nämlich was Negatives dabei raus, so wird bei der von mir schon im Programm verwendeten Routine ein Bit gesetzt. Dann schnell das Bit abfragen, wenn das 1 ist den aktuellen Wert ins EEPROM schreiben. Eigentlich ganz einfach, wenn nur nicht die ganzen Werte in unterschiedlichsten RAM Registern liegen würden und die Programme ganz bestimmte Registernamen brauchen, das kann beim Hin- und Herkopieren schon recht verwirrend sein.

Nebenbei muß ich dann noch abfragen, ob die Speicherung im EEPROM überhaupt erwünscht ist, sonst dürfen die Werte nämlich nur in den entsprechenden RAM Registern landen.
Außerdem ist noch das korrekte Setting der RS232 Schnittstelle notwendig, das hab ich inzwischen auch in ein Unterprogramm ausgesiedelt um auch zur Laufzeit (ohne Reset) eine Änderung vornehmen zu können. Derzeit funkt leider nur eine Übertragung mit 19,2kBit.
Folgende Bugs und Features sind derzeit also noch offen und in Planung:
1.) Baudrateneinstellung - Bug fixed 08.05.2009, man kann derzeit wählen zwischen 2,4k, 9,6k und 19,2k. Mehr dazu: hier.
2.) Einstellung der Impulse/Sekunde - Feature done 10.05.2009, man kann derzeit wählen zwischen 1, 2, 4, 8, 16 und 14 Impulsen/Sekunde Mehr dazu: hier.
3.) Windmeßgerät und Erfassung der Daten - Feature (da müßte was fertiges oder einfach zu bauendes dran, das optimalerweise eine zur Windstärke lineare Spannung liefert) - Feature
4.) Maximalwertspeicherung - Feature done 21.06.2009, Daten im RAM werden schon korrekt gespeichert, es gibt aber mit der Speicherung im EEPROM noch Probleme, ein bißchen Feintuning für die Stabilität ist auch noch notwendig. Mehr dazu: hier
5.) Reset der Maximalwerte (RAM, EEPROM) => eigener Menüpunkt

6.) Wertspeicherung in externes EEPROM - Feature (möglicherweise wegen 7. nicht nötig)
7.) Werteweiterleitung per WRT54GL - Feature (mit den Programmierern schon in Kontakt, dauert aber ebenfalls noch)
8.) Schaltreglerfunktionalität - Feature (wird noch länger dauern), Eventuell wäre es besser einen zweiten PIC dafür abzustellen der sich nur darum kümmert. Genug Speicher und Pins wären eigentlich schon noch im jetzigen PIC frei, mal sehen...
9.) Mal einen Schaltplan für das Ganze zeichnen und ne Print machen - Feature, die reine Meßwerterfassung läßt sich (ohne Display) sicher auf einer Platine mit der Größe von maximal einer halben Europaplatine(100x160mm), also so 100x80mm unterbringen. So groß sind derzeit meine beiden Prints für den Programmer und die Hauptexperimentierplatine. Wenn das fertig ist fällt dort schon mal etwas Platz weg, den der spezielle Schnellverschlußsockel braucht (24x65mm), der PIC im 28-poligen Sockel würde nur auf ca. 10x35mm kommen. Auch diverse Optionen, die mit Jumpern eingestellt werden fallen da weg (Takterzeugung jumperbar, Jumper für RS232, Jumper für externes EEPROM), dann gibts noch diverse Steckverbinder an den Rändern, die man in der Anzahl nicht mehr braucht.
10.) Das Ganze zur Serienreife bringen, damit der Nachbau halbwegs geordnet möglich ist - Feature: Wo kann man die Print günstig herstellen lassen, wo bekommt man die Bauteile her (besonders Displays und Tastatur müssen von der Anschlußbelegung gleich sein, welche unterschiedlichen Hardwarevarianten (maximale Spannung, maximaler Strom) gibt es, wer programmiert die PICs (könnte ich machen), welche Settings sollen "ab Werk" drinnen sein, Optimierung des Stromverbrauchs (PIC und Peripherie evtl. "schlafenlegen", z.B. auch bei Wind wo eh keine Leistung erzeugt werden kann)
11.) Deaktivierung des RS232-Chips (Pegelanpassung per Max232) und einer eventuell vorhandenen Displaybleuchtung per Menü (RS232 Menü und extra Menü für die Displaybeleuchtung). - Feature done 14.06.2009. Mehr dazu: hier.
Folgende Dinge funktionieren schon:
1.) Anzeige der aktuellen Spannungs-, Stom-, Leistungs- Drehzahl und Windgeschwindigkeitswerte incl. Aktivitätsanzeige (blinkender Stern am Ende der 1. Zeile) auf einem zweizeiligen LCD Display mit mind 20 Zeichen/Zeile (verwende derzeit eines mit 2x24Zeichen), Meßbereichsumschaltung in der Anzeige, je nach gewähltem Meßbereich (vorerst testweise für die Strommessung) - 17.05.2009
2.) Anzeige von Maximalwerten, in flüchtigem Speicher (RAM) oder nichtflüchtigem Speicher (EEPROM) abgelegt - über Menü wählbar
3.) Menü, das über ein Tastenfeld (0-9, *, #) bedient werden kann (*: weiter zum nächsten Menüpunkt, #: Wert speichern, 0: Menü verlassen, zurück zur Anzeige der aktuellen Meßwerte), im Menü kann man die Maximalwerte ansehen und diverse Multiplikatoren (Strom, Spannung, Impulse), sowie die RS232 Settings und den Speicherort der Maximalwerte festlegen. Außerdem gibts einen kleinen Displaytest.
4.) Glättung der Werte durch Mittelwertbildung (3x aktueller Wert + 1x letzter Wert)/4=neuer aktueller Wert. Das glättet Spitzen, die bei der Meßwerterfassung auftreten wenn man genau auf einer Grenze (Bit schwankt zwischen 0 und 1) ist.
5.) Die Werte werden alle 0,5s gemessen, geglättet und am Display (wenn Menü nicht aktiv ist) sowie auf der RS232 Schnittstelle (sofern im Menü aktiviert) ausgegeben, die Werte auf der RS232 Schnittstelle kommen am PC im CSV Format an (durch Strichpunkt getrennt), sind also sehr einfach in Excel auszuwerten.
6.) Bisher ist alles auf Lochraster aufgebaut und mit mehreren 10 poligen Flachbandkabeln verbunden, wirkt aber trotzdem recht stabil. Mir ist bisher nicht aufgefallen daß sich das Ganze mal erhängt hätte, Bluescreen gibts auf nem LCD Display ohnehin keinen.

