Bit Banging und Boolean Math ohne Math

9 Schritt:Schritt 1: Einrichten der Umgebung Schritt 2: Lassen Sie uns Get Started Schritt 3: Hallo Welt Beispiel Schritt 4: Konvertieren von Zahlensystemen Schritt 5: Boolesche Operationen mit Python - bitweiser AND-Operator Schritt 6: Bitweise ODER-Operationen Schritt 7: Bitweise XOR-Operationen Schritt 8: Bitweises NOT und Shift-Operatoren Schritt 9: Bit Banging Beispiel

Bit Banging und Boolean Math ohne Math
Überblick

Wenn ich etwas hämmern oder Programmierung Mikrocontroller, manchmal ich möchte wirklich, was die Bitmuster aussehen zu konzentrieren, wirklich zu visualisieren, was die Nullen und Einsen tun. Aber dass die Mathematik in vielen Fällen tun lenkt meine Aufmerksamkeit von der Aufgabe.

Mit einem Taschenrechner ist langsam und schwerfällig, und lenkt mich auch aus den binären Operationen.

Wir Menschen arbeiten und denken in dezimal. Bit-Muster sind in binär. Um die Konvertierung ein bisschen einfacher wir konvertieren hexadezimal zu machen. Mit, um diese Umwandlung zu tun, sei es mental, mit Papier und Stift oder Taschenrechner, zumindest für mich, stiehlt zu viel Aufmerksamkeit von was ich wirklich versucht, zu visualisieren.

Ich habe über das Schreiben ein kleines Programm, das mich in meiner Visualisierung helfen werden gedacht, aber das dauert zu Zeit und nimmt mich weg aus der Beobachtung die Bitmuster.

So nach grübeln dieses Dilemma für eine Weile, kam ich auf eine schnelle und einfache Lösung, die mir beispielsweise binäre Darstellung zu geben, ohne Knirschen Zahlen, ohne manuelle Konvertierung zwischen Zahlensystemen und ist sofort und einfach.

Ich normalerweise Programm in C oder C ++, so würde Ich mag, um binäre Daten unter Verwendung von Befehlen, die gleich oder ähnlich zu C Booleschen Operatoren sind zu verarbeiten.

Die Antwort ist Python. Für diejenigen unter Ihnen, die nicht wissen, ist Python eine interpretierte Sprache, die eine interaktive Shell (Befehlszeilenschnittstelle) genannt Idle hat.

Python Idle Ich kann schnell konvertieren zwischen Zahlensystemen und führen alle Boolesche Operationen mit den gleichen Betreiber, die ich in C oder C ++.

Wenn Sie neu in Boolesche Operationen sind oder wollen, um sich frisch zu Ihren Fähigkeiten finden Sie im folgenden Artikel verweisen, lassen Sie sich nicht die Tatsache, dass der Artikel in der Arduino Playground veröffentlicht abschrecken. Der Artikel ist leicht zu lesen, klar geschrieben und deckt das Thema von binären und Boolesche Operationen ganz gut.

http://playground.arduino.cc/Code/BitMath

Wenn Sie neu in binären und Boolesche Operationen sind zögern Sie nicht, meine "No Math" Konzept für die Lektüre dieses Artikels zu verwenden. Auch Sie können dann konzentrieren sich auf das Verständnis, wie Boolesche Operationen, ohne die Mathematik durchzuführen.

In meiner "No Math Ansatz werde ich auf diesen Artikel Bezug werden von Zeit zu Zeit.

Schritt 1: Einrichten der Umgebung



Bit Banging und Boolean Math ohne Math
Einrichten der Umgebung
Python ist Open Source und seinem freien, Python läuft auf Windows, Linux und Apple OS X.

So richten Sie Ihre Umgebung, den Kopf über die folgenden Links:

http://python.org/

Wenn Sie Hilfe bei der Installation von Python oder das Lernen über Python zu nehmen müssen Sie einen Blick auf den Link unten:

http://wiki.python.org/moin/BeginnersGuide Schritt 2: Lassen Sie uns Get Started

Bit Banging und Boolean Math ohne Math
Ich werde die Annahme, dass Sie wissen sehr wenig über python machen, Bit hämmern und Boolesche Operationen. Falls Sie erweiterte in Ihrem Bildungsniveau sind, zögern Sie nicht, um zu überspringen.

Wenn Sie neu in die Programmierung, binäre Operationen und bit banging, zögern Sie nicht, Google jedes Thema Sie das Gefühl, Sie weitere Informationen zu benötigen.

Lesen Sie dieses Material, um ein besseres Verständnis zu erlangen, bevor Sie fortfahren.

Die Version von Python Ich verwende ist Version 3.2, wenn Sie diese Version oder neuere Versionen sollten in Ordnung sein. Wenn Sie mit einem 2.x-Version von Python sind, installieren Sie bitte die aktuelle Version 3.x. Sie können immer noch halten Sie Ihre 2.x Version von Python installiert.

Wenn Sie eine Auffrischung auf Binär, dezimal und hexadezimal Zahlensysteme wie finden Sie in der unten stehenden Link:
http://www.myhome.org/pg/numbers.html

Laden Sie den Python Idle Anwendung auf Ihrem Desktop. Ich arbeite mit Apple OS X, so dass mein Desktop Bilder etwas anders als bei Ihnen aussehen. Aber die Vorgänge sind die gleichen. Sobald Idle Lasten sollten Sie folgendes Fenster:

Schritt 3: Hallo Welt Beispiel

Bit Banging und Boolean Math ohne Math

Die >>> Prompt ist die interaktive Eingabeaufforderung, wo Sie Ihre Ausdrücke eingeben.

Die Antwort auf Ihre Frage wird in der folgenden Zeile folgen:

Bitte geben Sie die folgende Zeile nach der >>> Aufforderung, und drücken Sie die Eingabetaste:

>>> Print ('Hallo Welt')

Sie sollten die folgende sehen:

Hallo Welt

>>>

Das ist Ihre nächste >>> Aufforderung; Sie sind bereit für weitere Befehle und Funktionen.

Herzlichen Glückwunsch, Ihr erfolgreich geschrieben Ihre erste Linie der python code.Step 4: Konvertieren von Zahlensystemen

Bit Banging und Boolean Math ohne Math
Lassen Sie uns einige Zahlen konvertiert zwischen Zahlensystemen:

Geben Sie folgende an der Eingabeaufforderung >>> und drücken Sie die Return-Taste:

>>> Bin (100)

'0b1100100'

>>>

Wir bitten, Python 100 dezimal binär konvertieren:

Wir als Antwort empfangen wird, 1100100, feststellen, dass ein 0b Notation wird zu Beginn des 1100100 platziert ist dies Python Notation angibt, daß die Antwort ist binär. So haben wir 100 Dezimalstelle auf 1.100.100 in binäre umgewandelt.

Geben Sie den folgenden:

>>> Hex (100)

'0x64'

>>>

Unsere Antwort ist 64 hex, ist die 0x python-Notation, die unsere Antwort ist hexadezimal. Wir haben 100 dezimal bis 64 hex umgewandelt.

Lassen Sie uns versuchen, den anderen Weg nun in der folgenden an der Eingabeaufforderung >>> gehen ein:

>>> Int ("0x64 ', 16)

100

>>>

Beachten Sie, es gibt kein Dezember () -Funktion, müssen wir die int () Funktion verwenden. Beachten Sie auch,

Wir mussten die '0x64' in einfache Anführungszeichen setzen. Die Funktion int () nimmt einen String als Wert. Wir müssen auch eine geben, (Komma), und geben Sie einen Wert von 16. Die 16 erzählt die int () Funktion, die 0x64 ist eine Hexadezimalzahl. Die Funktion int () wandelt String-Werte zu Dezimalwerten.

Jetzt können Geben Sie folgende an der Eingabeaufforderung >>>:

>>> Int ("1100100", 2)

100

>>>

Verwenden des int () -Funktion können wir auch wandeln ein Binär-String-Wert in eine Dezimalzahl.

Die, 2 erzählt die int () Funktion, die wir versuchen, eine binäre Zeichenfolge in eine Dezimalzahl umzuwandeln.

Durch die Verwendung dieser drei Funktionen, bin (), hex, und int () können wir leicht zwischen allen Zahlensystemen umwandeln verwendet in der Programmierung.

Schritt 5: Boolesche Operationen mit Python - bitweiser AND-Operator

Bit Banging und Boolean Math ohne Math
Für diesen Abschnitt werden wir auf die Arduino Spielplatz Artikel, BitMath Tutorial beziehen:

http://playground.arduino.cc/Code/BitMath

Bitweise UND-Operationen

Lesen Sie den Abschnitt auf bitweiser AND-Operator.

Geben Sie in den folgenden Ausdrücken:

>>> 0 & 0

0

>>> 0 & 1

0

>>> 1 & 0

0

>>> 1 & 1

1

>>>

Beachten Sie, wir haben die gleichen Antworten erhalten, wie in der Bitweises AND Beispiel angezeigt.

Was wir geschaffen haben, nennt man eine Wahrheitstabelle für die bitweise UND-Verknüpfung.

Wir haben jede mögliche Antwort, die wir erhalten können angezeigt werden, die Durchführung der bitweiser AND-Operator.

Lassen Sie uns weiter mit dem Bitweises AND Beispiele:

Geben Sie folgende an der Eingabeaufforderung >>>:

>>> A = 92

>>> B = 101

>>> Bin (a)

'0b1011100'

>>> Bin (b)

'0b1100101'

>>> A & b

68

>>> Bin (a & b)

'0b1000100'

>>>

Hier haben wir einen Wert von 92 bis Variablen a und einen Wert von 101 bis Variable b zugeordnet. Dann konvertiert die Werte von a und b, um binäre, einfach die Ergebnisse der bitweisen UND-Operation sehen.

Dann führte die bitweise UND-Verknüpfung, indem Sie a & b, führte dies zu einem Wert von 68. Aber wir, die Antwort in binären visualisieren möchten, so dass wir in den Papierkorb (a & b) Funktion eingegeben.

Wir können jetzt einfach die bitweise UND-Verknüpfung zu visualisieren, ohne dass unsere Aufmerksamkeit vom Blick auf die binären Muster von 92 und 101, um die Mathematik zu tun zu entfernen.

Lassen Sie uns auch weiterhin die mit dem bitweisen AND Beispiele:

Was halten Sie das bitweise AND-Operator in der Programmierung oder etwas hämmern benutzen? Eine der Anwendungen ist es, eine der Bit-Werte von einem Byte zu extrahieren. (Acht Bits)

Können sagen, wir um den Wert des niedrigstwertigen Bits der binären Zahl 101 extrahieren möchten, das Recht höchstens 1 ist die niederwertigste Bit.

Geben Sie folgende an der Eingabeaufforderung >>>:

X = 5

>>> Bin (x)

'0b101'

>>> Y = x & 1

>>> Bin (y)

'0b1'

Wollte man das zweite niedrigstwertige Bit von dem Wert von 101 zu extrahieren, würde das zweite niedrigstwertige Bit 101 die 0 sein.

Geben Sie folgende an der Eingabeaufforderung >>>:

>>> Y = x & 2

>>> Bin (y)

'0b0'

>>>

Achten Sie darauf, verschiedene Prozessoren definieren niederwertigsten Bitpositionen unterschiedlich. Einige Prozessoren verwenden die am weitesten links liegenden Bit als das niedrigstwertige Bit Position und einige Prozessoren verwenden die am weitesten rechts liegenden Bit-Position wie das niedrigstwertige Bit position.Step 6: bitweises ODER-Operationen

Bit Banging und Boolean Math ohne Math
Siehe Abschnitt bitweisen OR-Operator in der Arduino Spielplatz Artikel.

Ich werde euch die bitweise ODER-Wahrheitstabelle mit den Beispielen in dem Artikel zu bauen.

Wir werden uns auf das, was können Sie den bitweisen OR-Operator für die Anwendung zu konzentrieren.

Wir verwenden den bitweisen OR-Operator, um Bits in einem Byte (Binärzahl) eingestellt.

Lassen Sie sagen, dass wir, um die am wenigsten signifikante Bit in dem Wert von 0b100 festlegen möchten.

Geben Sie folgende an der Eingabeaufforderung >>>:

>>> X = 4

>>> Bin (x)

'0b100'

>>> Y = x | 1

>>> Bin (y)

'0b101'

>>>

Lassen Sie uns jetzt stellen Sie die zweite Bit auf einen Wert von 1, dh: 111

Geben Sie folgende an der Eingabeaufforderung >>>:

>>> Y = y | 2

>>> Bin (y)

'0b111'Step 7: Bitweise XOR-Operationen

Bit Banging und Boolean Math ohne Math
Siehe Abschnitt bitweiser XOR-Operator in der Arduino Spielplatz Artikel.

Ich werde euch die bitweise XOR-Wahrheitstabelle bauen am Beispiel in dem Artikel.

Wir werden uns auf das, was können Sie die bitweiser XOR-Operator für die Anwendung zu konzentrieren.

Wir nutzen die bitweiser XOR-Operator zu kippen oder umzuschalten Bits in einer Zahl (binäre Zahl).

Lassen Sie sagen, dass wir, um die am wenigsten signifikante Bit in dem Wert von 0b110 Flip möchten.

Geben Sie folgende an der Eingabeaufforderung >>>:

>>> X = 6

>>> Bin (x)

'0b110'

>>> Y = x ^ 1

>>> Bin (y)

'0b111'

>>>

Lassen Sie uns jetzt drehen Sie die zweite Bit in dem Wert 0b111

Geben Sie folgende an der Eingabeaufforderung >>>:

>>> Y = y ^ 2

>>> Bin (y)

'0b101'

>>>

Das ist sehr cool. Wir können jetzt steuern Einstellung und schnell sehen Bit-Werte und Muster und easily.Step 8: Bitweises NOT und Shift-Operatoren

Bit Banging und Boolean Math ohne Math
Bitweises NOT Operationen

Siehe Abschnitt bitweiser NOT-Operator in der Arduino Spielplatz Artikel.

Fühlen Sie sich frei zu spielen, um mit dem Operator NOT. Aber studieren diesen Operator sorgfältig wie Null und negative Zahlen werden anders dargestellt als Sie vielleicht denken. Werfen Sie einen Blick auf, was ein Vorzeichenbit und den Artikel auf Zweier-Komplement zu lesen.

Der Hauptbetrieb der bitweiser NOT-Operator ist, Flip 0 auf 1 und 1 auf 0. Auch dieser Operator arbeitet auf eine Zahl anstelle von zwei Zahlen.

Bit Shift-Operatoren

Beziehen sich auf die bitweise Verschiebung Bedieneinheit in der Arduino Spielplatz Artikel.

Fühlen Sie sich frei zu spielen, um mit den beiden links zu verschieben und mit der rechten Shift-Operatoren.

Verwenden Sie das bin () -Funktion, um die binären Werte zu überprüfen, wie wir mit den anderen Bit-Operatoren durchgeführt.

Echt Einsatz von links zu verschieben und mit der rechten Maus Betreiber sind, abziehen entweder das niederwertigste oder höchstwertige Bit von einer Reihe ein Bit zu einer Zeit.

Rest des Artikels

Jetzt haben Sie genügend Informationen, um den Rest des Artikels auf eigene Faust zu lesen und sich an die "No Math" Python-Ansatz. Kommen wir nun zu einem echten bit hämmern example.Step 9 aussehen: Bit Banging Beispiel

Bit Banging und Boolean Math ohne Math

Bit Banging und Boolean Math ohne Math

Programmierung Mikrocontroller oder versuchen, Reverse Engineering, was ein Mikrocontroller Programm macht die Verarbeitung beinhaltet eine Menge von binären Informationen. Zum Beispiel ist eine Möglichkeit, wie Microcontrollern mit anderen Geräten kommunizieren, um eine einfache Zweidraht-Schnittstelle genannt I2C ausgeprägte I quadriert C.

Verwendung I2C beinhaltet, um eine Adresse eines Geräts, das für die Anforderungen von dem Mikrocontroller abhört, (Mastergerät) Wenn eine Anforderung von der Vorrichtung empfangen wird, (Slave), sendet das Gerät entweder ein oder mehrere Bytes von Daten Binärdaten zurück zu der Mikrocontroller.

Lernen, wie man die Kommunikation auf I2C-Geräte zu programmieren oder zu versuchen, Reverse Engineering Daten aus I2C-Geräte müssen Sie die Daten anschauen, es ist in binärer Form.

Ich werde Ihnen eine einfache Beispiel zeigt, wie diese mit den Sie gerade gelernt haben Verfahren zu tun.

In Lern ​​I2C ist es oft ratsam, studieren anderen Programmen Programmierer geschrieben haben, so können Sie lehnen Sie, wie Daten zwischen Mikrocontroller und Geräten übergeben.

So zum Beispiel werden wir an einem Programm-Snippet von einigen RobotC Code, um etwas geschrieben Knall einen I2C-Gerät zu suchen.

Ich habe eine Probe bisschen knallte C-Programm in RobotC von Xander geschrieben, die einen Roboter Blog namens hält wurde:

http://botbench.com/blog/2011/02/20/bit-banged-i2c-master-on-robotc-for-arduino/#comment-2674

In diesem Blog-Artikel er etwas hämmern eine I2C-Programm, um mit einem LED-Array, um LED-Leuchten in einer Sequenz blinken zu kommunizieren.

Wir werden Reverse Engineering der for-Schleife benutzt er, um eine Reihe von Bits, die dem LED-Array zu senden.

Wenn Sie noch nie programmiert haben, google bitte Variablen, for-Schleife, Funktionen und While-Schleifen.

Hier ist der Code-Schnipsel werden wir uns bei:

while (true) {

for (int i = 0; i <8; i ++) {

PCF8574write (~ (1 << i));

wait1Msec (50);

}

}

Normalerweise würde ich ein kleines Python-Programm zur Schleife drucken Sie sich die Werte der zu schreiben. Aber da ich gehe davon aus, jeder ist neu in die Programmierung und Boolesche Logik ich manuell eingeben aus jeder Iteration der for-Schleife.

Besonderer Hinweis: Python unterstützt kein Byte-Datentyp, so in unserem bit hämmern Beispiel werden wir den Modulo-Operator verwenden, um eine ganze Zahl als Byte ohne Vorzeichen angezeigt werden sollen. Bitte Google inf Sie Hilfe benötigen,

Zum Beispiel: Wenn wir das folgende Beispiel auszuführen: >>> ~ (1 << 0), in Python wir -2, Wenn wir dann >>> bin (-2), so erhalten wir '-0b10'. Um das Problem zu beheben und zeigen eine volle 8 Bits geben Sie den folgenden:

>>> Bin (-2% 256)

'0b11111110'

Um richtig zu sehen, was los ist mit Bits müssen wir die vollen 8 Bit zu sehen.

Das ist zwar immer Looping, ignorieren Sie diese jetzt.
Die for-Schleife Schleifen, wo die Variable i gleich 0-7 ist.

PCF8574write () ist eine benutzerdefinierte Funktion, die wir im Rahmen dieses Artikel wird diskutiert. Sie können auf den Code verweisen, um zu sehen, was diese Funktion hat auf eigene Faust.

Was uns interessiert, ist der Wert von i und welche Binärzahl wir zum PCF8574write () Funktion übergeben.

Lets übersetzen jeder Iteration der for-Schleife:

Lets geben Sie jede Iteration der Schleife in Python:

Die Variable i beginnt als 0 und endet bei einem Wert von 7:

>>> ~ (1 << 0)

-2

Lets ziehen diesen Ausdruck auseinander. Wir führen eine bitweise NOT auf den folgenden Wert. Wir Linksverschiebung den Wert 1, i-mal.

Das heißt wir 1 << 0. Wir drängen Bits von rechts nach links, .In der ersten Schleife wir Linksverschiebung 1, 0 mal, oder wir das höchstwertige Bit.

Also, wenn wir uns den binären Wert von -2 erhalten wir:

>>> Bin (~ (1 << 0))

"0b10 '

Lets fortfahren, werden Sie bald sehen, das Muster.

>>> ~ (1 << 0)

-2

>>> Bin (-2% 256)

'-0b11111110'

>>> ~ (1 << 1)

-3

>>> Bin (-3% 256)

'-0b11111101'

>>> ~ (1 << 2)

-5

>>> Bin (-5% 256)

'-0b11111011'

>>> ~ (1 << 3)

-9

>>> Bin (-9% 256)

'-0b11110111'

>>> ~ (1 << 4)

-17

>>> Bin (-17% 256)

'-0b11101111'

>>> ~ (1 << 5)

-33

>>> Bin (-33% 256)

'-0b11011111'

>>> ~ (1 << 6)

-65

>>> Bin (-65% 256)

'0b10111111'

>>> ~ (1 << 7)

-129

>>> Bin (-129% 256)

'-0b1111111'

Die führende 0 in diesem Fall weggelassen.

Es sollte lesen "-0b01111111 '

Nun, wenn Sie nicht bereits getan haben, gehen Sie auf die Webseite und das Video:

http://botbench.com/blog/2011/02/20/bit-banged-i2c-master-on-robotc-for-arduino/#comment-2674

Nun ein Blick auf den Bitmuster sehr eng.

Beachten Sie, dass, wie die for-Schleife erhöht, dass die 0-Bit hält auf Bewegung nach links.

Ich werde versuchen Sie nicht, dass Sie zu viel verwirren gerade jetzt, (es gibt eine andere bitweise AND und eine Linksverschiebung Betrieb im i2c_write () Funktion) ist die Priorität, Boolesche Operationen zu verstehen und zu wissen, wie man Python verwenden, um Sie in das Verständnis dieser Boolean unterstützen Operationen. Wenn Sie es fühlen, Reverse Engineering i2c_write (), um zu sehen, wie die Bitmuster weiterverarbeitet werden, bevor sie an dem LED-Array gesendet.

In der Arbeit mit Microcontrollern, wenn ein Bit hoch ist, mit einem Wert 1, wird in der Regel ein Gerät eingeschaltet ist. Wenn ein wenig niedrig ist, mit einem Wert 0 ein Gerät ausgeschaltet ist.

Beachten Sie, dass wir es mit 8 Bit arbeitet und unsere LED-Array verfügt über 8 LEDs. Ja das ist korrekt. Jedesmal, wenn wir setzen ein bisschen auf, mit einem Wert von 1, wenden wir uns an der LED. Wenn wir den Bit-Wert auf 0 oder den etwas abseits, wenden wir uns von der LED.

Jetzt wieder das Video. Jetzt Bild, das sowohl für Loops, eine in der Hauptfunktion und die for-Schleife in der i2c_write Funktion laufen so schnell oder schneller als die LEDs blinken.

Die Logik in der i2c_write () ist die Durchführung ein wenig komplexer Logik, Verwendung python zu visualisieren, wie das High oder Low-Bit-Zustände ändern sich auch die 8 Bits werden durch in der for-Schleife trat.

Bitte halten auf das Lernen über Mikrocontroller und Boolesche Operationen, wie das sind die Bausteine, um die Programmierung Mikrocontroller.