- Labornetzteil AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Pins Abfrage

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Mal eine "dumme" Frage, wenn ich abfragen will ob bei PC3 Eingang high Signal liegt, wie sieht der Code aus?

    So:

    if (PINC & (1<<PINC3)) { /* mache was wenn PinC3 high ist */

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    if (PINC & (1<<PINC3)) ist dann wahr, wenn in PINC das Bit PINC3 gesetzt ist. Also stimmt so.
    Zum JTAG abschalten gibts da was in den Fusebits. Wo die sind, hängt von deiner Programmiersoftware ab.
    #ifndef MfG
    #define MfG

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    mh, wenn ich aber das hier schreibe:

    if (PINC & (1<<PINC3)) { /* mache was wenn PinC3 high ist */
    PORTC&= ~(1<<PC0);
    }
    else{
    PORTC|=(1<<PC0);
    }

    Leuchtet die LED nur, wenn ich 0V an Eingang PC3 habe!
    Ich dachte die Led leuchtet wenn ich 5V an PC3 Eingang habe?

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Was das Programm macht, kommt drauf an, wie der Schalter angeschlossen ist, und wie die LED angeschlossen ist.

    Wenn der Pin beim Drücken auf High geht, wird in der if der Pin auf Low gesetzt. Je nach dem, wie dann die LED angeschlossen ist (von Pin nach Masse oder von 5V nach Pin) leuchtet die LED dann oder nicht.

    Also einfach mal die beiden Anweisungen austauschen oder die if-Anweisung negieren: if (!(PINC & (1<<PINC3)))
    #ifndef MfG
    #define MfG

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    Hi,

    ich verstehe es irgendwie nicht

    Also, 1 Taster der 5V zum Eingang schaltet.
    1 Ausgang wo eine Led mit Vorwiederstand gegen 0V ist.

    Wenn ich das Programm so schreibe:

    Code:
    int main(void) { 
         DDRC |= (1<<PC0); /* Pin PC0 als Ausgang für Drehen Links */
         DDRC &= (~ (1<<PC3));  /* Pin PC3 als Eingang */
    	 PORTC |= (1<<PC3); /* Pull Up von PIN PC3 aktivieren */    
    for(;;){ 
         
      if (PINC & (1<<PINC3)) {    /* mache was wenn PinC3 high ist */
            PORTC&= ~(1<<PC0);      
        	}
       else{ 
            PORTC|=(1<<PC0);  
         }
    
    }
    }
    oder wenn ich die if abfrage negiere, tut sich nichts!

    Wenn ich aber den Schalter 0V durchschalte, dann ja. <-- warum das?

    Oder definiere ich an Anfang das der Eingang schon 5V hat?

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Sicher dass der Taster beim Drücken 5V anlegt? Dann bringts nichts, den Pullup einzuschalten; in dem Fall sind sonst immer 5V am Pin. Entweder vom internen Pullup oder vom Taster aussen.

    Wenn der Pullup verwendet werden soll und der Taster auf Masse schalten soll, dann würde die if stimmen, d.h. beim Drücken des Tasters ist die if-Abfrage falsch (weil der Pin am Taster Low ist) und die Anweisung im else-Teil wird ausgeführt (C0 einschalten => LED leuchtet).

    Falls er bei 5V schaltet, dann wird C0 in der if auf Low gesetzt: PORTC&= ~(1<<PC0); d.h. die LED geht aus, da dann an beiden LED-Anschlüssen 0V anliegen.

    Also dein Programm mal kommentiert:
    Code:
    if (PINC & (1<<PINC3))  // PinC3 = High = 5V?
    {
      PORTC&= ~(1<<PC0);  // Wenn ja: PC0 = Low, LED = Aus
    }
    else
    {
      PORTC|=(1<<PC0);  // Wenn nein: PC0 = High, LED = An
    }
    #ifndef MfG
    #define MfG

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    Also wenn ich das Programm rüberschicke und dann an den Pin PC3 messe liegt dort schon 5V an ohne das ich den Taster angeschlossen habe!

    Dann ist das ja klar, das ich einen Taster gegen Masse schalten muss. Das Funktioniert auch!

    Aber ich will nicht gegen Masse schalten sondern +5V.

    Wenn ich denn Pullup ausschalte, (Led leutet wann es will) funktioniert das ganze nicht, aber led geht dann auch an, wenn ich den Taster gegen masse verbinde!

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Wenn du jetzt gegen Masse schaltest, macht das Programm genau das, was drinsteht. Wenn du gegen 5V schalten willst, musst du den internen Pullup ausschalten und aussen am Pin einen Widerstand gegen Masse schalten.
    Wenn der Taster nicht gedrückt ist und der interne Pullup aus ist, nimmt der Pin irgend einen zufälligen Pegel an. Das Kabel des Tasters (und wenns auch noch so kurz ist) wirkt da als Antenne. Da reichts, wenn man mal dran vorbeiläuft; der Pin fängt sich irgend ne Ladung ein und wechselt undefiniert.

    Darum einfach z.B. nen 1k...10k Widerstand nach Masse, dann ist der definiert auf 0V. Über den Taster lässt sich das dann auf 5V schalten.
    Dann kanns noch sein, dass die beiden Anweisungen in der if-Abfrage umgetauscht werden müssen (Also wenn die LED beim Nicht-Drücken leuchtet und beim Drücken ausgeht)
    #ifndef MfG
    #define MfG

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    danke! ich werde es mal gleich testen und Bericht erstatten.

    OK, hat geklappt!

    Also wenn ich Pull Up intern aktiv ist, muss ich gegen masse schalten.

    Wenn ich Pull Up deaktiv habe, muss ich einen Wiederstand gegen masse schalten.

    Thx!

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    Eine Frage noch, ist das hier richtig?

    if ((PINC&0x0A)== { // Wenn PC3=1 und PC1=0 dann...
    weil bei mir klappt es leider nicht oder habe ich da noch ein Denkfehler?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad