ok! naja werde mir mal die Englische Seite heute Arbend durch lesen !
ok! naja werde mir mal die Englische Seite heute Arbend durch lesen !
Gruß
MiniMax
I2Cwbyte 255 setzt alle Ausgänge des PCF auf HigH weil 255 dezimal ist und Binär 1111 1111 entspricht. Einfacher und übersichtlicher ist es die Binär Schreibweise zu nehmen, dann lautet der Befehl I2Cwbyte &B11111111. Jede 1 steht für einen ausgang auf High, willst dur nur jeden zweiten Ausgang setzen musst du schreiben I2Cwbyte &B10101010 usw. Der vollständigkeit halber sei noch erwähnt das es auch noch die Hexadezimale schreibweise gibt, dann würde ein Befehl der jeden zweiten Ausgang auf high setzt I2cwbyte &H55 oder invertiert i2cwbyte &HAA.
Einfach mal experimentieren.
Gruß
Neutro
Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
(Mark Twain)
Und wie komme ich auf die Hexadezimal bzw. dezimal befehle? Und wenn ich z.B. nur den 3. Ausgang auf on Setzen möchte heißt dass dann: I2Cwbyte &B00100000 ?????
Gruß
MiniMax
Nicht ganz, da es so aussieht P7|P6|P5|P4|P3|P2|P1 Das bedeutet wenn du den 4ten Ausgang setzen willst musst du 00001000 senden. Wenn du von Binär in Hexadezimal umrechnen willst ist das relativ einfach. Du solltest schauen, dass du immer 8 Ziffern hast. Wenn du weniger hast füllst du auf der linken Seite die Stellen auf bis du die 8 Ziffern hast. Wenn du die 8 Ziffern hast teilst du es in 2x4Ziffern auf (in der Mitte teilen). Auf der rechten Seite von den 4 Ziffern hast du 1, die 2te Stelle ist 2, die dritte Stelle ist 4 und die 4te Stelle ist 8. Überall wo du eine 1 hast zählst du die Werte zusammen. Die Ziffern von 0 bis 9 entsprechen den Zahlen von 0 bis 9. Von 10 bis 15 fängst du mit "A" an. 15 wäre "F". Als Beispiel der Ausgang 3 setzen.
Code:in Binär 00001000 Aufteilen in 2x4 Ziffern 0000 1000 die Wertigkeit der einzelnen Stellen 8 4 2 1 8 4 2 1 0 0 0 0 1 0 0 0 Das Ergebnis Die ersten vier Ziffern (4x0) 0x8+0x4+0x2+0x1=0 und den 2ten 4 Ziffern 1x8+0x4+0x2+0x1=8 Als Ergebnis kommt heraus Hex 08
Noch etwas genauer:
Es gibt unterschiedliche Zahlensysteme.
Wir als Menschen haben 10-Finger daher rechen wir von 1 bis 10, so wie wir es gewohnt sind. (Gut es gibt auch Menschen mit 11 oder mehr Fingern, die zählen (gelten) aber nicht).
Der Computer (konnte) nur 8-Bit und die lassen sich eben kürzer als Hexadezimalzahlen schreiben.
Das dezimale Zahlensystem hat Ziffern von 0 bis 9 (0123456789) Maximum = 9 danach erfolgt ein Übertrag
Das binäre Zahlensystem hat nur die Ziffern 0 oder 1 (01) Maximum = 1 danach erfolgt ein Übertrag
Das hexadezimale Zahlensystem hat die Ziffern von 0 bis F (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) Maximum = F danach erfolgt ein Übertrag
Binär:
Ein Byte besteht aus 8 Bit (ist ja bekannt oder)
Das niedrigste Bit ist rechts und wird Bit 0 genannt, von rechts nach links (also so <--- rum) haben wir dann Bit0, Bit1, Bit2,... bis Bit7 (das ist dann das achte Bit, da man mit 0 begonnen hat).
(Das ist jetzt echt saublöd zum darstellen, da wir ja von links nach rechts schreiben)
Jedes Bit entspricht einem Wert (Tabelle) von 2^n (2HOCHn) wobei n die Bitnummer ist (Probiers mal mit dem Taschenrechner aus)
- Noch einfacher ist es mit dem Windows-Taschenrechner, schalte auf Wissenshaftlich um, stelle auf DEZ geben deinen Wert ein und schalte dann auf BIN oder HEX. Das geht auch in alle anderen Richtungen (Zahlenformate), ganz wie du willst.
Hexadezimal:
wenn man nun ein Byte in der mitte Teilt erhält man zwei Nibble(s)
Mit 4-Bit kann man von 0-15 Zählen oder in HEX 0..F (wie von 021aet04 beschrieben)
So nun nimmt man einfach das untere Nibble und notiert dessen wert (4-Bit) und das gleiche macht man mit dem oberen Nibble, wobei man wieder mit 0 beginnt und nicht dem Wert wie er an dieser Stelle gelten würde (der richtige Wert ergibt sich automatisch durch den Übertrag).
Siehe Da:
In so ziemlich jeder Programmiersprache kann man die Werte in der gewünschten Notation schreiben.Code:170dez = 10101010bin = AAhex Name Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Wert 128 64 32 16 8 4 2 1 Formel 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 (2^0 = 1) Beispiel Binär 1 0 1 0 1 0 1 0 = 10101010 bin Dez. 128 + 0 + 32 + 0 + 8 + + + 2 + 0 = 170 dez Hexadez. A (10dez) A (10dez) = AA hex
Voraussetzung ist nur dass man dem Compiler/Interpreter vorher sagt was das da nu sein soll, da der Quelltext "normalerweise" alle werte als dezimalzahlen interppretiert, wenn da jetzt auf einmal 10101010 stehen würde, könnte der Compiler dies als "Zehnmillioneneinhunderteinstausendundzehn" interpretieren, sowas passt natürlich nicht in eine 1Byte große variable (max 255). Also muss man einen Hinweis mitgeben was der Code darstellen soll.
In Bascom z.B wird durch das voranstellen von
&B10101010 mitgeteilt, daß das folgende ein Binär wert sein soll oder durch
&HAA das es ein Hexadezimalwert sein soll.
Bei dezimalzahlen brauchst/kannst du nichts explizit angeben.
Andere Programmiersprachen andere Sitten, jenachdem mit welcher Programmiersprache du arbeitest gelten dort andere Kennzeichnungen der Zahlensysteme (welche das sind? ...na schau in der Anleitung nach)
Also: 170 = &HAA = &B10101010
Wenn du nu nur eine Lampe (LED) anschalten möchtest, dann setzte nur die entsprechenden Bits auf 1 und alle anderen Bits auf 0.
So nun kannst du daraus einen Wert bilden und in einer dir beliebigen Schreibweise eingeben.
Alles Verstanden?
Hinweis:
Du meinst wohl den 4. Ausgang oder?Zitat von 021aet04
Ist ja nur um den "armen Kerl" nicht noch ganz zum ausflippen zu bringenZitat von 021aet04
![]()
Gruss
Darwin (meine Projekte sind auf meiner Pinnwand zu finden)
Sorry Darwin du hast recht. Habe es schon geändert
hey Jungs! Danke habe so ziemlich (hust hust) alles verstanden![]()
Aber wenn ich jetzt in Hex dem Controller sende, er soll den 4 Port ein schalten, woher weiß er dass??? denn aus &H08 werde ich nicht schlau!
Oder füllt der Chip dann wieder bis zur achten Stelle auf?
Also 08Hex = 1000 bin = 0000 1000 bin ????![]()
![]()
![]()
Gruß
MiniMax
So wie du es geschrieben hast ist es richtig. Du darfst diese Hex Werte aber nicht mit der *.hex verwechseln die du an den µC sendest.
Also relativ einfach... (hrmmhrmm)
Ich gehe mal davon aus, daß du den PCF8574 verwendest.
Der Baustein bekommt über die A0,A1,A2 Eingänge eine eindeutige Adresse (je nachdem wie Du diese Anschlüsse beschaltest)
(steht eigentlich alles in meinem ApplicationBoard1 für Protobed Mega 16 -32 klick mal auf meine Signatur oder den Link), die Anleitung kannst Du Dir laden.
An diese I2C Adresse des PCF8574 sendest Du den Code mit folgenden Befehlen (eigentlich nur ein einziger Befehl
recht viel einfacher kann man es nicht machen...Code:REM I2C Befehle mit Bascom Dim Adresse as Byte Dim Ausgabe as Byte Adresse = &H70 Ausgabe = &B00001000 start: I2csend Adresse , Ausgabe ' send the value end
Noch mehr Details sin in den Beispieldateien von Bascom, \samples\twi oder in meiner Anleitung zu finden.
PS: I2C, I²C, IIC , USI oder TWI ist alles das gleiche, nur dass eben PHILIPS das Patent drauf hat und daher der Name "I²C" eigentlich geschützt ist, wurden eben andere Name erfunden, welche aber nach dem exakt gleichen Protokoll arbeiten.
Gruss
Darwin (meine Projekte sind auf meiner Pinnwand zu finden)
Hey danke, ich habe es schon verstanden. Deine Protobed Projekte habe ich bereits alle Durchgelesen und daraus viele Insperationen besorgt![]()
![]()
Achja noch ne Frage: Was ist der Unterschied Zwischen "... Alias ..." und
"Dim ... as Byte / Word / Single / String*..."?? Also Alias meine Ich, dass man so z.B. Port's Namen zuweisen kann (bsp.: Porta.1 alias Led_1) und diese dann über diese Namen auch Ansprechen! Den Rest verstehe ich bisher noch nicht
Vielen dank für eure Gedult mit mir <=D> \/
Gruß
MiniMax
Lesezeichen