Forum: Mikrocontroller und Digitale Elektronik Ausgabe 3-stelliger Zahlen auf Display


von Manuwar (Gast)


Angehängte Dateien:

Lesenswert?

hallo zusammen,
ich möchte mit dem ATMega8535 3-stellige zahlen auf dem Display
ausgeben. sobald ich aber irgendeine zahl ausgeben möchte, erhalte ich
eine komplett andere zahl.  es handelt sich hierbei um ein 4x40 zeichen
display

die funktionen sind alle deklariert und im anhang beigefügt.

der funktionsaufruf lautet:

lcd_byte(345);


in der funktion asc_out(unsigned char daten) wird dann jede einzelne
ziffer berechnet und nacheinander ausgegeben.

vielleicht hat mir ja einer ne lösung

danke für eure hilfe

gruß manuwar

von Maddin (Gast)


Lesenswert?

Die Funktion lcd_byte() erwartet als Paramter 'unsigned char',
also ein 8Bit breiter Parameter.
Somit funktioniert es nur mit Zahlen von 0-255.
Du musst die Funktion auf 16Bit aufbohren,
dann gehen Zahlen von 0-65535 ;).

Gruß,
Maddin

von Dieter B (Gast)


Lesenswert?

Hallo Manuwar

Vielleicht heißt die Funktion lcd_byte so, weil sie nur eine Byte
ausgeben kann. Du übergibst aber ein int mit 345.

Was gibt die Funktion denn mit Zahlen < 256 aus ?


MFG
Dieter

von Manuwar (Gast)


Lesenswert?

servus miteinander,

hab jetzt char durch int ersetzt und das tut jetzt. danke für eure
hilfe.

@ Dieter B

< 256 hats natürlich funktioniert!!!

von Dieter B (Gast)


Lesenswert?

Hallo

Schön

Aber meinst es reicht char gegen int zu tauschen, oder hast du noch
mehr geändert.

unsigned int geht ja bis 65535.

Was kommt denn bei 1245 raus ?

Naja, wenn du nur bis 999 brauchst geht es schon, aber der "feine"
Weg ist das nicht.

MFG
Dieter

von Manuwar (Gast)


Angehängte Dateien:

Lesenswert?

hallo dieter b,

hab meine funktion lcd_byte noch um eine zusätzliche zeile erweitert.
damit sind jetzt zahlen bis 9999 abgedeckt.

wenn du zeit und lust hast, könntest du dir ja vielleicht mal die
funktion lcd_string() anschauen. wenn ich nämlich
lcd_string('test');
aufrufe, bekomme ich die fehlermeldung: character constant too long
hat dann das auch mit unsigned char zu tun das das nur 8 bit sind? kann
ich da auch einfach int dafür einsetzen?

vielen dank schon mal im voraus

manuwar

von Manuwar (Gast)


Lesenswert?

hier nochmal der erweiterte lcd_byte() code:

void lcd_byte (unsigned int wert)
{
         asc_out(wert/1000+0x30);  //Tausender Ausgabe
         asc_out(wert/100%10+0x30);  //Hunderter Ausgabe
  asc_out(wert%100/10+0x30);  //Zehner Ausgabe
  asc_out(wert%10+0x30);    //Einer Ausgabe
}

von Dieter B (Gast)


Lesenswert?

Hallo

Versuch es mal mit

lcd_string("Hallo Welt");

anstatt

lcd_string('Hallo Welt');

MFG
Dieter

von Manuwar (Gast)


Lesenswert?

hallo dieter,

hat leider nicht funktioniert. erhalte jetzt die fehlermeldung:
function parameter #1 incompatible with its declaration

hab dir hier mal den prototypen:

void lcd_string (unsigned char *);


und die deklaration:

void lcd_string (unsigned char * ptr)
{
  while(*ptr!='\0')  //Schleife wird ausgeführt, so lange Endekennung
nicht erreicht
  {
    asc_out(*ptr);  //Ausgabe des Wertes des Zeigers
    ptr++;    //erhöhen des Zeigers --> zeigt auf höhere Adresse
  }
}


aufgerufen hab ich das ganze jetzt mit lcd_string("hallo welt");


gruß manuwar

von Dieter B (Gast)


Lesenswert?

Hallo

Die Deklaration stimmt so nicht

void lcd_string (unsigned char *);

Sollte

void lcd_string (unsigned char *ptr);

sein.

MFG
Dieter

von Manuwar (Gast)


Lesenswert?

hallo dieter,
hat leider nichts gebracht!!!

trotzdem danke

manuwar

von Dieter B (Gast)


Lesenswert?

Hallo

Hier darf kein Leerzeichen stehen

void lcd_string (unsigned char * ptr)
                               ---
{
  while(*ptr!='\0')  //Schleife wird ausgeführt, so lange
Endekennung
nicht erreicht
  {
    asc_out(*ptr);  //Ausgabe des Wertes des Zeigers
    ptr++;    //erhöhen des Zeigers --> zeigt auf höhere Adresse
  }
}


also so
void lcd_string (unsigned char *ptr)

MFG
Dieter

von Manuwar (Gast)


Lesenswert?

hallo,

hab in die richtung schon alle variationen ausprobiert. ohne erfolg!!!

gruß manuwar

von Dieter B (Gast)


Lesenswert?

Hallo

Dann häng doch mal deinen ganzen Code hier rein

MFG
Dieter

von Manuwar (Gast)


Angehängte Dateien:

Lesenswert?

kein thema,
steht aber nicht viel drin,
bin ja erst am testen einzelner funktionen!!!

gruß manuwar

von Dieter B (Gast)


Lesenswert?

Hallo

Habe den Code gerade getestet. Läuft soweit ohne Probleme.

Habe aber Winavr im Einsatz und mußte die Port Zugriffe ändern.

Bekomme aber keine Fehlermeldung angezeigt.

Lcd_string läuft im Simulator auch so, wie es soll.

Kann dir leider nicht weiter helfen.

Was benutzt du denn für einen Compiler ?

MFG
Dieter

von Manuwar (Gast)


Lesenswert?

gutem morgen,

ich verwende codevisiona avr!
dann kann man wohl nichts machen!

vielen dank für deine hilfe!

mfg
manuwar

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.