Forum: Mikrocontroller und Digitale Elektronik Problem beim Compilieren einer einfach Tastenabfrage


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich habe hier ein Anfängerproblem. Ich habe hier einen ATMEGA32L 
mit einer 5x2 Tastenmatrix und habe ein Codebeispiel aus dem Forum 
umgearbeitet. Leider bekomme ich beim Compilieren den Fehler:

"../my_display.c:4: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before '{' token"

In der Datei 'my_display.h' steht lediglich:

unsigned char read_tast(void)

Zur Hardware ist zu sagen:

An PORTA0..4 sind die Reihen 1-5 angeschlossen.
An PORTA5..6 sind die Spalten 1-2 angeschlossen.

An PORTD7 ist eine LED angeschlossen.

Eigentlich hatte ich vor im Hauptprogramm die Tastaturabfragefunktion 
aufzurufen und deren Rückgabewert in der if Schleife auszuwerten. Also 
im Moment wird nur ein Tastendruck erkannt, nicht aber welche Taste 
genau gedrückt wurde. Leider klappt selbst das nicht :-(

Hat jemand einen Tipp?

Danke
Peter

von Michael H. (mah)


Lesenswert?

my_display.h auch posten

-m

von der mechatroniker (Gast)


Lesenswert?

Steht nach dem Prototypen in der .h denn auch das Semikolon?

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Nein, kein Semikolon aber wenn ich eins hinzufüge bekomme ich noch mehr 
Fehler... .

von Karl H. (kbuchegg)


Lesenswert?

Peter wrote:
> Nein, kein Semikolon aber wenn ich eins hinzufüge bekomme ich noch mehr
> Fehler... .

Es muss dort aber hin.

Die restlichen Fehler müssen dann eben aussortiert werden. Einer nach 
dem anderen, beim ersten beginnen. Denk auch drann, das oftmals durch 
die Behebung des ersten Fehlers viele nachfolgende Fehler ganz von 
alleine verschwinden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter wrote:
> Nein, kein Semikolon aber wenn ich eins hinzufüge bekomme ich noch mehr
> Fehler... .
Dann lass es besser weg ;-/

> ... bekomme ich noch mehr Fehler... .
Dürfen wir die jetzt erraten?

Was ist das für ein Compiler, dass du sowas schreiben kannst:
   PORTA.6=1;

von Karl H. (kbuchegg)


Lesenswert?

Und noch was:
Ich hab jetzt ehrlich gesagt keine Lust, deinen Code erst mal vernünftig 
zu formatieren, um zu sehen ob du irgendwo ein { zuviel, oder ein } 
zuwenig, oder ein { zuwenig oder ein } zuviel hast.
Gewöhn dir am besten jetzt gleich an eine Einrückungsstrategie an. Sowas 
ist keinesfalls Luxus und ist auch nicht etwas was man im Nachhinein 
macht. Vernünftige Einrückung macht man während man den Code schreibt 
und man achtet peinlich genau darauf, dass die Einrückungstiefe auch 
immer stimmt. Denn dann hilft einem die Einrückung
* simple { } zuviel/zuwenig Fehler zu vermeiden
* die logische Struktur eines Programmes auch optisch zu verdeutlichen

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Entschuldigung. Ich habe den Code noch einmal sortiert. Ich hoffe, dass 
es nun besser lesbar ist.

Ich arbeite mit dem avr-gcc. Zum Thema 'PORTA.6=1;': Ich hatte mich 
schon gefreut, dass ich eine einfachere Art gelernt habe, die einzelnen 
Bits zu manipulieren. Nun befürchte ich, dass das Codebeispiel für eine 
andere Umgebung war... . Sorry bin echt neu auf dem Gebiet.

Peter

von Johannes M. (johnny-m)


Lesenswert?

Peter wrote:
> Ich arbeite mit dem avr-gcc. Zum Thema 'PORTA.6=1;': Ich hatte mich
> schon gefreut, dass ich eine einfachere Art gelernt habe, die einzelnen
> Bits zu manipulieren.
Eine einfache, aber nicht Standard-konforme Art...

> Nun befürchte ich, dass das Codebeispiel für eine
> andere Umgebung war... .
So sieht es wohl aus.

> Sorry bin echt neu auf dem Gebiet.
Nun, das war jeder mal.

von Stefan_KM (Gast)


Lesenswert?

Taste1, Taste2 und uc_tastabfr1 sind undefiniert!?

Zudem fehlt der Funktionsprototyp der Funktion read_taste.

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

So, ich habe das mal umgeschrieben. Ich hoffe, meinte eigentlich dass 
das so richtig ist. Compilieren geht ohne Fehler durch. Nur 
funktionieren tut es nicht. Die LED geht an, nur geht sie nicht auf 
Tastendruck aus.

>Zudem fehlt der Funktionsprototyp der Funktion read_taste.

In der my_display.h steht:

unsigned char read_taste(void);

Das müsste doch reichen, oder muss das in der my_display.c auch noch 
stehen?

Hat noch jemand einen Tipp?
Peter

PS: Kann man eigentlich irgendwie zwei Dateien anhängen?

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

...sorry, habe noch ein paar Fehler gefunden.

Im Anhang der aktualisierte Code, der leider immer noch keinen Einfluss 
auf die LED hat :-(

Peter

von Stefan E. (sternst)


Lesenswert?

1
  DDRA |= 0b00100000;      // Bit PA6 als Ausgang schalten
2
  //DDRA.6=1;      
3
  PORTA &= ~(0b00100000);   // Bit PA6 l�schen = Spalte 1 auf low
4
  //PORTA.6=0;
Du schaltest PA5, nicht PA6.
Bei allen weiteren ähnlichen Zeilen ist es das gleiche Problem.

von Peter (Gast)


Lesenswert?

Hallo Stefan,

nein das ist schon richtig:
1
DDRA |= 0b00100000;      // Bit PA6 als Ausgang schalten
2
//DDRA.6=1;

Ich komme da immer etwas durcheinander, denn im Datenblatt vom ATMEGA 
ist der Port doch von PA1..8 durchnummeriert, aber an anderern Stellen 
wird beim Zählen mit 0..87 begonnen.

An den ersten 5 Leitungen des PORTA sind die fünf Reihen angeschlossen, 
an den nächsten zwei Leitungen sind die beiden Spalten angeschlossen. 
Das höchste Bit 7 (bzw. 8) ist nicht belegt.

Peter

von Johannes M. (johnny-m)


Lesenswert?

Peter wrote:
> Hallo Stefan,
>
> nein das ist schon richtig:
>
>
1
> DDRA |= 0b00100000;      // Bit PA6 als Ausgang schalten
2
> //DDRA.6=1;
3
>
Nein, das ist falsch ! Die korrekte Zählung beginnt bei Null. Das was 
Du setzt, ist Bit Nummer fünf.

> Ich komme da immer etwas durcheinander, denn im Datenblatt vom ATMEGA
> ist der Port doch von PA1..8 durchnummeriert,
Wo?

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Stimmt. Ist von PA0 an durchnummeriert. Ich hatte noch meinen Schaltplan 
vor Augen. Dort ist der Controller falsch angelegt, d.h. mit 1 beginnend 
durchnummeriert.

Ich habe das bereinigt.

Peter

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.