- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Pins Abfrage

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

    Pins Abfrage

    Anzeige

    Powerstation Test
    Hi to @ll,

    ich will folgendes:

    wenn die Pins PC0=1 und PC2=0 dann LED an PC4 an.
    Problem ist nur, das PC0 ein Ausgang ist!

    Wenn ich das so progg, das PC0 als Eingang ist und ich mit

    Code:
    if ((PINC&0x05)==4) {   /* Pin PC0=1 und PC2=0 dann... */
    funktioniert es. Aber, wenn ich jetzt PC0 als Ausgang habe, klappt es leider nicht. Darf man für diese Abfrage nur Pins Eingänge benutzen?

    Ich habe mal eine LED an PC0 angeschlossen und wenn ich PC3 drücke leuchtet die LED schwach.


    So sieht mein Code aus, leider Funktioniert es nicht.
    Was mache ich falsch?

    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    #include <util/delay.h>
    #define F_CPU 8000000   // clock
    
    int main(void) { 
         DDRC = (1<<PC0); /* Pin PC0 als Ausgang für Drehen Links */
         DDRC = (1<<PC4); /* Pin PC4 als Ausgang für Led */
    	 
         DDRC  &= (~ (1<<PC2)|(1<<PC3));  /* Pin PC3 und PC2 als Eingang */
    	 PORTC |= (1<<PC2)|(1<<PC3); /* Pull Up von PIN PC3 und PC2 aktivieren */    
    for(;;){ 
         
      if (!( PINC & (1<<PINC3))) {    /* mache was wenn PinC3 low ist */
         PORTC|=(1<<PC0); 
     	}
       else{ 
         PORTC&= ~(1<<PC0); 
           }
    
    if ((PINC&0x05)==4) {   /* Pin PC0=1 und PC2=0 dann... */
        PORTC|=(1<<PC4); 
    	}
       else{ 
         PORTC&= ~(1<<PC4); 
        } 
    
    }
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    Bei einem Ausgangs-Pin nützt Dir das PIN-Register gar nichts.
    Allerdings steht der aktuelle Status eine Ausgangspins im PORT-Register - das wird schließlich auch von Dir gesetzt, um den Pin zu steuern.
    Und das PORT-Register kannst Du auch auslesen, um den Status eines Ausgangs abzufragen.

    Gruß,
    askazo

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von askazo
    Bei einem Ausgangs-Pin nützt Dir das PIN-Register gar nichts.
    Auch bei einem Ausgang kann man über das PIN-Register den aktuellen (externen) Zustand des Pins einlesen.
    MfG
    Stefan

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    Danke für die Info, aber wie mache ich das jetzt genau...
    Über bischen Hilfe wäre ich sehr Dankbar!

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von crusico
    if ((PINC&0x05)==4) { /* Pin PC0=1 und PC2=0 dann... */
    Code und Kommentar passen hier nicht zusammen. Für PC0=1 und PC2=0 wäre der Wert von (PINC&0x05) 1, nicht 4.
    MfG
    Stefan

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    ups, hast recht sternst. mein Fehler.
    Funktioniert trotzdem nicht!

    PC4 leutet immer wenn ich PC2 drücke.
    Normal darf PC4 nur leuten, wenn PC0 auch noch auf 1 ist.

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Liegt vermutlich daran, dass PC0 gar kein Ausgang ist, und damit dort gar nicht der Pegel ist, der dort eigentlich sein sollte.
    Code:
         DDRC = (1<<PC0); /* Pin PC0 als Ausgang für Drehen Links */
         DDRC = (1<<PC4); /* Pin PC4 als Ausgang für Led */
    Die Einstellung der ersten Zeile wird durch die 2. Zeile wieder überschrieben.
    MfG
    Stefan

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Ist dieser Chip noch "jungfräulich"? Dann kanns sein, dass dort auf PORT C der übliche Verdächtige namens JTAG aktiv ist. Der krallt sich da dann ein paar der Pins, die man dann nicht verwenden kann.
    #ifndef MfG
    #define MfG

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Wie sternst geschrieben hast, musst Du die beiden Zeilen "oderhaft" benutzen:
    DDRC |= ...

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    19.09.2008
    Ort
    Bielefeld
    Alter
    46
    Beiträge
    70
    Der Chip ist "jungfräulich", wie kann ich das mit den Pins ändern?

    Ich habe mal dieses hier versucht weil PC3 ja auch als Eingang ist:

    if ((PINC&0x0D)==1) { /* Pin PC0=1 und PC2=0 " PC3" dann... */

    und jetzt leuchtet die Led, wenn ich PC2=1 und PC3=1 ist.
    (Leider nicht PC0=1 und PC2=0)
    Oder muss ich den PINC&0x0D anderes definieren?

    AH,

    sehe grade das an Board, wenn ich die Tasten drücke es auf 0V gezogen wird und nicht 5V raus gibt, muss eben den Eingang negieren, mal sehen ob es dann klappt

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen