www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerproblem mit PullUp Widerstand


Autor: Phil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe ein kleines Problem mit einem Schalter, dieser ist über einen 
PullUp-Widerstand an die MCU geschaltet. Also für Bit = 0 gedrückt. Dann 
soll ein anderer Pin an dem sich eine Diode gegen Vcc befindet auf 
Ausgang "low" geschaltet werden. Irgendwie komm ich da nicht wirklich 
weiter ich weiß nicht warum die Led nicht aus geht wenn ich die Taste 
betätige, vielleicht kann mir ja jemand weiterhelfen. PORTC soll Ausgang 
und PORTD Eingang sein.
Danke.
Hier der Code:
         ldi r16, 0xFF
         out DDRC, r16
     out PORTD,r16

         ldi r16, 0x00
         out DDRD, r16
     sbi PINC,2

main:   sbic PIND,2
     rjmp main
     cbi PINC,2
     rjmp main

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Hardware/Schaltung mag ich nichts sagen, weil mir der Schaltplan 
oder eine Skizze fehlt. Zur Software:

     ; Port C als Ausgang einrichten
     ldi r16, 0xFF
     out DDRC, r16 ; 0xff => alle Pins an Port C auf Ausgang

     ; Port D als Eingang einrichten
     out PORTD,r16 ; Port D ist noch vom Reset her Eingang, 
     ; diese Zeile schaltet also die internen Pullups ein
     ; möglicherweise Schreibfehler sinnvoller z.B.
     out PORTC,r16 ; alle Pins an Port C HIGH

     ldi r16, 0x00 
     out DDRD, r16 ; 0x00 Port D auf Eingang 

     sbi PINC,2    ; ??? Sinnvoll könnte sein sbi PORTC,2
     ; um Ausgang PC2 HIGH zu setzen

main:   
     sbic PIND,2   ; PD2 abfragen, wenn LOW, dann nächsten
     ; Befehl überspringen
     rjmp main
     cbi PINC,2    ; ??? Sinnvoll könnte sein cbi PORTC,2
     ; um Ausgang PC2 LOW zu setzen
     rjmp main

; Alternative:
main:   
     sbis PIND,2   ; PD2 abfragen, wenn HIGH, dann 
     cbi PORTC,2   ; diese Zeile überspringen
     rjmp main


Autor: Dennis U. (atmegadennis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Phil,

sortiere doch ersteinmal deinen Code, dann wird das ganze vllt auch 
etwas leichter zu lesen

Versuch es einmal mit diesem Code und du wirst mehr erfolg haben:

         ldi r16, 0xFF
         out DDRC, r16

         ldi r16, 0x00
         out DDRD, r16

main:
     sbic PIND,2
     rjmp main
an:
     ldi r16, 0xff
     out PORTC,r16
     sbis PIND,2
     rjmp an
aus:
     sbic PIND,2
     rjmp aus
     ldi r16, 0x00
     out PORTC,r16
loop:
     sbis PIND,2
     rjmp loop
     rjmp main


mit dieser Version solltest du mehr Erfolg haben

Gruß

Dennis

Autor: Phil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnellen Antworten. Hat so weit geklappt, glaube 
auch dass ich das mit der Zuweisung der Ports jetzt begriffen habe, wird 
sich noch zeigen ;-).
Kann mich nur nochmal bedanken ;-)

Gruß Phil

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm lieber den Code von Dennis. Bei meinem Code (und deinem) wird der 
Portzustand ja nie zurückgesetzt, auch wenn die Taste losgelassen wird!

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.