Perifèrics I2C
De El raconet d'en Jordi
Els PICAXE més potents (PICAXE-18X,
PICAXE-28X, PICAXE-40X) permeten la
connexió directa de perifèrics I2C a
les podes SDA i SCL. Només hem de
connectar aquestes línies a un bus I2C
amb resistències de pull-up de 4,7 kΩ.
Podem connectar més de 100
dispositius slave (esclaus) en aquest
bus, on el nostre PICAXE és el master
(amo). Naturalment, cal que els diferents dispositius slave tinguin adreces
diferents (moltes vegades es pot configurar una part de l'adreça del dispositiu.)
Alguns dels dispositius disponibles amb aquesta interfície són:
| DS1307 | Rellotge en temps real (RTC) |
| 24LC256 | Memòria EEPROM de 64 kB. Altres capacitats amb referències 24LCxxx |
| SPE030 | Mòdul sintetitzador de veu |
| CMPS03 | Brúixola digital |
| LCD02 S310118 | display LCD amb teclat opcional |
| AXE033 | display LCD amb RTC opcional |
| uM-FPU-V2 | Coprocessador matemàtic amb coma flotant |
| PCF8570P | Memòria RAM 256 bytes |
| SRF08 | Sonar |
| AD5245 | Potenciòmetre digital |
| PCF8574 | Ampliació E/S: 8 línies |
| MCP23016 | Ampliació E/S: 16 línies |
| GPIO14 | Ampliació E/S: 14 línies, 5 ADC, 1 PWM |
| MAX6953 | Control de fins a 4 displays en matrius de 5x7 LEDs |
| TPA81 | Sensor tèrmic orientable amb servo |
| RLY08 | Mòdul amb 8 relés |
L'interpret BASIC dels PICAXE incorpora les ordres i2cslave, writei2c, readi2c per treballar amb aquest bus.
Trobareu més informació al document i2c Tutorial, axe110_i2c.pdf (disponible a la web de PICAXE únicament en llengua anglesa) i el manual de BASIC (disponible en castellà).
A continuació veiem uns exemples de programes utilitzant aquest bus. Els
programes són obra de Carles Araguz i formen part del treball de recerca que li
vaig tutoritzar Estació meteorològica controlada per un PICAXE, publicat amb
llicència Creative Commons by-nc-sa.
El primer programa borra un display LCD (LCD02 S310118) i hi imprimeix “Lletres” dues vegades una darrera de l’altra, després torna a començar.
'Control d'un display LCD I2C
'Autor: Carles Araguz
b0 = 0 'defineix variable
main:
i2cslave 0XC6, i2cfast, i2cbyte 'configura i2c
writei2c b0, (12,"Lletres") 'envia valor al LCD
writei2c b0, (76,108,101,116,114,101,115) 'envia valor al LCD
goto main 'bucle
El següent programa llegeix la temperatura d'un DS18B20 i escriu el seu valor al display LCD:
'Mostra temperatura en un display LCD I2C
'Autor: Carles Araguz
b0 = 0
lectura_temp:
readtemp 0, b1 'llegeix pin I/O 0 (i el desa a b1)
b2 = b1 / 10 'conversió a decimal (part entera)
b3 = b1 // 10 'conversió a decimal (la resta)
b2 = b2 + 48 'conversió a ASCII
b3 = b3 + 48 'conversió a ASCII
i2cslave 0XC6, i2cfast, i2cbyte 'configura i2c
writei2c b0, (1,4,b2,b3) 'borra pantalla i cursor, escriu b2 b3
pause 2000 'espera 2s
debug b1 'debug de b1 (i de tots els registres)
goto lectura_temp 'bucle
Finalment aquest programa desa 10 valors de la temperatura en una memòria EEPROM 24LC16B i quan termina els llegeix i els mostra per el display LCD.
'Enregistra temperatura en una EEPROM I2C
'Autor: Carles Araguz
main:
b0=0
for b6=1 to 10
readtemp 0, b1 'llegeix la temperatura del sensor DS18B20
b2 = b1 / 10 'conversió a decimal (part entera)
b3 = b1 // 10 'conversió a decimal (part restant)
b4 = b2 + 48 'conversió de la primera xifra a ASCII
b5 = b3 + 48 'conversió de la segona xifra a ASCII
i2cslave %10100000,i2cfast,i2cbyte 'configura I2C EEPROM
writei2c b6, (b1) 'guarda valors readtemp
pause 10
i2cslave 0XC6, i2cfast, i2cbyte 'configura I2C LCD
writei2c b0, (12,"Temp:",13,b4,b5,"C") 'envia al LCD
next b6
for b6=1 to 10
i2cslave %10100000,i2cfast,i2cbyte 'configura I2C
readi2c b6, (b1)
b2 = b1 / 10 'conversió a decimal (part entera)
b3 = b1 // 10 'conversió a decimal (part restant)
b4 = b2 + 48 'conversió de la primera xifra a ASCII
b5 = b3 + 48 'conversió de la segona xifra a ASCII
i2cslave 0XC6, i2cfast, i2cbyte 'configura I2C LCD
writei2c b0, (b4,b5,"C",32,32) 'envia al LCD
pause 100
next b6
pause 3000 'espera 3 s.
goto main

