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
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.
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;
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
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
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.
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?
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
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?
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