Forum: Mikrocontroller und Digitale Elektronik CAVR problem mit der lcd_gotoxy(,); fkt.


von Marcel Meyer (Gast)


Lesenswert?

Naben freunde der Nacht,

benutze schon seit einiger Zeit Codevision AVR (vollversion...)
und hatte auch nie probleme, jedoch geht seit neustem die

lcd_gotoxy(0,0); funktion nicht, d.h. sie verschiebt alles um
~14 Zeichen nach rechts und springt nicht wie gewünscht an den anfang
des LCDs...

das ganze sieht wie folgt aus: (- = leerstelle im display)

----------------
-----------Text-

und nicht wie gewünscht:

Text------------
----------------

quellcode schnippsel:

unsigned char g_temp[5];
....
lcd_clear();
lcd_gotoxy(0,0);
itoa(rpm,g_temp);
lcd_puts(g_temp);
....

eine neuinstallation hat leider auch nix gebracht :(

ich hoffe das jmd. noch ne idee hat wodran es liegen könnte.

Mfg
Marcel

von leo9 (Gast)


Lesenswert?

ich vermute dass deine Software zwar an die richtige Position schreibt,
aber aus irgendeinem Grund dein display mit offset darstellt, schau mal
im Datenblatt nach dieser Funktion.

Verwendest du den RS-Pin noch für andere Funktionen? dann könnte es
sein dass du möglicherweise mit puts ins instruction-Register schreibst
und dadurch das Display verkonfigurierst.
Oder schreibst du an anderer Prg.Stelle ins Instruction-Register? dann
bist du möglicherweise "selber schuld".

reduzier mal den code auf
lcd_init
lcd_clear
lcd_goto
lcd_putchar('*')
wenn das klappt ist das Display in Ordnung.

grüsse leo9

von Marcel Meyer (Gast)


Lesenswert?

das das display in ordnung ist, habe ich vorher schon getestet
(parallele schnittstelle...)...

habe jetzt mal nen kurzen code geschrieben, und da funktioniert die
lcd_gotoxy(0,0); funktion, sseeeehrrr merkwürdig...
habe ansonsten nur noch einen DS1820 temp fühler angeschlossen und auch
im programm "verankert", funktioniert auch eigentlich alles
fehlerfrei, nur die funktion eben nicht... bin jetzt am auskommentieren
der DS1820 fkt. mal schaun an welcher Zeile es liegt...

danke aber schon mal für deine Hilfe :)

Mfg
Marcel

von Marcel Meyer (Gast)


Lesenswert?

also es liegt scheinbar an genau dieser zeile:

devices=w1_search(0xf0,rom_codes);

kommentiere ich diese aus so funktioniert es wunderbar den cursor zu
verhschieben, allerdings hilft mir das jetzt eher weniger weiter :(

von emil (Gast)


Lesenswert?

ich würde mir das datenblatt des ds18x20 genauer auschauen;
je nach modell ist bei denen der datenstream unterschiedlich formatiert
(kann mich erinnern, habe schwierigkeiten mit einem ds1822, ist aber
schon lange her...) glaube genau dasselbe trifft bei dir zu, du
bekommst von ihm die richtige zahl nur mit 14 null-stellen davor oder
sowas...

von Marcel Meyer (Gast)


Lesenswert?

das problem habe ich aber immer, selbst wenn ich die ausgelesene temp.
nicht anzeige sondern nur die drehzahl...

von leo9 (Gast)


Lesenswert?

dann poste halt die Schaltung und den ganzen source, codeschnippsel ohne
uP-Type, Initialisierung und möglicherweise störende Interruptroutinen
ist keine gute Grundlage zum Fehler erraten.

grüsse leo9

von Marcel Meyer (Gast)


Angehängte Dateien:

Lesenswert?

Habe nur diverse rechnungen rausgenommen da diese keine register oder
sonstiges verändern

von leo9 (Gast)


Lesenswert?

bin zwar zu faul mich mit allen Definitionen zu beschäftigen, mir fallen
aber zwei mögliche Fehler auf:
*) unsigned char rom_codes[MAX_DEVICES,2];
du reservierst zwei Byte pro device, die search-Routine will aber 9
Byte speichern
*) unsigned char g_temp[5];
unsigned int rpm=0;
rpm kann fünfstellig werden, du reservierst für den Ausgabestring aber
nur fünf Zeichen, damit schreibt itoa auch ins nirwana

Wenn eins davon der Fehler war, ist wieder einmal der Beweis erbracht
dass Wirth doch die bessere Programmiersprache entworfen hat, mit c
kann man zwar alles machen, sich aber genauso schnell selbst
vernichten.

grüsse leo9

von Marcel Meyer (Gast)


Lesenswert?

*) unsigned char rom_codes[MAX_DEVICES,2];
du reservierst zwei Byte pro device, die search-Routine will aber 9
Byte speichern

danke danke danke :)

genau dadran hat es gelegen, hab wohl gedacht [MAX_DEVICES,2] = maximal
mögliche angeschlossene geräte.... aber jetzt hats auch klick gemacht
:)

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.