www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie frage ich tasten ab?


Autor: Stefan S. (steve021)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Frage ich Tasten ab z.B wenn ich taster 1 drücke dann soll LED 1 an 
Port D0 leuchten usw.. ?

Programiersprache ist C und Atmege8

Danke im vorraus

Autor: karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan S. (steve021)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber irgendwie steig ich da nicht so ganz durch :-(

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lerne am ehesten mit Beispielcode und beisse mich dann durch 
Datenblätter.

Wenn es dir ebenso geht: Vergleiche deinen geheimen Schaltplan mit dem 
Schaltplan des Pollin Funk-AVR-Evaluationsboards (=> Weblinks bzw. 
Zeichnung beim Beispiel 
http://www.mikrocontroller.net/articles/Pollin_Fun...)

Dann schaue dir bei Übereinstimmung der Taster- und LED-Anschlüsse 
dieses Beispiels an:
http://www.mikrocontroller.net/articles/Pollin_Fun...

Dabei Rechner online halten und das AVR-GCC-Tutorial benutzen, um 
unbekannte Anweisungen zu entschlüsseln.

Autor: Ferkes-Willem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sind deine Kenntnisse?

Ist der Atmega8 bekannt?

Ist das User Manual des Atmega8 bekannt?

Ist die Programmiersprache C bekannt?

An welcher Stelle kommst du nicht weiter?

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
da der Mensch im Gegensatz zum µC sehr träge ist und die Tasten 
entprellen werden sollten.
Würde sich anbieten dein µC sobald ein Pin Low/High, (je nach Schaltung) 
ein Timer zu starten(falls eh ein Timer läuft den benutzen). Nach 100ms 
z.B. prüfen ob immer noch low/high und dann action ausführen !

Gruß

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
blödsinn...
vergiss das erst mal. ist für deine test völlig unerheblich-
lass dich nicht verwirren!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan S. schrieb:
> aber irgendwie steig ich da nicht so ganz durch :-(

Lies dir auch mal die Kapitel im Assembler Tutorial durch. Auf den 
ersten Seiten wird genau dasselbe gemacht: Eine LED mit einem Taster 
ansteuern. Es geht jetzt nicht um das Assembler-Programm an sich, 
sondern um die Erklärungen dazu. Manchmal hilft es, wenn man denselben 
Sachverhalt mit anderen Worten beschrieben bekommt. Dann fügt sich 
plötzlich alles zusammen.

http://www.mikrocontroller.net/articles/AVR-Tutori...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan S. schrieb:
> Wie Frage ich Tasten ab z.B wenn ich taster 1 drücke dann soll LED 1 an
> Port D0 leuchten usw.. ?

#include <avr\io.h>

/********************** Bit Macro to define Bit variables *************/
struct bits {
  uint8_t b0:1;
  uint8_t b1:1;
  uint8_t b2:1;
  uint8_t b3:1;
  uint8_t b4:1;
  uint8_t b5:1;
  uint8_t b6:1;
  uint8_t b7:1;
} __attribute__((__packed__));

#define SBIT_(port,pin) ((*(volatile struct bits*)&port).b##pin)
#define SBIT(x,y)       SBIT_(x,y)
/********************** End Bit Macro *********************************/


/********************** Hardware Definitions **************************/
#define TASTE_1         SBIT( PINB,  4 )
#define TASTE_1_PULLUP  SBIT( PORTB, 4 )
#define LED_1           SBIT( PORTD, 0 )
#define LED_1_DDR       SBIT( DDRD,  0 )


/********************** Program code **********************************/
int main( void )
{
  LED_1_DDR = 1;        // LED = output
  TASTE_1_PULLUP = 1;   // pullup for key to GND

  for(;;){
    LED_1 = TASTE_1;    // that's it
  }
}


Wenn Du aber nur die Aktion "Drücken" auswerten willst, kommt noch 
Entprellen ins Spiel.


Peter

Autor: sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi peter, dein beispiel verwirrt sogar mich als c/c++ programmierer... 
wie soll der arme denn das verstehen, wenn er nichtmal eine LED zum 
leuchten bekommt?
#include <avr\io.h>

void main()
{
DDRB=0b00000000; // PORTB auf input
PORTB=0b11111111; //Pullups aktivieren

DDRD=0b11111111; //PORTD aus output
while(1) //hauptschleife
{
PORTD=PINB;  //alles was auf einem der B-pins passiert wird auf die D-pins ausgegeben
}
}

die taste braucht jetzt blos noch zwischen einen der B-port-pins und 
masse gesteckt werden und die LED mit vorwiderstand und richtigrum an 
die gleiche nummer des D-port-pins

der atmega muss natürlich laufen, d.h. äußere beschaltung beachten VCC, 
100nF kondensator, quarz oder interner tackt etc.
auf dem STK500 ist das natürlich ganz einfach, da man da nur ein wenig 
stecken muss.

aber ich finde das ist in den avr-tutorials gut beschrieben

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.