mikrocontroller.net

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


Autor: Manuwar (Gast)
Datum:
Angehängte Dateien:

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

Autor: Maddin (Gast)
Datum:

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

Autor: Dieter B (Gast)
Datum:

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

Autor: Manuwar (Gast)
Datum:

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

Autor: Dieter B (Gast)
Datum:

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

Autor: Manuwar (Gast)
Datum:
Angehängte Dateien:

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

Autor: Manuwar (Gast)
Datum:

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

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Versuch es mal mit

lcd_string("Hallo Welt");

anstatt

lcd_string('Hallo Welt');

MFG
Dieter

Autor: Manuwar (Gast)
Datum:

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

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Die Deklaration stimmt so nicht

void lcd_string (unsigned char *);

Sollte

void lcd_string (unsigned char *ptr);

sein.

MFG
Dieter

Autor: Manuwar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo dieter,
hat leider nichts gebracht!!!

trotzdem danke

manuwar

Autor: Dieter B (Gast)
Datum:

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

Autor: Manuwar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

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

gruß manuwar

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Dann häng doch mal deinen ganzen Code hier rein

MFG
Dieter

Autor: Manuwar (Gast)
Datum:
Angehängte Dateien:

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

gruß manuwar

Autor: Dieter B (Gast)
Datum:

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

Autor: Manuwar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gutem morgen,

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

vielen dank für deine hilfe!

mfg
manuwar

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.