PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verstehe das mit dem I2C nicht



khazad
10.01.2005, 10:52
Hi,

ich benutzte einen Mega8 an dem ein LCD display hängt und licht sensoren + CNY 70 für linien verfolgung und einem Mega16 jetzt möchte ich z.b. das
der Mega16 dem Mega8 eine Zahl schickt z.b. 266 und der die dann auf dem LCD ausgibt leider habe ich keine ahnung was ich hardware mäßig aber auch software mäßig machen muss damit das funktioniert. Hoffe ihr könnt mir da helfen ich werde versuchen wenn mein Internet zu hause wieder funzt mal meinen bisherigen code zu posten aber der hat damit eigentlich noch nichts zutun.


Mfg Maik

tobimc
10.01.2005, 13:06
HI

Der I²C kann keine Zahlen größer 256(=1 Byte) senden.
Du könntest aber die Zahl 266 in einzelzahlen zerlegen 2 - 6 - 6
diese dann in strings "2", "6", "6" diese dan in ASCII-Zahlen,
50, 54, 54, und diese dann an deinen Slave senden.
Der hat dann sogar weniger Arbeit, und muss die Zahlen nur noch in
"266" zurückverwandeln, und du sparst die die Umwandlung vin Byte -> String.

Auf dem LCD ausgeben, fertig.

Liebe Grüße, Tobi

10.01.2005, 13:11
Hast du vllt mal einen Code Schnipsel oder sowas ?? wie funzt das mit dem ausseinander nehmen ?`? und wieder zusammen setzen ? schaltung ???

mfg Maik

tobimc
10.01.2005, 13:17
Hi

Nein, Snippets habe ich leider keine.

Das Auseinandernehmen sollte unter BASCOM und den richtigen Funktionen kein Problem sein...
Da muss man etwas experimentieren...

Liebe Grüße, Tobi

bhm
10.01.2005, 13:42
Die Frage ist mal wieder: welche Programmiersprache ?
In C bastele ich gerade an einem ähnliche Problem ( und hab natürlich Probleme ..)
ciao .. bernd

bhm
10.01.2005, 13:47
Die Frage ist mal wieder: welche Programmiersprache ?

nehme die Frage zurück, hab den Betreff nicht richtig gelesen! :oops:

Thebe
10.01.2005, 14:17
Du könntest auch einfach statt 3 Bytes in nem String auch 2 Bytes seperat senden und die dann per Shift left/right das Word wieder zusammensetzen.

Schade das Bascom eine ziemlich billige Sprache ist, ansonsten wäre das ne Sache von wenigen Zeilen, ich schätze ma mit Bascom wirste anständig rumhantieren müssen.

Ansonsten hardware und softwaremäßig steht so gut wie alles in der Bascom Hilfe drinne unter I2C bzw. TWI. Da solltest eigentlich genug dazu finden.

tobimc
10.01.2005, 14:39
HI

@thebe:
Warum 2 Bytes separat senden? So nach dem Motto 200 + 66 = 266?
Was macht er dann, wenn er 1025 versenden will? :D
Wenn er es gleich als Text versendet, hat er ausserdem im Empfänger, der das ja eh alles auf's LCD schieben (und deshalb in einen String umwandeln) muss micht mehr so große Probleme.
/@

Wenn du mit len() die Länge deines Strings(Zahl) feststellst, kannst du auch herausfinden, wie lange deine Übertragung sein muss.
Wenn du die 3 Bytes in einer Sendung verschickst, dann dauert das ausserdem nur halb so lang, wie wenn du 3 Bytes einzeln(mit Addresse) verschickst.

Das SIND in BASCOM wenige Zeilen.
BASCOM unterstützt viele der BASIC-Stringfunktionen.


Ich habe ein I²C-LCD, das ich hardwaremäßig ansteure(steuerzeichen usw). Das dauert einige ms bis es voll ist. solange braucht es Rechenzeit, und blockiert den I²C.
Deshalb würde ich hier eh zu UART raten, da kann man schneller ganze Strings übertragen, und die Auswertung in BASCOm dauert nicht halb so lange.


Liebe Grüße,
Tobi

Thebe
10.01.2005, 16:42
tobimc, einfach Hexadezimal denken! ;)

1025 sind 0x0401, jeweils 2 Stellen sind 1 Byte.
Erstmal die 0x04 senden und dann die 0x01. Wenn die 0x04 übertragen wurde schreibt man die in ein Word, shifted das um 8 bit nach links (sprich 0x0400 haben wa dann) und dann addiert man die 0x01 noch drauf.
Endresultat: 0x0401 / 1025

Kann man natürlich genauso mit Integer machen nur das man die Dinger mehrmals zerteilen/wieder aufsplitten muss.

Vorteil: bis zu 65535 kommt man mit 2 Bytes aus, bis 2147483647 kann man auch nur 4 Bytes senden. Wo man sonst 11 (10 Zeichen plus 1 Byte Länge) senden muss, sinds nur 4 die man in ner FOR Schleife wieder zusammen fassen kann (pi mal Daumen 5 Zeilen)

pebisoft
10.01.2005, 18:33
ganz einfach, machste eine software-serielleschnittstelle mit bascom und sendest die daten als string und mit den befehl val kannste den dann in eine zahl umwandeln. oder machste prinbin und inputbin falls du gerne mit bytes arbeiten möchtest. ich glaube der user thebe ist noch ein greenhorn in sachen bascom.
mfg pebisoft

Thebe
10.01.2005, 19:55
pebi, Du magst zwar Recht haben das ich gerade mit dem Schnickschnack anfange (Hola, ganze 6, gleich 7 Beiträge hab ich, da liegt sowas nahe) und sicherlich von Bascom noch lange nicht alles gesehen hab.

Aber mal ehrlich. Ich konnte wenigstens aus dem Thread herauslesen das es um I²C und Zahlen > 255 geht. ;)

pebisoft
10.01.2005, 20:23
das hast du gewusst, aber wie kommt ihr darauf, das khazad das mit i2c machen will, da steht kein wort von.
mfg pebisoft

Thebe
10.01.2005, 22:38
weils im Titel steht ?? 8-[

Aber ich muss Dich unterstützen, es ist nicht 100pro klar ersichtlich aus dem Post von ihm und ich weiß es 100pro weil ich ihn ca. jedes WE persönlich sehe, also Schwamm drüber ;)