- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 43

Thema: edit: Brauche Hilfe für I²C Bus System mit Bascom

  1. #31
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    Anzeige

    Powerstation Test
    ok! naja werde mir mal die Englische Seite heute Arbend durch lesen !
    Gruß
    MiniMax

  2. #32
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    44
    Beiträge
    642
    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)

  3. #33
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    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

  4. #34
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.059
    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

  5. #35
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    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:
    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
    In so ziemlich jeder Programmiersprache kann man die Werte in der gewünschten Notation schreiben.
    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:
    Zitat Zitat von 021aet04
    ...wenn du den 3ten Ausgang setzen willst musst du 00001000 senden.
    Du meinst wohl den 4. Ausgang oder?
    Zitat Zitat von 021aet04
    Sorry Darwin du hast recht. Habe es schon geändert
    Ist ja nur um den "armen Kerl" nicht noch ganz zum ausflippen zu bringen
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  6. #36
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.059
    Sorry Darwin du hast recht. Habe es schon geändert

  7. #37
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    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

  8. #38
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.059
    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.

  9. #39
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    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
    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
    recht viel einfacher kann man es nicht machen...
    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)

  10. #40
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    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

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen