Ausgabe EDIP240 über I2C will nicht so

Gast #2900051
Lesenswert?

hallo zusammen,

versuch schon seit einem tag eine ausgabe auf das Edip240 hin zu 
bekommen.
Hab einen LM75 der über I2C ausgelesen wird und dann auf das MyAVRLCD 
ausgegeben -> wird funktioniert einwandfrei.
Jetzt zu meinem Problem: (bin noch Anfänger)
Ich möchte gerne das erste Byte aufteilen damit ich zwei hex Stellen 
haben z bsp. für 21°C (0x32)+(0x31) schaff es aber einfach nicht. Oder 
mach ich das hier komplett falsch. bzw gibt es einen einfacheren weg.
Wenn ich aber einen Fixwert sende (0x34) schreibt er mir auch das 
richtige hin in dem fall 4.
Der Anhang ist halt recht ein saustall aber für tips sollte er 
reichen...
Vielleicht kann mir von euch jemand ein paar tips geben.
danke im Voraus schon mal
Angehängte Dateien:
#2900102
Lesenswert?

Scary schrieb:


> Jetzt zu meinem Problem: (bin noch Anfänger)
> Ich möchte gerne das erste Byte aufteilen damit ich zwei hex Stellen
> haben z bsp. für 21°C (0x32)+(0x31) schaff es aber einfach nicht.

  21 dividiert durch 10 ergibt 2
  21 modulo 10 (der Rest der Division) ergibt 1

Warum?
weil
  2 * 10 + 1 wieder die 21 ergibt.

  74 / 10    ergibt 7
  74 % 10    ergibt 4

warum?
weil    7 * 10 + 4 wieder die 74 ergeben

Dein Byte1, welches du zum LCD schickst und das dir die erste Ziffer 
einer 2-stelligen Zahl anzeigt, hat also den Wert
    byte1 = ( wert / 10 ) + '0';
dein Byte2, welches dann den ASCII Code für die Einerstelle realisiert, 
hat also den Wert
    byte2 = ( wert % 10 ) + '0';
#2900117
Lesenswert?

Scary schrieb:

> Der Anhang ist halt recht ein saustall

Das ist eines der Probleme.
Mach dir erst mal eine Funktion, die dir einen String ausgibt. Denn das 
hier
bcc = 0x11 + 0x0B + 0x1B + 'Z' + 'F' + '5' + 0x1B + 'Z' + 'L' + 0x41 + 
0x0B + berechnung + 0x00 ;

kannst du in der Pfeife rauchen. Wenn die Prüfsumme stimmen soll, dann 
musst da da auch die Dinge berücksichtigen, die du tatsächlich schickst. 
Und das blödeste, was du tun kannst, ist da jetzt irgendwelche Dinge 
anzunehmen.

Also eine Funktion, die einen String verschickt und dabei die korrekte 
Prüfsumme für diesen String berechnet.

Und dann baust du dir eine Funktion, die dir den zu sendenden String 
anhand der Zahl zusammenbaut. Hast du den String, dann benutzt du die 
Stringausgabefunktion um ihn zum LCD zu schicken.

So wie du das jetzt machst, machst du dir eine Menge Arbeit für nichts.


void lcdString( const char* txt )
{
  ...
}
Gast #2900963
Lesenswert?

erstmal danke danke danke karl heinz.

funktioniert!!!!

die lösung wär so einfach wenn man sie weis...

hab aber trotzdem noch ein paar fragen.
das mit dem string ist klar . zur zeit bin ich nur in der probefase da 
ich das projekt sowieso noch weitgehend überdenken muss. mir geht es zur 
zeit nur mal darum das zu verstehen was ich da mach. und deswegen hab 
ich diese wurst so geschrieben. (war schon froh überhaupt einen 
übertragung geschafft zu haben )

und da nochmal zum ersten.

74 / 10 = 7 soweit klar
aber
74 % 10 = 4 verstehe ich leider noch nicht ganz
wird da nur die erste zahl verwendet oder wie

und wie wär dass dann bei einer 3stelligen zahl angenommen 742 ???
vielleicht könnten sie mir dass nochmal ein bischen erklären.

danke im voraus
scary
Gast #2901094
Lesenswert?

Modulo = Der Rest der Division (nicht der Bruchteil hinter dem Komma!)

Beispiel (aus Wikipedia geklaut):

7:3 = 2, Rest 1, da 7 = 3×2 + 1 („drei passt zweimal in 7 und es bleibt 
eins übrig“ – der Rest ist also eins)

2:3 = 0, Rest 2, da 2 = 3×0 + 2
3:3 = 1, Rest 0, da 3 = 3×1 + 0


Deine Frage: 742 % 10 = 2

743 % 10 = 3
744 % 10 = 4
745 % 10 = 5
etc

Du siehst: Der Modulo-Rest hat nichts mit der Anzahl de Stellen zu tun

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren