Gast
#5095908
Hallo Zusammen, Ich bastel seit längerer Pause mal wieder an einem kleinen Projekt. Da ich mich eher als blutigen Anfänger betrachte bin ich an ein paar Punkten eher festgefahren und komme nicht weiter. Im Anhang meine Main.c als Textfile. Zur kurzen Erklärung, da ich keine Kommentare genutzt habe. Ich habe an PC0 bis PC7 jeweils ein Signal 0 oder 5V. Bei einem Pin-Change soll mitgeloggt werden welcher Kanal bei welchem Zeitpunkt low oder high geworden ist. Die Interruptschleife PCINT0 könnt ihr erstmal vergessen, da diese die zukünftigen Taster darstellen soll. Die Whileschleife ist aktuell einfach nur als Ausgabe am Display zu erkennen und auch nicht fertig. Mein erstes Problem ist erstmal. Bei einigen Eingängen (Zum Beispiel 2) auf dem Port C werden keine Pinchange Interrupts ausgelöst. Die Spannung an den Eingängen hab ich durchgemessen, jedoch reagiert die Interrupt-Routine nicht. Ist es normal die Eingänge bei der Initialisierung auf 0 zu setzen wie ich das gemacht habe? Sonst werden die doch eigentlich beim µC Start als Eingänge gelesen oder? Weiteres viel größeres Problem. Ich weiß nicht so recht wie ich meine Programmstruktur am besten aufbaue: Das Array Eventlog speichert bei Eintreten eines Events jeweils 8 Byte. Nach der Datenerfassung wird der Eventcounter um 1 erhöht. Zukünftig will ich dann mit den Bedientasten am Display durch die jeweiligen Events scrollen können um zu sehen zu welchem Zeitpunkt z.B. ein Drahtbruch an der zu messenden Leitung stattgefunden hat. Jetzt ist es natürlich so dass 8 Byte pro Event eine ganze Menge Daten sind. Und da ich keinen Prellfilter verbaut habe kann ein Schaltvorgang schon mal 8-10 Events auslösen. Andererseits will ich ja auch keinen Prellfilter Vorschalten oder Programmieren, da mich ja auch die Events im Millisekundenbereich interessieren wenn ich irgendwo einen Drahtbruch oder Wackler registrieren will. Die Lösung die ich mir angedacht habe ist die Datensätze in der While-Schleife Stück für Stück in den EEPROM oder vielleicht sogar besser auf eine SD-Karte zu übergeben. Dann könnte ich die Datenanzeige vom Display auch direkt aus dem Speicher Laden, da ich ja nicht Live alle Events betrachten muss wenn sie gerade Stattgefunden haben und ich somit nicht Zeitkritisch bin. Jetzt weiß ich allerdings nicht wie ich das Programmtechnisch lösen kann. Ich könnte zusätzlich zu meinem Eventcounter einen EEPROM-Counter laufen lassen der alle Datensätze bis zum Eventcounter verschiebt und dann wartet dass der Eventcounter wieder weiter gezählt hat. Dann habe ich aber trotzdem das Problem das der Eventcounter irgendwann weiter zählt als das Array Speicherplatz hat. Und da komme ich ins Wanken und komme eigentlich nicht weiter. Vielleicht hat von euch einer eine Idee wie man das alles etwas Sinnvoller aufbauen kann? Ich bin für jede Hilfe dankbar!