ok! naja werde mir mal die Englische Seite heute Arbend durch lesen !
Druckbare Version
ok! naja werde mir mal die Englische Seite heute Arbend durch lesen !
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
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 ?????
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:
Zitat von 021aet04
Ist ja nur um den "armen Kerl" nicht noch ganz zum ausflippen zu bringen O:)Zitat:
Zitat von 021aet04
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 ???? :-k :-k :-k
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.
Hey danke, ich habe es schon verstanden. Deine Protobed Projekte habe ich bereits alle Durchgelesen und daraus viele Insperationen besorgt :cheesy: :cheesy:
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> \:D/