ich versuche gerade einen MCP23017 I/O Expander zu verstehen. Das Ansprechen mit dem i2C klappt soweit und auch das händische Ansteuern der Ports ist auch kein Problem.
Nun möchte ich das aber natürlich auch dynamisch machen. Da ich es verstehen möchte, versuche ich die typische Adfrait lib zu umgehen, stosse dabei aber auf ein Problem.
Wenn ich einen bestimmten Port als Output auf High setzen möchte, muss dem Refister 0x12 einen Hexerdezimal oder Binär Wert übergeben Wert übergeben. Leider verstehe ich überhaupt nicht, wie ich so einen Wert übergeben kann.
Klar ist mir, dass ich z.b. Wire.write(B11001100) nutzen kann, aber wie übergebe ich der Zeile diesen Wert? Einen binären String in eine Hex Zahl umzuwandeln, denke ich ist auch nicht wirklich effektiv oder?
Habe im Netz versucht beispeiel zu finden, aber hier sind fast überall nur welche mit der Adfruit lib, die einem die Arbeit abnimmt und die ich eben nicht verstehe.
Sorry für die vermutlich triviale und blöde Frage.
Die Binäre, Dezimale, Oktale und die Hexadezimale Schreibweisen sind nur für Menschen.
Deinen µC interessiert das nicht.
Der arbeitet grundsätzlich binär.
Sorry für die vermutlich triviale und blöde Frage.
Ist sie nicht.
Gerade auch, weil ich dein Problem gar nicht verstehe.
Wire.write(B11001100)
Wire.write(0b11001100)
Wire.write(0xCC)
Wire.write(204)
Wire.write(0314)
Wire.write('Ì') // unter Verwendung des Character set ISO-8859-1
Alles exakt das gleiche.
Der Unterschied liegt ausschließlich im Auge des Betrachters.
Der µC oder auch MCP23017 sieht keinen
Wenn wir Z.b. bei dem MCP bleiben (das gilt ja für alles was mit i2c genutzt wird und nicht eine fertige Lib nutzt).
Ich möchte z.B. Sagen Pin 1,4,7 auf High setzen, also Z.B. B10100010. Dieses folge kann ich generieren, aber wie übergebe ich diese, also in was für einer Variablen muß ich die speicher bzw was muß meine Funktion zurück geben?
Verstehe ich das richtig, das die ersten beiden Beispielzeichen
Wire.write((1<<1)|1<<7)|(1<<4);
Wire.write((1<<1)+1<<7)+(1<<4);
eine Verschiebeung von 1 an eine Position sind? werden die anderen Stellen dann als 0 vorgegeben oder muss ich die einmal irgendwo festelgen und dann befüllen?