Wie frage ich tasten ab?

Persönliche Seite #1407295
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.
#1407760
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
#1407778
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
Gast #1407875
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren