Max S. schrieb:
Ich soll 8 LEDs mit einem Schieberegister (74HC595) verwenden.
Warum? Hausübung?
Max S. schrieb:
dass eine Reihe von 8
LEDs die Stellung des Potentiometers angibt
Wenn Dich die Stellung des Potis interessiert, dann solltest Du eventuell den Rückgabewert vom ADC auch irgendwie weiterverarbeiten, meinst Du nicht.
Ich muß mich doch glatt korrigieren, Du dividierst ihn ja durch 512 (hat der PIC - ich kenne ihn nicht - einen 12 Bit ADC? Dann wär diese Rechnung wenigstens näher dran an richtig, als alles andere) und erst das Ergebnis läßt Du links liegen, aber das ist sowieso immer 0. (siehe unten)
Max S. schrieb:
rechter Anschlag ! alle LEDs leuchten
Dazu ist Dein Code schon mal nicht in der Lage; da wird nie mehr als eine LED leuchten können. (Umwandlungs-Tabelle mal scharf anschauen)
Max S. schrieb:
Es funktioniert nicht und ich finde meinen Fehler nicht
Es ist, wie man bereits erkennen kann, weit mehr als nur einer.
Wie gesagt, ich kenne den PIC nicht, hab also keine Ahnung, wie man z.B. seinen ADC ansprechen sollte, aber dafür finde ich in Deiner ADC-Lese-Funktion ein paar Ungereimtheiten:
*) resultLOWBit und resultHIGHBit - ich hoffe doch, der ADC hat ein paar mehr als nur 2 Bit? Sind zwar nur Namen, aber man sollte sich das Programmieren doch nicht noch komplizierter machen, als es eh schon ist, drum mein Tip: Ein Bit sollte ein Bit sein und ein Byte jedenfalls mehr als ein Bit haben (i.A. acht Stück, aber wenn ein Wertebereich kein vielfaches von 8 Bit verbraucht, dann kann das höchstwertige Byte auch mal weniger Bits beinhalten).
*) Nachdem Du Deine beiden Bits, die vermutlich eher Bytes sind (hoffentlich korrekt) von der HW abgeholt hast, wirds wieder etwas skuril: das LOWBit verschiebst Du bitweise in Deine Ergebnisvariable (außerdem schiebst Du gleich 9 Bits rüber, obwohl hier vermutlich nur acht vorhanden sind, klassischer off-by-one Fehler, hier aber egal), das könnte man durchaus mit einer einfachen Zuweisung etwas abkürzen, aber die Verschiebe-Schleife hast Du immerhin korrekt von irgendwo kopiert; trotzdem: such Dir doch qualitativ bessere Kopiervorlagen, das Internet ist voll davon.
*) Tja, und vor lauter Freude übers richtig kopiert haben, vergißt Du dann komplett, Dich auch Deines HIGHBits des Ergebnisses anzunehmen. Damit bleibt der höchstmögliche Rückgabewert halt leider auf das beschränkt, was sich in 8 Bit unterbringen läßt, also max. 255 - die Du dann in Deiner Hauptschleife gleich mal forsch in 512 Teile dividieren willst. (siehe oben)
Das werden jetzt sicher nicht alle Fehler gewesen sein, die Du in Deinem Code versteckt hast, aber damit hast Du zumindest mal ein paar Ansätze, wo noch etwas zu tun ist.
Was mir sonst noch aufgefallen ist: eine Flanke ist an sich immer ein Wechsel von LOW (0) zu HIGH (1) bzw. umgekehrt. Folglich könntest Du in Deinen beiden Takt-Routinen jeweils eine Pinwackelei einsparen, welche kannst Dir aussuchen, solange es nicht die mittlere ist; aber klar tut die eine µs dort auch nicht wirklich weh.