Testet BERTL17 zuerst die LED's dann nach Tasterdruck jeweils die dazugehörigen LED
Dependencies: mbed
main.cpp@0:a8a0195ed7dc, 2015-01-26 (annotated)
- Committer:
- Enenkel
- Date:
- Mon Jan 26 21:46:32 2015 +0000
- Revision:
- 0:a8a0195ed7dc
- Child:
- 1:628da1b465a4
I2C Einlesen der Tasten und Ausgabe auf die LED
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Enenkel | 0:a8a0195ed7dc | 1 | /*********************************** |
Enenkel | 0:a8a0195ed7dc | 2 | name: BERTL14_I2C_TEST |
Enenkel | 0:a8a0195ed7dc | 3 | author: Enenkel modifizert von Wolfgang Raimann |
Enenkel | 0:a8a0195ed7dc | 4 | description: |
Enenkel | 0:a8a0195ed7dc | 5 | Die Taster vom I2C Expander werden direkt auf die LED's des Expander geschalten |
Enenkel | 0:a8a0195ed7dc | 6 | ***********************************/ |
Enenkel | 0:a8a0195ed7dc | 7 | |
Enenkel | 0:a8a0195ed7dc | 8 | #include "mbed.h" |
Enenkel | 0:a8a0195ed7dc | 9 | I2C i2c(p28, p27); // die Adressen des I2C Busses am uP |
Enenkel | 0:a8a0195ed7dc | 10 | // p28 -> SDA |
Enenkel | 0:a8a0195ed7dc | 11 | // p27 -> SCL |
Enenkel | 0:a8a0195ed7dc | 12 | int main() { |
Enenkel | 0:a8a0195ed7dc | 13 | char btn = 0; |
Enenkel | 0:a8a0195ed7dc | 14 | // **** Config PCA9555 I0 as output ******* |
Enenkel | 0:a8a0195ed7dc | 15 | i2c.start(); |
Enenkel | 0:a8a0195ed7dc | 16 | i2c.write(0x40); // Adresse des PCA9555 = 40 |
Enenkel | 0:a8a0195ed7dc | 17 | // das letzte Bit = 0 -> schreiben 0040 0000 |
Enenkel | 0:a8a0195ed7dc | 18 | i2c.write(0x06); // Befehl für das IO Port 0 -> siehe SCHEMA des PCA9555 |
Enenkel | 0:a8a0195ed7dc | 19 | i2c.write(0x00); // Schalte alle Pins des Ports als OUTPUT |
Enenkel | 0:a8a0195ed7dc | 20 | i2c.stop(); |
Enenkel | 0:a8a0195ed7dc | 21 | |
Enenkel | 0:a8a0195ed7dc | 22 | while(1) { |
Enenkel | 0:a8a0195ed7dc | 23 | // Einlesen der Taster und speichern unter btn |
Enenkel | 0:a8a0195ed7dc | 24 | i2c.start(); |
Enenkel | 0:a8a0195ed7dc | 25 | /* Das letzte Bit der Adresse entscheidet |
Enenkel | 0:a8a0195ed7dc | 26 | ob geschrieben oder gelesen wird. |
Enenkel | 0:a8a0195ed7dc | 27 | 0 => schreiben; 1 => lesen */ |
Enenkel | 0:a8a0195ed7dc | 28 | i2c.write(0x40); //Adresse & schreiben 0100 0000 |
Enenkel | 0:a8a0195ed7dc | 29 | i2c.write(0x01); //aktivate Port 1 |
Enenkel | 0:a8a0195ed7dc | 30 | |
Enenkel | 0:a8a0195ed7dc | 31 | i2c.start(); |
Enenkel | 0:a8a0195ed7dc | 32 | i2c.write(0x41); // Adresse & LESEN 0100 0001 |
Enenkel | 0:a8a0195ed7dc | 33 | btn = i2c.read(0);// Einlesen des Ports 1 und speichern unter btn |
Enenkel | 0:a8a0195ed7dc | 34 | i2c.stop(); |
Enenkel | 0:a8a0195ed7dc | 35 | |
Enenkel | 0:a8a0195ed7dc | 36 | // Schreiben auf Port 0 und damit auf die LED's |
Enenkel | 0:a8a0195ed7dc | 37 | i2c.start(); |
Enenkel | 0:a8a0195ed7dc | 38 | i2c.write(0x40); // Adresse & schreiben |
Enenkel | 0:a8a0195ed7dc | 39 | i2c.write(0x02); // |
Enenkel | 0:a8a0195ed7dc | 40 | i2c.write(~btn); // schriebn auf Port 0 den INVERSEN Wert von btn |
Enenkel | 0:a8a0195ed7dc | 41 | i2c.stop(); |
Enenkel | 0:a8a0195ed7dc | 42 | } |
Enenkel | 0:a8a0195ed7dc | 43 | } |
Enenkel | 0:a8a0195ed7dc | 44 |