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.
#1407640
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ß
#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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.