Zitat Zitat von oderlachs Beitrag anzeigen
Halle Freunde !

Vieleicht habe ich mich wieder selbst verrant, aber ich komme einfach nicht weiter.
Ich möchte Messwerte(Intergerwerte) auf einen Kontrolldisplay(Test mit 16x2) ausgeben. Aber das umwandlen der Integerwerte in einen String, den ich auf das LCD schreiben kann klappt nicht.
Vielleicht fasse ich die Sache auch komplett falsch an. zu Testzwecken habe ich den Integer einfach mal mit einem Wert 250 belegt. Hier mein Code:

Code:
/**********************************************************************/
//
//  Microchip MPLABX  XC8 Compiler
//
/*********************************************************************/

typedef unsigned char  uChr;

/* ================================================================== */
/*                                                                    */
/*               LCD-Write uChar                                      */
/*                                                                    */
/* ================================================================== */

void Lcd_Write_Char(uChr a)
{
    RS=1;                // => RS = 1
    PDAT=a ;             // => Datenport = a
    EN = 1;              // => E = 1
    __delay_ms(1);
    EN = 0;              // => E = 0
    __delay_ms(1);
}

/* ================================================================== */
/*                                                                    */
/*               LCD-Write String                                     */
/*                                                                    */
/* ================================================================== */

void Lcd_Write_String(uChr *a)
{
     while(*a)  // bis Stringende( = 0)
     {
     Lcd_Write_Char( *a );
     a++;
     }
}

/**********************************************************************/

void main(void)
{   
    Lcd_Init();

    char Buffer[10];
    int i = 250; // Vorgegebener Wert zum Test

    itoa( i, Buffer, 10 );

    Lcd_Write_String(Buffer);

        while(1); // im Testmodus hier Halt
}

/**********************************************************************/
Lcd_Write_String(Buffer) ist was immer bekrittelt wird vom Compiler : mein_lcd_16_2.c:71: warning: (357) illegal conversion of integer to pointer

Nun verstehe ich nicht das es auf einen Integer bezogen ist, wo doch Buffer ein Chararray bzw String ist.
Du bist in eine böse Falle getapt. An deinem Code ist eigentlich alles ok. Dein eigener Typ uChr hat dir zusätzlich die Sicht versperrt, lass ihn einfach weg. Ein String besteht aus chars, das reicht. Und wenn dein Datenport mit 8-Bit unsigned angesprochen werden will, dann caste vor der Ausgabe den char zum Standarddatentyp uint8_t (PDAT = (uint8_t)a;).

Die Funktion itoa ist beim XC8 falsch implementiert. In den üblichen Dokumentationen kommt als Parameter zuerst der Integer und dann der String. Bei XC8 gehts genau anders herum. Daher hat er an erster Stelle bei deinem Aufruf von itoa einen Pointer erwartet, von dir aber einen Integer bekommen. Soweit ist die Fehlermeldung ok. Das Problem geht aber tiefer. Ich hab mal geschaut, ob diese Problem nicht anderswo erkannt worden ist und bin auf follgendes gestoßen XC8 Version 2.xx. Da itoa() in C99 nicht Pflicht ist, kommt das bei V2.00 und neuer von XC8 gar nicht mehr vor. du solltest also sprintf(Buffer, "%d", i); verwenden, das klappt dann auch mit den neuen Compilerversionen (ich bin bei V2.05).

MfG Klebwax

P.S. Noch etwas zu deiner Funktion void Lcd_Write_Char(uChr a). Daß du einfach char nehmen soltest, hab ich schon gesagt. Das Delay von einer Millisekunde ist viel zu groß, eine Mikrosekunde oder ein NOP() reicht da. Und nachdem EN auf low gesetzt wird, braucht man gar kein Delay. Die Zeit, die der Prozessor für das Return und den nächsten Funktionsaufruf braucht reicht da vollkommen. Die Funktion ist also rund zweitausend mal zu langsam.

Und solche Kommentare wie " RS=1; // => RS = 1" sollte man vermeiden. Erstens sagt er das gleiche wie der Code, ist also überflüssig. Schlimmer aber, wenn du den Code mal änderst, wirst du den Kommentar nicht ändern. Dann stehen da zwei sich wiedersprechende Aussagen und machen dir das Leben schwer. Kommentieren sollte man nur, was nicht offensichtlich ist.