PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taster abfragen beim myAVR MK3



Mnemonic82
23.11.2009, 14:26
HI...
Versuche auf dem MK3 nen taster abzufragen...wenn der Taster betätigt ist sollen die leds um eins erhöht werden...
ich weiss nich wo der fehler is...

#define F_CPU 16000000
#include <avr\io.h>
#include <myavr.h>

int main (void)
{

DDRL=0xFF;
DDRK=0x00;

uint8_t wert=0;
uint8_t eingabe;
PORTK=0xFF;

while ((PINK & (1<<PINK7) ))
{

PORTL=wert;
wert++;


waitMs(200);
}
return 0;
}

shedepe
23.11.2009, 14:51
mach mal
while(1) //Endlosschleife
{
und hier fragst du mit einem if die Taster ab wobei du noch an das entprellen dieser denken solltest


}

so wie du es im moment machst läuft die schleife ja nur wenn der Taster gedrückt ist, was selten der fall sein düfte

KingTobi
23.11.2009, 14:51
Also wen n du nicht direkt beim Start den Taster gedrückt hast, dürfte das Programm sofort zuende sein.

Mnemonic82
23.11.2009, 15:09
bin anfäger...
hat vielleicht jemand nen funktionierenden quelltext?

KingTobi
23.11.2009, 15:12
Vielleicht


while (1)
{
if(PINK & (1<<PINK7))
{
PORTL=wert;
wert++;
}


waitMs(200);
}
return 0;
}

Ceos
23.11.2009, 15:55
ich würde die waitMs noch mindestens in die if abfrage reintun, sonst fragt der controller den taster nur alle 200mS einmal ab und das ist schon recht viel zeit in der man den taste eben mal antippen kann ohne dass er es merkt ...

besser wäre noch, wenn du 2 if abfragen verschachteln würdest

so ala pseudocode

if (taste gedrück) warte 15ms; if (taste noch immer gedrückt) +1;

stichwort hier ist "entprellen" : wenn du drückst, registriert der controller ein oder zwei dutzend signale, daher beim ersten zeichen eines drückens, kurz warten und dann nochmal nachschauen ob auch wirklich gedrückt wurde

Mnemonic82
23.11.2009, 19:13
bin anfänger....wollte mit dem entprellen noch warten, sah nich einfach aus...
mein eigentliches problem isses das mk3 mit avrstudio zu programmieren...wo kommt die verdannte myavr.h hin????

KingTobi
23.11.2009, 19:19
Z.B. in deinen Projekt Ordner, kenn die myAvr.h nicht, aber ich bezweifel das du sie unbedingt brauchst. Die wird dir wahrscheinlich nur ein paar Sachen erleichtern.
Die Grundlagen solltest du schön zu Fuß machen.

Das entprellen solltest du gleich benutzen, sosnt bekommst du falsche Ergebnisse und wunderst dich warum dein Programm n ciht macht was es soll!

Mnemonic82
23.11.2009, 19:25
im projektordner isse...funktioniert trotzdem nich...
fehler is das er waitms nich kennt....

KingTobi
23.11.2009, 19:26
Musst du eventuell auch zum Projekt hinzufügen

Mnemonic82
23.11.2009, 19:28
../test.c:3:19: error: myavr.h: No such file or directory

Mnemonic82
23.11.2009, 19:30
als source oder headerdatei?

KingTobi
23.11.2009, 19:31
.h natürlich als Header

Mnemonic82
23.11.2009, 19:32
hab ich...trotzdem funzt es nich...

KingTobi
23.11.2009, 19:34
#include "abc.h"
Machs mal so

Mnemonic82
23.11.2009, 19:36
../test.c:3:17: error: abc.h: No such file or directory

KingTobi
23.11.2009, 19:37
Statt abc.h natürlich deine Datei!!

Mnemonic82
23.11.2009, 19:41
wie meinste denn das???

KingTobi
23.11.2009, 19:45
#include "myAvr.h"

Mnemonic82
23.11.2009, 19:46
hab ich ja, findet die aber nich...

KingTobi
23.11.2009, 19:48
Und du hast auch Anführungszeichen statt den spitzen Klammern benutzt?!

Mnemonic82
23.11.2009, 19:53
nein hatte ich nich...*schäm*
vielen dank für die hilfe
also die header ins projrktverzeichnis und in "....alles klar...danke nochmal...

Mnemonic82
23.11.2009, 19:58
kriegs jetzt aber nich geflasht...

KingTobi
23.11.2009, 20:01
Weil?
15Zeichen...

Mnemonic82
23.11.2009, 20:07
weiss nich...wenn ich ichs übertrage sagt er alles is ok, aber auf dem board tut sich nix...

Mnemonic82
23.11.2009, 20:20
mein quelltext...
#define F_CPU 16000000
#include <avr\io.h>
#include "myavr.h"
//Feld mit Zeichensatz erstellen
uint8_t font7seg [] =

{
0b00111111, /* 0 */
0b00000110, /* 1 */
0b01011011, /* 2 */
0b01001111, /* 3 */
0b01100110, /* 4 */
0b01101101, /* 5 */
0b01111101, /* 6 */
0b00000111, /* 7 */
0b01111111, /* 8 */
0b01101111, /* 9 */
0b01110111, /* A */
0b01111100, /* B */
0b00111001, /* C */
0b01011110, /* D */
0b01111001, /* E */
0b01110001, /* F */
0b01000000, /* - */
0b00000000, /* */
0b01001001 /* 3 waagerechte Striche */
};

int main (void)

{

//Port-B als Ausgang konfigurieren (für 7-Segment-Anzeige)
DDRB=0xFF;


//den Zähler, mit Null vorbelegen
uint8_t index=0;

while (true)
{
//das Zeichen welches an Position von index im Zeichensatz steht an Port-B ausgeben
PORTB=font7seg[index];

//Zähler um eins hochzählen
index++;

//wenn Zähler grösser als Anzahl der Zeichen im Zeichensatz,
//dann Zähler wieder auf erstes Zeichen setzen
if(index==19)
index=0;

//500ms warten = Makro aus der myAVR.h
waitMs(500);

}

return 0;
}

KingTobi
23.11.2009, 20:36
Benutz bitte die Code Tags.
Ich sehe da so keinen Fehler. Sicher das mit der Hardware alles passt?

Mnemonic82
24.11.2009, 05:20
was meinst du mit code tags?
studio erkennt die hardware, liest die kennung ohne probleme aus...

Mnemonic82
24.11.2009, 05:55
Entschuldige...klar Code tags...werd mich dran halten...

Mnemonic82
24.11.2009, 12:50
jetz läuft wenigstens schonmal avrstudio richtig....

KingTobi
24.11.2009, 13:54
Brauchst dich nicht entschuldigen, aber mit Code Tags isses viel einfacher zu lesen!

Mnemonic82
27.11.2009, 07:27
Kann mir jemand erklären, wie man mit avrstudio im laufenden Programm die Ports beobachten kann?

KingTobi
27.11.2009, 13:47
Sowas geht nur über JTAG, ich denke nicht das das MK3 das bietet.

Mnemonic82
27.11.2009, 15:13
laut hersteller hat das mk3 das...
wie wird den jtag angesprochen?