Paso 9: Poco ejemplo de autoagresión
Usando I2C consiste en el envío de datos binarios a una dirección de un dispositivo que está a la escucha de peticiones desde el microcontrolador, (dispositivo maestro) una vez que una solicitud es recibida por el dispositivo, (esclavo), el dispositivo envía uno o más bytes de datos hacia el microcontrolador.
En aprender a programar comunicaciones dispositivos I2C o intentar invertir a ingeniero datos provenientes de dispositivos I2C que tienes que mirar los datos en ella es forma binaria.
Le proporcionará un ejemplo fácil de cómo hacer esto utilizando los métodos que aprendiste solo.
En el aprendizaje de I2C a menudo es sabio para el estudio de otros programas de programadores han escrito por lo que puede inclinarse cómo los datos se pasan entre microcontroladores y dispositivos.
Así que para nuestro ejemplo que vamos a analizar un fragmento de programa de RobotC código escrito a poco bang un dispositivo I2C.
He tomado un programa en C muestra poco golpeado escrito Xander que mantiene un Blog Robot llamado en RobotC:
http://botbench.com/blog/2011/02/20/bit-banged-I2C-Master-on-RobotC-for-Arduino/#comment-2674
En este artículo del blog poco golpeando un programa I2C para comunicación con una matriz de LED a destellar luces en una secuencia.
Va invertir el bucle for está utilizando para enviar una serie de bits a la matriz de LED.
Si nunca ha programado antes, por favor, variables de Google, para lazo, funciones y lazos.
Aquí está el fragmento de código que se mirar:
mientras que (verdad) {}
para (int i = 0; i < 8; i ++) {}
PCF8574write (~ (1 << i));
wait1Msec(50);
}
}
Normalmente escribo un pequeño programa en Python para imprimir los valores del bucle for. Pero puesto que estoy asumiendo todo el mundo es nuevo en lógica boleana y de programación se escribir manualmente a cada iteración del bucle for.
Nota especial: Python no admite un tipo de datos byte, por lo que en nuestro granito de arena golpeando ejemplo vamos a utilizar el modulo operador para mostrar un entero como un byte sin signo. Por favor Google inf necesita ayuda,
Por ejemplo: si llevamos a cabo el en el siguiente ejemplo: >>> ~ (1 << 0), en Python tenemos -2, si después utilizamos >>> bin(-2), obtenemos '-0b10'. Para corregir el problema y mostrar un tipo completo de 8 bits en el siguiente:
>>> bin (-2% 256)
'0b11111110'
Para ver correctamente lo que está sucediendo con bits que tenemos que ver los 8 bits completos.
El tiempo es bucle forever, ignorar esto por ahora.
La de lazos del lazo donde la variable i es igual de 0 a 7.
PCF8574write() es una función personalizada que no vamos a discutir como parte de este artículo. Puede consultar el código para ver lo que hace esta función por su cuenta.
Lo que nos interesa es el valor de i y qué número binario se pasa a la función PCF8574write().
Permite traducir cada iteración del bucle for:
Permite tipo a cada iteración del bucle en Python:
La variable comienza como 0 y extremos para arriba en un valor de 7:
>>> ~ (1 << 0)
-2
Permite tirar esta expresión aparte. Estamos actuando un bit a bit no en el valor siguiente. Nos dejó cambiar el valor de 1, tiempos.
Es decir que no 1 << 0. Estamos empujando trozos de derecha a izquierda. En el primer lazo somos izquierda desplazamiento 1, 0 veces o no el mayoría del pedacito significativo.
Así que si nos fijamos en el valor binario de -2 obtenemos:
>>> bin (~ (1 << 0))
'0b10'
Permite continuar, pronto verás el patrón.
>>> ~ (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'
En este caso se omite el 0 inicial.
Debe leer '-0b01111111'
Ahora si no han hecho tan ya, ir a la página web y ver el video:
http://botbench.com/blog/2011/02/20/bit-banged-I2C-Master-on-RobotC-for-Arduino/#comment-2674
Ahora mire los patrones muy cuidadosamente.
Tenga en cuenta que como el de lazo aumenta que el bit 0 en se mueve hacia la izquierda.
Voy a intentar no confundirlo demasiado mucho ahora mismo, (hay otro y bit a bit y una operación de desviación a la izquierda en la función i2c_write()), la prioridad es entender operaciones booleanas y cómo utilizar Python para ayudarle en la comprensión de estas operaciones booleanas. Si usted se siente a él, invertir la función de i2c_write() para ver como los patrones están más procesada antes de ser enviados a la matriz de LED.
En el trabajo con microcontroladores cuando algo es alto, con un 1 valor, normalmente un dispositivo se enciende. Si un poco es bajo, teniendo un 0 valor un dispositivo está apagado.
Aviso que estamos trabajando con 8 bits y nuestra matriz de LED 8 LEDs. Sí, es correcto. Cada vez prenden un poco, con un valor de 1, enciende el LED. Cuando establece el valor en 0 o partió la broca, apague el LED.
Ahora mira el video otra vez. Ahora la imagen que tanto para los bucles, uno en la función principal y el bucle en el i2c_write función apuntan como rápido o más rápido que los LED parpadean.
La lógica de la i2c_write() realiza una lógica un poco más complejo, uso de python para visualizar cómo la alta o baja poco Estados está cambiando como los 8 bits son se intervino a través del bucle for.
Por favor, por seguir aprendiendo sobre microcontroladores y operaciones booleanas, que son los bloques de programación de microcontroladores.