nun, nicht jeder verfolgt ständig alle Threads, also hättest du auch
höflich nochmal auf deinen Thread durch einen höflichen Post hinweisen
können.
Zudem bist du derjenige, der mit Informationen sehr spärlich rüber
rückt. Zwar ist es toll, dass du dir die Mühe gemacht hast und dein
Ablauf mit eigenen Worten erklärt hast, nur wo ist der zugehörige Source
Code? Du sagst, der von dir gepostet passt nicht mit deiner Erklärung
überein, ja wie soll dir da jemand helfen können um zu überprüfen ob du
das auch wirklich machst, was du denkst zu tun oder gar in deinem Source
Code etwas ganz anderes machst.
Zudem bietet es sich an solche Command Bytes als Definitionen in das
Source File mit eindeutige Namen zu schreiben, sodass jeder, und auch
du, sofort erkennen kann, welchen Befehl du sendest, denn anstatt einen
x-beliebige Zahl steht dann die Definition mit einem Sinnvollen Namen.
Auch ist es mir noch schleierhaft wo genau du deine LEDs angechlossen
hast, denn im Befehl LEDleiste scheinst du etwas über den I2C Bus zu
senden, nichts mit Port ansprechen.
Deine Tastenabfragen machen absolut null sinn. Du scheinst einen Taster
am Port P3_2 zu haben? (Ich kennen keinen AVR und somit wird hier
geraten, da du keine Kommentare dazugeschrieben hast). Diesen fragst du
unentprellt in einer Endlosschleife ab und arbeitest sowohl mit dem ein
und aus-Zustand. Das haut so nicht hin.
Du hast eine Hauptschleife, und sonst nichts. In dieser initialisierst
du, und ließt aus? Und das ständig? Das kann nicht funktionieren.
Deine Main Routine sollte im Mindestfall mit einer Billigentprellung
folgendermaßen ausschauen:
1 | Initialisieren der Uhr (Einschalten, Konfigurieren) // muss man nur einmal machen!
|
2 | while(1)
|
3 | {
|
4 | if(P3_2==1) // Taster gedrückt
|
5 | {
|
6 | auslesen der Uhr
|
7 | ausgeben der Werte
|
8 | warten von 100ms // entprellen
|
9 | while (P3_2 == 1); // warten bis Taster losgelassen wird
|
10 | warten von 100ms // entprellen
|
11 | {
|
12 | }
|
Eine Pause macht man nie so wie du, da du nicht weiß wie lange er
wartet, oder hast du Rechenzyklen nachgerechnet, ich bezweifle das? Es
gibt vermutlich eine fertige Delay Funktion die die Pause in
Abhängigkeit deiner Taktfrquenz für dich genauer einstellt.
Ansonsten verwendet man Timer, was aber vorerst für dich zu weit gehen
würde, aber einfach im Hinterkopf behalten für zukünftige Optimierungen.
Also wie du siehst, viele Probleme, viele Fehler, viele offene Fragen.
Zusatz: Warum verwendest du einen uC ohne Hardware I2C Schnittstelle um
ein I2C Gerät anzusprechen?