mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taster auslesen.


Autor: jrraid (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

nach tagelangem rumprobieren muss ich jetzt leider doch hier posten weil 
ich meinen fehler einfach nicht finde. hab mir auch schon zig mal das 
tutorial dazu durchgelesen. es geht um eigentlich ne banalität. ich 
möchte nen taster einlesen. taster gedrückt LED leuchtet taster nicht 
gedrückt LED aus.
benutze einen atmega32 dafür und folgenden code.
#include <io.h>
#include <iom32.h>

int main(void)
{  

    DDRD = 0xff; 
    DDRD &= ~( 1 << DDD4);      //PORT4 als Eingang
    
  
  while(1) {

  
    if ( PIND & (1<<PIND4) )
    {
    PORTD |= ( 1 << PD6 );
    }
 
  
 
    if ( !(PIND & (1<<PIND4)) )
    {
    PORTD &= ~( 1 << PD6);   
    } 
  }
}


So leuchtet die LED einfach nur. Egal ob ich was drücke oder nicht.
Wenn ich allerdings "DDRD &= ~( 1 << DDD4);" weg lasse. Funktioniert das 
ganze einwandfrei... Jetzt bin ich ehrlich gesagt verwirrt. Wie kann 
etwas eingelesen werden, obwohl ich den PORT gar nicht als Eingang 
geschaltet hab. Im Angang der Aufbau btw

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für einen AVR benutzt Du denn? Und welche Toolchain?

Das hier:
#include <io.h>
#include <iom32.h>
sieht jedenfalls etwas daneben aus.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach das Pollin-Board. Löte mal C18 aus, dann gehts besser.

Und man definiert Eingänge nicht erst als Ausgänge.
Man läßt sie Eingänge, sonst kanns nen Kurzschluß geben.


Peter

Autor: jrraid (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutz nen Atmega32 und gnu gcc

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann sollte statt der beiden obigen include Zeilen nur die folgende da 
stehen:
#include <avr/io.h>

Und um Peters Bemerkung aufzugreifen:
    // DDRD = 0xff; 
    // DDRD &= ~( 1 << DDD4);      //PORT4 als Eingang
    DDRD = 1 << DDD6;      // Pin 6 am Port D als Ausgang

Autor: jrraid (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok hab ich alles gemacht :)
(bis auf den C18 rausgelötet)
die LED leuchtet aber einfach nur. beim tastendruck passiert gar nix.
eigentlich sollte der code aber funktionieren so wie er da steht oder ?

Autor: jrraid (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und vorallem warum funktioniert das ganze wenn ich alle pins als 
ausgänge definier? das ergibt irgendwie wenig sinn für mich ich dachte 
der kann nur was einlesen wenn ich das als eingagn definiert hab. oder 
kanns sein dass ich beim löten irgendwie mist gebaut hab? bisher hat 
aber alles wunderbar funktioniert.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jrraid schrieb:
> und vorallem warum funktioniert das ganze wenn ich alle pins als
> ausgänge definier?

Schlechte Idee, das verursacht bei Tasterdruck einen Kurzschluß!
Vermutlich wird der AVR dabei dann resetet.

> oder kanns sein dass ich beim löten irgendwie mist gebaut hab?

Wäre möglich.

> eigentlich sollte der code aber funktionieren so wie er da steht oder ?

Eigentlich ja.

Versuch doch mal den C18 mit einem Stück Draht zu überbrücken. Geht die 
LED dann aus?

Autor: misch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jrraid schrieb:
> und vorallem warum funktioniert das ganze wenn ich alle pins als
> ausgänge definier?

Dann fehlt der Pull-Up oder (eher) Pull-down und Du bekommst einen 
definierten Ruhezustand nur, wenn Du den Pin als Ausgang schaltest (und 
den entgegengesetzten Zustand durch einen Kurzschluss über den Taster).

Autor: jrraid (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt gehts vielen danke.
und zwar hatte ich noch n display dran. hab irgendwie net erwartet dass 
das probleme macht ^^. anfänger fehler halt.

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.