Hallo Leute, Ich möchte u.a. gerne eine 3x4 Matrix Tastatur mit meinem Atmega8 zu verbinden. Als Denkanstoß dient mir dabei ein C-Code hier aus dem Forum. http://www.mikrocontroller.net/attachment/48476/matrix3x4.c Dazu habe ich ein paar Fragen und würde mich freuen, wenn ihr mir helfen könntet. 1. u8 findet die selbe Verwendung wie unsigned char. richtig? 2. Wie binde ich diese Datei in meinen C-Code ein? In "int main" oder gehört das noch davor? 3. Wie kann ich die eingegebene Zahl auf einem Display darstellen? mit lcd_string(col-row);? Vielen Dank für eure Mühe Gruß Micha
Michael Lambertz schrieb: > 1. u8 findet die selbe Verwendung wie unsigned char. richtig? In dem Fall ist es besser das u8 gegen ein char auszutauschen. Schau dir den Arrayinhalt an. Lauter Character. Also sollte man auch den richtigen Datentyp dafür nehmen. Eben char > 2. Wie binde ich diese Datei in meinen C-Code ein? In "int main" oder > gehört das noch davor? Kopier den Inhalt vor deine main. Das ist eine Funktion, die aufgerufen werden will. > 3. Wie kann ich die eingegebene Zahl auf einem Display darstellen? > mit lcd_string(col-row);? No. VOn der Funktion kriegst du offenbar eine Nummer zurück. Diese Nummer ist die Nummer der Taste. Aus dem MXKEY_TAB Array kriegst du dann direkt das zugehörige Zeichen als Character. Den mann dann natürlich ausgeben kann. uint8_t keyNr = keyscan(); lcd_putc( MXKEY_TAB[keyNr] );
Vielen Dank für die ausführliche Antwort, Karl-Heinz. Deine Tipps klingen sehr vielversprechend.
Wart mal. Der Kommentar hier
1 | return col - row; // 1..12 = key |
macht mich stutzig. Wenn der stimmt, dann ist die Verwendung so gedacht
1 | uint8_t keyNr = keyscan(); |
2 | if( keyNr != 0 ) |
3 | lcd_putc( MXKEY_TAB[keyNr - 1] ); |
Steht denn davon nichts im Begleittext zum Artikel wo du den Code herhast?
Hallo, Ich hab meinen C-Code dementsprechend umgeschrieben. (s.Anhang) Leider klappt die LCD-Ausgabe nicht so recht. Auf dem kompletten Display tauchen nur ungewöhnliche Zeichen auf. Der Mikrocontroller erkennt zwar einen Tastendruck, kann den aber nicht verwerten, bzw. auf dem Display darstellen und gibt ein anderes Zeichen, anstatt einer Ziffer aus. Vielleicht weiß einer von euch, wo ich den Fehler gemacht habe. Danke und Gruß Michi
Probier doch mal das hier aus
1 | int main() |
2 | {
|
3 | |
4 | int main (void) |
5 | {
|
6 | char buffer[20]; |
7 | uint8_t keyNr; |
8 | |
9 | lcd_off(); // LCD Reset |
10 | lcd_init(); // Initialisierung des LCDs |
11 | |
12 | while( 1 ) |
13 | {
|
14 | keyNr = keyscan(); |
15 | |
16 | if( keyNr != 0 ) |
17 | {
|
18 | lcd_setcursor( 0, 1 ); |
19 | sprintf( buffer, "Code %02d, Zeichen %c", (int)keyNr, (char)MXKEY_TAB[keyNr - 1] ); |
20 | lcd_string( buffer ); |
21 | }
|
22 | }
|
23 | }
|
Klappt leider immernoch nicht :( Ich dank dir aber für deine Mühe, Karl-Heinz. Hast mir sehr geholfen. Ich werd mir wohl einen anderen Lösungsweg suchen müssen. Bis dann...
Michael Lambertz schrieb: > Klappt leider immernoch nicht :( Was heißt: klappt immer noch nicht. Welche Zahlen stehen den für 'Code' dort? Da dürfen nur zahlen von 1 bis 12 auftauchen. > Ich werd mir wohl einen anderen Lösungsweg suchen müssen. Wie wärs mit: den vorhandenen Code reparieren? Bisweilen sollen Programmierer sowas sogar machen! Oder kaufst du immer gleich ein neues Auto, wenn die Radkappen schmutzig sind? Vorausstzung ist natürlich, dass derjenige, der am Motor rumschraubt zumindest weiß, wie rum man einen Schraubendreher anfasst.
Karl Heinz Buchegger schrieb: > Was heißt: klappt immer noch nicht. > > Welche Zahlen stehen den für 'Code' dort? Da dürfen nur zahlen von 1 bis > 12 auftauchen. Die LCD-Ausgabe klappt leider immer noch nicht. Jetzt tauchen keine Zeichen mehr auf, sondern alle Felder des Displays sind nun komplett schwarz. Tastendruck wird auch nicht mehr erkannt. Hab schon verschiedene Befehle für die LCD-Ausgabe versucht.
Michael Lambertz schrieb: > Die LCD-Ausgabe klappt leider immer noch nicht. Dann solltest du dich zuerst mal um das LCD kümmern, anstatt da einen 2-Fronten Krieg zu inszenieren, den du nicht gewinnen kannst. Ich bin bisher eigentlich schon davon ausgegangen, dass du dein LCD unter Kontrolle hast, wenn du nach einer Tastatur-Matrix frägst.
Karl Heinz Buchegger schrieb: > Ich bin bisher eigentlich schon davon ausgegangen, dass du dein LCD > unter Kontrolle hast, wenn du nach einer Tastatur-Matrix frägst. Bisher hat die Anzeige auf dem LCD auch hervorragend funktioniert. Eine AD-Wandlung mit Anzeige der Messergebnisse funktionierte bisher problemlos. Hast du möglicherweise eine Erklärung, warum das oben beschriebene Ereignis beim Display eintreten kann?
Michael Lambertz schrieb: > Hast du möglicherweise eine Erklärung, warum das oben beschriebene > Ereignis beim Display eintreten kann? zb dadurch, dass I/O Pins vom LCD mit I/O Pins vom LCD im Clinch liegen. zb dadurch, dass unsauber programmiert wurde und Pins irrtümlich verändert werden, die gar nicht verändert werden sollen bei einem Zugriff.
Du hast Recht, Karl Heinz. In der lcd.h Datei hatte ich einige Ports gemeinsam sowohl für das LCD als auch für die Tastatur konfiguriert, was ich nicht berücksichtigt habe. Nach tagelangem Suchen und Rumprobieren habe ich den vermeintlich "einfachen" Fehler also doch noch gefunden. Danke...
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.