mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Input-Abfrage


Autor: Müller Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);
                        }
            }
    }

Autor: Thomas Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Bernd Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Müller Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

der Ansatz von Thomas passt. Um mehrere Pinns gleichzeitig abzufragen:

if(PINB & ((1<<PINB1)|(1<<PINB2)(1<<PINB4)))
{
    foo();
}
else
{
    bar();
}

Matthias

Autor: Thomas Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.