Forum: Compiler & IDEs Ausgabe EDIP240 über I2C will nicht so


von Scary (Gast)


Angehängte Dateien:

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

von Karl H. (kbuchegg)


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';

von Karl H. (kbuchegg)


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 )
{
  ...
}

von Scary (Gast)


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

von Modulierer (Gast)


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

von Scary (Gast)


Lesenswert?

ok jetzt hab ich es kapiert.

Danke nochmal auf mikrocontroller.net ist einfach immer verlass

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
Noch kein Account? Hier anmelden.