25-06-2018, 18:18
Cześć,
Miałem problemy z nieco większym programem wykorzystującym komunikację przez i2c dlatego napisałem sobie prosty program do testów i niewiem w czym problem. Program napisany w arduino, wykorzystuje komunikację przez i2c do wysyłania dwóch bajtów danych między dwoma procesorami. Program wysyła 2x 0 (zero), niby bardzo proste i przy połączeniu ze sobą dwóch arduino niema problemu bo program działa. Problem pojawia się po wgraniu programu na ATmega32. Wtedy jeden bajt jest wysyłany prawidłowo a drugi przyjmuje wartość 11111111 (255). Jakieś pomysły czym może to być spowodowane? Dodane rezystory podciągające 4,7k. Dodaję program nadajnika, odbiornika.
Master:
Slave:
Miałem problemy z nieco większym programem wykorzystującym komunikację przez i2c dlatego napisałem sobie prosty program do testów i niewiem w czym problem. Program napisany w arduino, wykorzystuje komunikację przez i2c do wysyłania dwóch bajtów danych między dwoma procesorami. Program wysyła 2x 0 (zero), niby bardzo proste i przy połączeniu ze sobą dwóch arduino niema problemu bo program działa. Problem pojawia się po wgraniu programu na ATmega32. Wtedy jeden bajt jest wysyłany prawidłowo a drugi przyjmuje wartość 11111111 (255). Jakieś pomysły czym może to być spowodowane? Dodane rezystory podciągające 4,7k. Dodaję program nadajnika, odbiornika.
Master:
Kod:
#include <Wire.h>
int suma = 0;
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
Wire.requestFrom(8, 2);
while (Wire.available()) {
Wire.write(0);
delay(200);
int c = Wire.read();
delay(200);
int d = Wire.read();
// Serial.println("c");
Serial.println(c, BIN);
// Serial.println("d");
Serial.println(d, BIN);
suma = CharNaInt(d, c);
Serial.print(suma);
Serial.println("mA");
}
delay(500);
}
uint16_t CharNaInt(uint8_t LByte, uint8_t HByte) {
return ((HByte << 8) + LByte);
}
Kod:
#include <Wire.h>
void setup() {
Wire.begin(8);
Wire.onRequest(requestEvent);
}
void loop() {}
void requestEvent() {
// przerwanie do wysłania danych po i2c
Wire.write(50);
Wire.write(0);
}