gpb01:
Dicono chiaramente che è compatibile con il protocollo I2C, anche se ... gestendosi da soli due pin, magari si fa primaGuglielmo
ci ho messo del mio anche se il codice che ho fatto vi farà ridere o provato a generare i livelli che sono spiegati nel datasheet impostando un delay di 10us per avere una frequenza di 100KHz.
purtroppo non sono in grado di farlo andare
scusate anche la banalità del mio programma
int clk = 13;
int data = 12;
void setup() {
Serial.begin(9600);
pinMode(clk, OUTPUT);
pinMode(data, OUTPUT);
}
void loop() {
//setup
digitalWrite(clk, LOW);
digitalWrite(data, HIGH);
delay(100);
//START
digitalWrite(clk, HIGH);
delayMicroseconds(5);
digitalWrite(data, LOW);
delayMicroseconds(5);
digitalWrite(clk, LOW);
delayMicroseconds(5);
digitalWrite(clk, HIGH);
delayMicroseconds(5);
digitalWrite(data, HIGH);
delayMicroseconds(5);
digitalWrite(clk, LOW);
delayMicroseconds(5);
digitalWrite(data, LOW);
delayMicroseconds(10);
//A2
digitalWrite(clk, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
delayMicroseconds(10);
//A1
digitalWrite(clk, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
delayMicroseconds(10);
//A0
digitalWrite(clk, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
delayMicroseconds(10);
//C4
digitalWrite(clk, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
delayMicroseconds(10);
//C3
digitalWrite(clk, HIGH);
delayMicroseconds(5);
digitalWrite(clk, LOW);
delayMicroseconds(5);
//C2
digitalWrite(clk, HIGH);
digitalWrite(data, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
digitalWrite(data, LOW);
delayMicroseconds(10);
//C1
digitalWrite(clk, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
delayMicroseconds(10);
//C0
digitalWrite(clk, HIGH);
digitalWrite(data, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
digitalWrite(data, LOW);
delayMicroseconds(10);
//ACK
digitalWrite(clk, HIGH);
digitalWrite(data, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
digitalWrite(data, LOW);
delayMicroseconds(10);
pinMode(data, INPUT);
delay(100);
int x=12; //leggi 12 bit
while(x>0){
//bit
digitalWrite(clk, HIGH);
delayMicroseconds(5);
//leggo il valore
Serial.println(digitalRead(data));
digitalWrite(clk, LOW);
delayMicroseconds(5);
x--;
}
delay(1000);
}