Hallo, Ich habe gerade erst angefangen, mich in die Thematik Mikrocontroller einzuarbeiten. Ich habe jetzt mal eine Funktion geschrieben, mit der ich überprüfen kann (???), ob eine Taste (verbunden mit einem beliebigen Pin (z.B. PINB1) und der Erde) gedrückt wird. Dabei möchte ich den internen Pull-Up-Widerstand benutzen. Es würde mich freuen, wenn hier jemand die Zeit findet, um mal über diesen kurzen Quellcode zu sehen und mir ein entsprechendes Feed-back zu geben. Ich kann mir sehr gut vorstellen, dass da noch einige Fehler drin sind. Vielen Dank im Voraus! Hier die Funktion: uint8_t Gedrueckt1NichtGedrueckt0 (const volatile uint8_t *InputPort, const volatile uint8_t *InputDDR, const volatile uint8_t *InputPin, uint8_t InputBit) { uint8_t tempValue; //temporäre Variable *InputPort |= (1<<InputBit); //Am entspr. Pin wird der interne Pullupwiderstand aktiviert *InputDDR &= ~(1<<InputBit); // erst dann wird der Pin auf Eingang geschaltet tempValue = *InputPin & (1<<InputBit); // der Pin-Wert wird in tempValue abgespeichert //tempValue wird „invertiert“, so dass bei gedrückter Taste eine 1, bei nicht gedrückter Taste eine 0 zurückgegeben wird if (tempValue == 0) { tempValue = 1 } else {tempValue = 0}; return (tempValue); } Funktionsaufruf z.B.: Die folgende Funktion soll etwas tun, wenn der Knopf, der mit PINB1 verbunden ist, gedrückt wird: void main (void) { if (Gedrueckt1NichtGedrueckt0(&PORTB, &DDRB, &PINB, PINB1)) { ....... } }
Du deklarierst Zeiger (InputPort, InputDDR) als "Zeiger auf konstanten Wert" und versuchst, dem Ziel des Zeigers in der Funktion einen Wert zuzuweisen... Das kann schon mal nicht gut gehen.
Afaik dürfte es wesentlich schneller sein, den Code einmal durch den Compiler zu jagen. Der sagt einem schon ziemlich genau, was falsch ist und was nicht geht.
Und Niels hat natürlich völlig Recht: Zunächst mal den Compiler drüberlaufen lassen (frage mich, warum Du das noch nicht gemacht hast, der hätte Dir nämlich schon mal ne Reihe Fehlermeldungen um die Ohren gehauen wegen der o.a. Zuweisungen)... Wenn Du die Fehler, die der Compiler findet, behoben hast, dann kannst Du anfangen, andere Leute zu fragen.
Dann noch: Die übliche Vorgehensweise ist es: Den Port einmal zu konfigurieren und dann wird er einfach nur benutzt. D.h. Die Datenrichtung und den Pullup-Widerstand schaltest du einmal so wie du das brauchst, normalerweise ganz am Programmanfang. Danach wird der Port-Pin nur noch abgefragt, mglw. in einer Schleife in main(). Es kommt zwar manchmal vor, dass Portpins 'on-the-fly' umgestellt werden, gerade bei Tastern ist das aber eher unüblich.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.