Forum: Mikrocontroller und Digitale Elektronik Funktion wird nicht ausgeführt mit Ausgabe auf LCD


von Lars O. (nelo)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche mich mittlerweile seit Stunden mit einer ganz simplen 
einfachen Aufruf Funktion mit etwas auf meinem LCD Display ausugeben und 
ein Menü mittels 3 Tastern zu steuern, aber die Ausgabe bzw. der Aufruf 
der Ausgabe findet nicht statt.
Compiliert wird ohne Fehler und bis zu einem Punkt funktionierten die 
ersten Ausgaben auch bis nur noch ein H im Display erscheint. Ich finde 
meinen Fehler leider nicht, erschlagt mich bitte nicht direkt...
Bin auch nicht all zu weit in Sachen C Programmierung und muss mir alles 
ganz langsam aneignen.

Es geht sich um den Aufruf meines Hauptmenüs ab Zeile 257. Bis dahin 
funktioniert alles soweit und die Ausgabe kommt.

Wäre euch sehr dankbar für einen Tipp...

Vielen lieben dank

Lars

p.s. kompletter c code ist angefügt.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Benutz doch mal die Funktion
1
lcd_puts_P("String")
 für deine Stringanzeigen. Ich habe jetzt nicht mitgezählt, aber jeder 
dieser Strings kostet Platz im RAM, wenn du lcd_puts() benutzt.
Da die Ausgabe auch erst dann abbricht, wenn du die Interrupts 
freigibst, solltest du auch nochmal nach Portkonflikten suchen.
Schaltplan kann nicht schaden, und im Zweifelsfall mal die 'lcd.h'

von Krapao (Gast)


Lesenswert?


von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Krapao schrieb:
> Kleiner Korrekturvorschlag:
> lcd_puts_P( PSTR("String") );
> http://www.nongnu.org/avr-libc/user-manual/group__...

Hast bestimmt recht, allerdings läufts bei mir auch ohne PSTR ausm 
Flash. Keine Ahnung warum, habe Peter Fleury aber auch erst in einem 
Projekt benutzt, um endlich mal meine LCD Berge abzuarbeiten.

von Lars O. (nelo)


Lesenswert?

Danke für eure Vorschläge, die Ausgabe allgemein Funktioniert nach der 
Initialisierung auch.

D.h. der Text ZEile 214  "PA" - MB -TN - Ln wird noch jeweils korrekt 
ausgegeben, danach das LCD gelöscht die Wartezeit klappt auch nur danach 
kommt der Aufruf meiner Anzeige für mein Menü nicht wo ich die Taster 
abfrage.
Das Menu an sich habe ich in anderer Form auch schon mal funktionsfähig 
gehabt sollte also eher nur was mit dem Aufruf oder dem nicht abfragen 
der Taster zu tun haben.
Die Funktion der Taster habe ich vorab schon überpfüft bevor ich die 
Ausgabe auf das LCD gemacht habe.
Habe zum Testen jeweils mit dem Taster eine LED an und ausschalten 
lassen, somit sollte der Teil auch stimmem...

weiß leider nicht mehr weiter..

MFG

von Krapao (Gast)


Lesenswert?

Du hast Recht und ich habe da was vermurxt. Dein Code läuft deswegen:

> AVR-GCC-Tutorial
> extern void lcd_puts_p (const char *progmem_s);
> #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s))

Sorry, hatte nicht auf _p und _P geachtet.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Lars O. schrieb:
> Habe zum Testen jeweils mit dem Taster eine LED an und ausschalten
> lassen, somit sollte der Teil auch stimmem...
>
> weiß leider nicht mehr weiter..

Sehr schön, das du diesmal den Schaltplan und die lcd.h mitgepostet hast 
;-P Nu wissen wir immer noch nicht mehr. Meinen Hinweis mit den 
Interrupts mal durchdacht? Kommentier mal das sei() aus und guck, obs 
dann weitergeht.

von Lars O. (nelo)


Angehängte Dateien:

Lesenswert?

Entschuldige Matthias Sch. habe den LCD.h vergessen. Bin mittlerweile 
etwas ausgebrannt, da ich seit Tagen an diesem Projekt hänge und so 
einige 100 Fehler gamacht habe.
Den Schaltplan habe ich angehängt, ist aber denke ich eher unwichtig. 
Habe zum testen für alles das "myAVR Board MK2" erweitert mit einem 4x20 
Zeichen LCD Display und die Taster und LED s der Boards benutzt.

von Lars O. (nelo)


Lesenswert?

Matthias Sch. schrieb:
> Interrupts mal durchdacht? Kommentier mal das sei() aus und guck, obs
> dann weitergeht.


Habe das SEI() auskommentiert aber es bringt leider keine Veränderung.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Pass mal bitte in lcd.h noch diese Zeile an deine Quarzfrequenz an:
1
#define XTAL 3686400              /**< clock frequency in Hz, used to calculate delay timer */
Dann werden deine Variablen nicht initialisiert, hmen, einst und man 
sollten alle mit sinnvollen Werten beim Starten besetzt werden.

Und was soll diese Zeile:
1
return 253;
Du kannst ja aus main() nicht zurückkehren. Wohin auch? Muss weg.

von Lars O. (nelo)


Lesenswert?

Ok, lcd.h ist angepasst.

Die Variablen werden nicht initialisiert ? Ich war der Meinung dies in 
Zeile  75 zu machen.

 uint8_t zurueck=1;                 // Variable zurück zum 
Hauptbildschirm
 uint8_t aut=1;               // Variable für Betrieb Automatische
 uint8_t einst=1;                      // Variable für Einstellungen
 uint8_t man=1;       // Manuelle Wassersteuerung
 uint8_t hmen=1;    // Variable für das Hauptmenu

wo würdest du das und wenn wie machen ?

das return hab ich schon rausgenommen, war nur ein verzweifelter 
Versuch..

THX

von Oliver (Gast)


Lesenswert?

hmm... main() wird einmal ausgeführt. Und dann? Müsste dein Menü nicht 
in irgendeiner Endlosschleife laufen?

von Lars O. (nelo)


Lesenswert?

Oliver schrieb:
> Endlosschleife

Danke dir, ich würde mal sagen genau das habe ich vergessen... :-)

was ein wenig Abstand zur Sache das Leben einfach machen kann. Hab eine 
da Schleife eingefügt und mein LCD Menü funktioniert wunderbar.

Euch allen vielen Lieben dank...

von Karl H. (kbuchegg)


Lesenswert?

Lars O. schrieb:
> Oliver schrieb:
>> Endlosschleife
>
> Danke dir, ich würde mal sagen genau das habe ich vergessen... :-)
>
> was ein wenig Abstand zur Sache das Leben einfach machen kann.

Ein übersichtliches Programm, bei dem du Funktionsteile in Funktionen 
aufgeteilt hättest, würde dir das Leben noch viel einfacher machen.

von Lars O. (nelo)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Funktionen

HI, das würde ich eventuell auch tun, aber ich weiß leider nicht genau 
wie ich das alles anwenden soll. Habe für das ganze wirklich eine lange 
Zeit gebraucht um das zu verwirklichen.
Wenn du mir eventuell ein kontretes Beispiel gibst kann ich es 
vielleicht besser umsetzten. Muss mir noch jeden Befehl genaustens 
ansehen...

Thx

Lars

von Werner (Gast)


Lesenswert?

Lars O. schrieb:
> plan.JPG

Das sieht ja grausig aus. Hast du schon mal drüber nachgedacht, das JPEG 
als Kompressionsverfahren für Photos mit Farbverläufen und 
strukturierten Flächen optimiert ist und für Schaltpläne ein eher nicht 
geeignetes Format ist?

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.