Moin Leute, ich versuche Eingänge abzufragen aber es haut einfach nicht hin. Ich bin ein Neuling und kurz vorm Suizid. Kann mir jemand sagen warum diese Abfrage nicht funktioniert und ggf eine einfache Möglichkeit zur Abfrage von Inputs geben ? Ich habe zwar schon eine Menge an Threads durchgelesen aber komme einfach nicht dahinter was daran falsch ist: #include <avr/io.h> // AT90S2313 #define taster1 PINB1 int main(void){ while(1){ DDRB=0x00; //Register B Eingang DDRD=0xff; //Register D Ausgang PORTB=0x00; //Pull up aus,Schalter an '+' if(taster1){ cbi(PORTD, 2); } } }
Hallo Ich glaube dein PINB1 ist das Problem. Dieser ist in der io2313.h nur ein "#define PINB1 1", also nur eine Zahl. Ich habe das ganze mit avr-gcc ver 3.3 so gelöst: if(PINB & (1<<PINB1)) { ... } Mit PINB lese ich den PortB ein und maskiere den gewünschten Pin aus. Ich bin mir nicht sicher ob ich es genau so gemacht habe, der Ansatz sollte stimmen. Gruss Thomas Berger
Generell würde ich die Schalter an "-" anschließen und die Pullup einschalten. Die Abfrage ob der Schalter betätigt ist wäre dann auf low Pegel. Bernd
Erstmal vielen Dank an euch, @ Bernd.Ich habe schon alles Mögliche versucht,auch mit Pullup und '-'(natürlich auch die Software geändert). Es muß doch irgeneine Möglichkeit geben diese Ports direkt abzufragen. Ich hätte ganz gern Mehrfachabfragen gemacht (Eingang1 + Eingang2 = Ergebnis x).Wenn Ergebnis x,dann ... Thomas
Hi der Ansatz von Thomas passt. Um mehrere Pinns gleichzeitig abzufragen: if(PINB & ((1<<PINB1)|(1<<PINB2)(1<<PINB4))) { foo(); } else { bar(); } Matthias
Hi Leute, nach ca.100 verschiedenen Internetseiten habe ich jetzt die Lösung. Ich mache eine Definition über bit_is_clear. Der << Befehl sieht auch interessant aus.Muß ich mal austesten. Vielen Dank Leute.Jetzt kann ich weiterbasteln. Thomas
Hi bit_is_clear bzw. bit_is_set solltest du nicht verwenden da die Funktionen veraltet (deprecated) sind. Verwende den Syntax wie von Thomas Berger und mir beschrieben. >> und << sind die Bitshift-Operatoren von C. Matthias
Hi Matthias, die Bitverschiebungen eines Eingangs funktionieren aber mit mehreren haut es nicht hin.Ich habe alles Mögliche ausprobiert (Bitweises Oder und Vergleichsoder). Irgendwie funktioniert es aber nicht.Hast du eine Idee was daran falsch sein könnte ? if(PIND & ((1<<PIND1)|(1<<PIND2))){...} Einzeln kann ich PIND1 und PIND2 schalten aber nicht mit "Oder". Thomas
Hi Leute, war ein dummer Fehler von mir.Habe immer nur einen Schalter aktiviert bis ich zufällig beide aktiviert habe.Ich habe hier durch meine Beschaltung ein "exclusivoder" wenn meine Wahrheitstabelle stimmt. Thomas
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.