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
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.
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?
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ß
blödsinn... vergiss das erst mal. ist für deine test völlig unerheblich- lass dich nicht verwirren!
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.