Hallo zusammen! Habe jetzt seit einiger Zeit ein Dotmatrix Display am laufen. Aufbau wie folgt(Sollte auch ohne Schaltplan klar sein): -Multiplex-Betrieb von zwei mal 7x5 Display -Spalten an PortA, Zeilen an PortD, zusätzlich die "Aktivierung" eines der Displays durch Low an PA5 oder PA6 Im Anhang mein Programm dafür. Es soll den Text in showtext[] Anzeigen, und Zeichenweise nach links scrollen. Das Programm Funktioniert auch, solange man nur Buchstaben, Zahlen oder das Leerzeichen verwendet. bei den Sonderzeichen wird entweder Datenmüll(Auf dem Display ist kein Zeichen zu erkennen) oder ein '<' angezeigt. Probleme gab es zwar schon beim Compilieren(avr-gcc aus winavr 20071221), welcher meckerte, doch konnte ich durch Backslashes '\' vor relevanten Zeichen wie " in den arrays showtext[] und zeichensatz[] die Fehlermeldungen wegbekommen. Der Fehler tritt aber trotzdem auf. Gibt es eine andere möglichkeit, diese Sonderzeichen darzustellen, um (was meine Vermutung ist) dem Compiler den Fehler auszutreiben (vllt optimiert er etwas weg)? Oder entdeckt ihr schlichtweg einen Fehler von mir, der soetwas verursachen könnte? Vielen Dank für euere Gedanken und Zeit, Dominic
Hi Dominic, Du hast zwei Möglichkeiten: 1. "character excape sequences", z.B. \\ für \ \' für ' \" für " oder 2. Du benutzt die hexadezimalen oder oktalen Werte, z.B. \x22 für " \o42 für " Gruß Fred
Vielen Dank für deine Antwort! Habe das jetzt alles so geändert, also alle Sonderzeichen in \x.. geändert(nach ASCII-Tabelle), aber jetzt zeigt es das gleiche an. Also immernoch nur Mist. Schade. Ich glaube der Fehler sitzt doch irgendwo anders. aber wo...keine Ahnung. Vielleic ht habe ich auch trotzdem etws falsch gemacht. Würde mich freuen wenn sich mein "neues" Programm jemand ansehen könnte. Bin für jeden Tip dankbar. MfG, Dominic
Hallo Dominic, gleich bei den ersten Zeilen Deines Codes habe ich tief Luft geholt, nämlich hier: for(i=0;i<=(laenge-2);i++){ for(j=0;j<=63;j++){ if(showtext[i] == zeichensatz[j]){ zeichen[i]=j; break; } } } Deine Zeichentabelle ist doch in ASCII-Anordnung, oder? Dann könntest Du Dir die Suche z.B. so vereinfachen (hier mal so geschrieben, dass es in Deinen Code passt): char *showtext_=showtext; char *zeichen_=zeichen; while (*showtext_) *(zeichen_++)=(*showtext_++)-'A'; Wenn nötig, kannst Du in die while-Schleife auch noch einen Zähler einfügen, wenn Du die Elemente zählen willst. Weiter habe ich dann nicht gesucht... Was ist denn jetzt genau das Verhalten des Programms: Welche Zeichen gehen, welche nicht? Wenn Du das genau erklärst (wie im ersten Posting??), lässt sich besser nach dem Fehler suchen. Ich nehme an, Du hast die 5x7-Tabelle schon überprüft? Die ist schwer im Kopf nachvollziehbar, da "negative Logik". Gruß Fred
Noch zwei Nachträge: Bei meinem Beispiel habe ich Zeichen als char und nicht als int angesehen - lässt sich anpassen, obwohl mir ein char Pointer sinnvoller für char Adressen scheint! Was willst Du übrigens mit for(i=0;i<100;i++) zeichen[i]=84; erreichen -- Du füllst zeichen[] dann danach doch noch einmal? Gruß Fred
Warum läuft j in dieser Schleife nicht durch die gesamte Länge des Zeichensatzes? for(i=0;i<=(laenge-2);i++){ for(j=0;j<=63;j++){ if(showtext[i] == zeichensatz[j]){ zeichen[i]=j; break; } } } Hier meine Alternative (da liegt aber wahrscheinlich nicht das Problem): char *showtext_=showtext; i=0; while (*showtext) zeichen[i++]=*(showtext_++) -'A';
@Fred S. Meine Suche habe ich nach bestem Wissen und Gewissen gestaltet, wie man so schön sagt. Will heißen dass ich soetwas ähnliches schon einmal programmiert habe (erstes Semester Info, war glaub ich ein Buchstaben-Zähl-Programm). Habe die Idee genommen, angepasst. Mit Pointer habe ich mich noch nicht beschäftigt. Und dementsprechend keine Ahnung. Werd ich mir aber für später merken. Meine 5x7 Tabelle habe ich nicht überprüft. Ich habe mir zum erstellen des "Zeichensatzes" ein Programm geschrieben, mit welchem ich diese Werte errechnet habe(errechnen habe lassen). Nachdem die Buchstaben und Zahlen stimmen, nehme ich den Rest auch als korrekt an. Die Anzeige zeigt Text inkl Leerzeichen und Zahlen fehlerfrei an. Verwende ich allerding Sonderzeichen in showtext[], so werden diese nicht angezeigt. Eher Datenmüll...man könnte es mit Emmentaler vergleichen. Dort, wo Käse ist, leuchtets, bei den Löchern nicht. Ein System bei diesen "Zeichen" erkenne ich nicht, scheinen nie zwei gleiche zu kommen. Immer eine neue Scheibe Käse :-) Mit meiner Schleife habe ich das Array zeichen mit, ich glaube, einem Leerzeichen vorbelegt. War zur Fehlersuche gedacht.Mein Gedanke war, dass evtl. auf eine Stelle im Array gezeigt wird, wo noch nichts hinein geschrieben wurde. Dort könnte ja dann auch irgendetwas stehen, und somit ein nicht identifizierbares Zeichen hervorrufen. Danke für die Hilfe! MfG Dominic PS: Habe gerade noch deinen letzten Beitrag gesehen. Das 63 stammte noch aus der Zeit, als nur Groß und kleinbuchstaben, Zahlen und das Leerzeichen implementiert waren. 26+26+10+1=63. Dort könnte auch der Fehler liegen...Gleich ausprobieren...
Hi Dominic, ersetze einfach diese Schleife mit if und break durch meine Zeilen oben. Mit welcher Entwicklungsumgebung arbeitest Du? Steht Dir ein Simulator zur Verfügung? Gruß Fred
Es geht!!! Habe einfach die veraltete "63" durch ein "87" ersetzt, welches die neue Länge des Arrays ist. Und es geht... Manchmal sieht man eben nix mehr. Ich glaube ich sollte mir angewöhnen, solche zahlen, wie diese Länge, in einer Variablen zu speichern (sizeof() könnte da auch helfen...). Aber ich danke dir auf jeden Fall für deine Hilfe. MfG, Dominic
Hallo Dominic,
> Es geht!!!
schön! Du siehst, mit Pointern wäre es gar nicht zu dem Problem
gekommen! Ich möchte Dich deshalb ermutigen, Dir den Umgang mit Pointern
anzueignen.
Viele Grüße
Fred
Hallo Fred, Ja, damit wäre der Fehler nicht aufgetreten. Bin aber erst am Anfang meiner C-Laufbahn (Programmiere seit ca einem Jahr gelegentlich). Ich denke aber, in den nächsten Vorlesungen in der FH sollten laut Skript auch Pointer dran kommen sehe ich gerade. Meine Kenntnisse sollte also weiterhin wachsen. Ich Danke dir auf jeden Fall für deine Hilfe bei der Suche nach meinem Flüchtigkeitsfehler. Aber wenn ich gerade schon da bin, vielleicht hat noch jemand eine Idee: Ich will das zeichenweise Scrollen auf Spaltenweises umstellen. Gibt es da irgendwelche Ansätze? Meine Idee war es, ein char Array mit 15 Plätzen(wie nannte man das noch gleich?) zu nehmen, und in dieses 3 aufeinanderfolgende Zeichen (mit ihren 5 Spalten) zu laden. 3 Zeichen deshalb, weil auf einem 2 stelligen Display maximal 1 ganzes und 2 unvollständige Zeichen angezeigt werden können. Aus diesem Array werden dann, je nach scroll-Position von einem anderen Punkt startend, die Spalten ausgegeben. Ist man am Ende, beschreibt man dieses Array neu. Allerdings denke ich, dass das neu-beschreiben recht lange dauert, und somit Pausen entstehen könnten. MfG, Dominic
Hallo Dominic, Dein Ansatz für das Verschieben in Spalten klingt gut und wird wohl kaum zu langsam sein, wenn es nicht übermäßig kompliziert programmiert ist und Du den Zugriff auf die Spalten geschickt gestaltest. Viel Erfolg! Gruß Fred
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.