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
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
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
servus miteinander, hab jetzt char durch int ersetzt und das tut jetzt. danke für eure hilfe. @ Dieter B < 256 hats natürlich funktioniert!!!
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
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
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 }
Hallo Versuch es mal mit lcd_string("Hallo Welt"); anstatt lcd_string('Hallo Welt'); MFG Dieter
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
Hallo Die Deklaration stimmt so nicht void lcd_string (unsigned char *); Sollte void lcd_string (unsigned char *ptr); sein. MFG Dieter
hallo dieter, hat leider nichts gebracht!!! trotzdem danke manuwar
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
hallo, hab in die richtung schon alle variationen ausprobiert. ohne erfolg!!! gruß manuwar
Hallo Dann häng doch mal deinen ganzen Code hier rein MFG Dieter
kein thema, steht aber nicht viel drin, bin ja erst am testen einzelner funktionen!!! gruß manuwar
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.