Hallo, ich habe mein LCD Anzeigeproblem gefunden, allerdings kann ich es mir nicht erklären. Wenn ich den befehl itoa verwende dreht er mir alles verkehrherum. d.h. bei folgendem Code: WaterDisplay = 201; itoa(WaterDisplay,s,16); strcat(s,"C"); WriteLCD(s); steht folgendes auf dem Display: 102C Der String wird von der WriteLCD Funktion korrekt ausgelesen und dargestellt. ein WriteLCD("Das ist ein Test") funktioniert tadellos! also scheint der Fehler beim itoa zu liegen. WaterDisplay ist übrigends ein unsigned int. habs aber auch schon mit unsigned char und int probiert, bei beidem das selbe problem. Gibts noch ne andere Lösung oder kennt jemand das Problem. CPU ist ein Tiny26 Gruß Malte.
:
Gesperrt durch User
Hallo Malte Also meiner Meinung nahc müsste auf der Anzeige C9C stehen. Mit itoa(WaterDisplay,s,16) wandelst du die Zahl 201 in einen Hexstring (Basis 16) um, wobei als Resultat C9 herauskommen müsste. Um eine dezimalzahl zu erhalten müsstest du itoa(WaterDisplay,s,10) verwenden. Warum bei dir allerdings 102C angegeben wird ist mir völlig schemenhaft. Wie ist denn dein s deklariert? Gruss Christian
Hi, die 16 mußt du dir natürlich wegdenken das sollte ne 10 sein... aber es ist egal ob radix 10 oder 16 ist, die anzeige ist IMMER verkehrtherum... habs auch schon mit einem strrev(s) probiert aber da tut sich GARNICHTS. s ist ein "char s[10];" ist echt komisch...
Irgendwie zerschießt Du Dir den Speicherbereich offenbar wieder, in dem Du das alles machst. Wie das genau funktioniert, müßte man wohl debuggen... Aber itoa() macht am Ende selbst ein strrev(). Du kannst ja mal probieren, Deinen Puffer als statische (bzw. globale) Variable anzulegen.
Hallo Malte, Du hast vor über acht Jahren einen Fehler entdeckt, der mich 2011 auch getroffen hat: Beitrag "Problem mit ltoa" Auch die neueste Version des WINAVR produziert auf dem ATtiny26 die Ausgabestrings von itoa verkehrtherum. Gruß Joachim