mikrocontroller.net

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


Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Haberler (mah)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
my_display.h auch posten

-m

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht nach dem Prototypen in der .h denn auch das Semikolon?

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan_KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Taste1, Taste2 und uc_tastabfr1 sind undefiniert!?

Zudem fehlt der Funktionsprototyp der Funktion read_taste.

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...sorry, habe noch ein paar Fehler gefunden.

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

Peter

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

nein das ist schon richtig:
DDRA |= 0b00100000;      // Bit PA6 als Ausgang schalten
//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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter wrote:
> Hallo Stefan,
>
> nein das ist schon richtig:
>
>
> DDRA |= 0b00100000;      // Bit PA6 als Ausgang schalten
> //DDRA.6=1;
> 
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?

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.