-         

Ergebnis 1 bis 5 von 5

Thema: Probleme beim Eingänge abfragen :(

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2009
    Ort
    Singen - Rostock
    Alter
    32
    Beiträge
    159

    Probleme beim Eingänge abfragen :(

    Anzeige

    Hallo,

    hab da mal wieder ein Problemchen, wollte gerade einen Eingang abfragen
    und dann ne LED zum leuchten bringen.

    Dabei werden PB0 welcher als Ausgang gesetzt ist und PC0 welcher als
    Eingang deklariert gebrückt. Also bekomm ich direkt 5V von PB0 auf PC0.
    Dies soll dann eine LED welche an PB1 angeschlossen ist zum leuchten
    bringen.

    Hier mal der Code:


    Code:
    #include <avr/io.h>
    
    
    
    
    int main (void)
    {
    
    DDRB |= (1<<PB0);
    PORTB |= (1<<PB0); //Pin B0 auf Ausgang und High setzen
    
    while (1)
    {
    
    if ( PINC & (1<<PINC0) )  { //Abfrage ob an Pin C0 5V anliegen  
    
    
       PORTB |= (1<<PB1); // Pin PB1 auf High
    }
    else
    {
        PORTB &= ~(1<<PB1); //Pin PB1 auf Low
    }
    }
    }
    Kann mir jemand helfen?

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    PB1 ist kein Ausgang?

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2009
    Ort
    Singen - Rostock
    Alter
    32
    Beiträge
    159
    Danke für die schnelle Antwort habs auch grad noch gesehen, jetzt leuchtet er dauerhaft

    egal ob die Brücke gesteckt ist oder nicht.


    #include <avr/io.h>


    Code:
    int main (void)
    {
    
    DDRB |= (1<<PB0);
    DDRB |= (1<<PB1);
    while (1) {
    PORTB |= (1<<PB0); //Pin B0 auf Ausgang und High setzen
    
    
    
    if ( PINC & (1<<PINC0) )  { //Abfrage ob an Pin C0 5V anliegen  
    
    
       PORTB |= (1<<PB1); // Pin PB1 auf High
    }
    else
    {
        PORTB &= ~(1<<PB1); //Pin PB1 auf Low
    
    }
    }
    }

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Das wäre ja auch zu einfach gewesen ;)

    Zwei direkt verbundene Pins finde ich kritisch, vorsichtshalber würde ich einen kleinen Widerstand als "Brücke" verwenden. Wenn es nicht schon zu spät ist....

    Bei den AVRs haben viele Pins mehrfache Funktionen. Bei Port C fällt mir sofort JTag ein. Schau mal im Datenblatt deines AVR ob es für PC0 zutrifft. (Beim Mega32 z. B. ist PC0 der SCL-Pin vom I2C, also unkritisch, solange deine Schaltung keinen I2C-PullUp hat).

    Ansonsten: Anderen Eingangspin versuchen, Brücke nach GND anstelle von PB0, Pegel mit Messgerät messen.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    26.08.2006
    Beiträge
    84
    probiers mal so:
    Code:
    #include <avr/io.h>
    
    int main (void) {
    
    DDRB = 0x03;
    PORTB = 0x00;
    
    DDRC = 0x00;
    PORTC = 0x01;
    
    while (1) {
       if ( PINC & (1<<PC0) ) {   //Abfrage ob an Pin C0 5V anliegen 
          PORTB |= (1<<PB1);        // Pin PB1 auf High
       } else {
          PORTB &= ~(1<<PB1);       //Pin PB1 auf Low
       }
    }
    }
    PB0 bleibt dabei auf 0 (GND), am Eingang PC0 wird diesmal der Pullup gesetzt.
    Funktioniert also genau andersrum wie vorher, hat aber den Vorteil, dass 2 definierte Zustände am Eingang vorhanden sind. Einmal durch die Brücke auf Masse gezogen, ohne Brücke durch den Pullup am PC0 auf 5V hochgezogen.

    Alternativ kannst auch nen 50kOhm Pulldown an PC0 hängen und deinen code nochmal probieren

Berechtigungen

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