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


von Stefan S. (steve021)


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

von karl (Gast)


Lesenswert?


von Stefan S. (steve021)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


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_Funk-AVR-Evaluationsboard#Blinky)

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

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

von Ferkes-Willem (Gast)


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?

von Jean P. (fubu1000)


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ß

von Michael M. (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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-Tutorial:_IO-Grundlagen

von Peter D. (peda)


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.. ?

1
#include <avr\io.h>
2
3
/********************** Bit Macro to define Bit variables *************/
4
struct bits {
5
  uint8_t b0:1;
6
  uint8_t b1:1;
7
  uint8_t b2:1;
8
  uint8_t b3:1;
9
  uint8_t b4:1;
10
  uint8_t b5:1;
11
  uint8_t b6:1;
12
  uint8_t b7:1;
13
} __attribute__((__packed__));
14
15
#define SBIT_(port,pin) ((*(volatile struct bits*)&port).b##pin)
16
#define SBIT(x,y)       SBIT_(x,y)
17
/********************** End Bit Macro *********************************/
18
19
20
/********************** Hardware Definitions **************************/
21
#define TASTE_1         SBIT( PINB,  4 )
22
#define TASTE_1_PULLUP  SBIT( PORTB, 4 )
23
#define LED_1           SBIT( PORTD, 0 )
24
#define LED_1_DDR       SBIT( DDRD,  0 )
25
26
27
/********************** Program code **********************************/
28
int main( void )
29
{
30
  LED_1_DDR = 1;        // LED = output
31
  TASTE_1_PULLUP = 1;   // pullup for key to GND
32
33
  for(;;){
34
    LED_1 = TASTE_1;    // that's it
35
  }
36
}


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


Peter

von sam (Gast)


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?
1
#include <avr\io.h>
2
3
void main()
4
{
5
DDRB=0b00000000; // PORTB auf input
6
PORTB=0b11111111; //Pullups aktivieren
7
8
DDRD=0b11111111; //PORTD aus output
9
while(1) //hauptschleife
10
{
11
PORTD=PINB;  //alles was auf einem der B-pins passiert wird auf die D-pins ausgegeben
12
}
13
}

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.