mikrocontroller.net

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


Autor: Marcel Meyer (Gast)
Datum:

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

Autor: leo9 (Gast)
Datum:

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

Autor: Marcel Meyer (Gast)
Datum:

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

Autor: Marcel Meyer (Gast)
Datum:

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

Autor: emil (Gast)
Datum:

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

Autor: Marcel Meyer (Gast)
Datum:

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

Autor: leo9 (Gast)
Datum:

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

Autor: Marcel Meyer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe nur diverse rechnungen rausgenommen da diese keine register oder
sonstiges verändern

Autor: leo9 (Gast)
Datum:

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

Autor: Marcel Meyer (Gast)
Datum:

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

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.