Salve io volevo chiedere se è possibile fare una comunicazione I2C in cui master e slave non hanno nessuna differenza! o meglio lo slave chiede al master e il master chiede allo slave!!! perchè non riesco a far comunicare il server con il client!!! vorrei che quando il server manda un comando al client il client lo esegua!! è possibile fare questo?
alle588:
o meglio lo slave chiede al master e il master chiede allo slave!!!
Lo slave può solo rispondere alle richieste del master, non può in nessun modo fare lui richieste, dovresti usare un sistema multimaster, è possibile con la I2C, però non è supportato dalla libreria wire.
Se cerchi con google "arduino i2c multimaster" qualcosa trovi.
Grazie mille!! ti posso chiedere un altra cosa? è possibile usare la SoftwareSerial sulle porte analogiche?
alle588:
è possibile usare la SoftwareSerial sulle porte analogiche?
Io sconsiglio sempre di usare la software serial, quelle che tu chiami porte analogiche in realtà sono dei normalissimi pin digitali del ATmega 328 che come seconda funzione possono essere utilizzati come ingressi ADC.
Da un punto di vista hardware non ci sono problemi per utilizzare i pin da A0 a A5 come pin digitali e di conseguenza come pin per la software seriale, se poi la libreria accetta anche i pin da 14 a 19 (numeri abbinati ai pin A0-A5) non lo so (mai usata la software serial), però basta provare per scoprirlo.
Perchè visto che non si riesce per il fatto dell'I2C ho pensato di collegare la scheda 1 con la scheda 3 tramite seriale , la scheda 1 e 2 con l'i2c che è gia fatto e funzionante e la 2 e la 3 con la seriale!! solo che ho qualche problema!!!
Visto che mi sconsigli la software serial cosa potrei usare per fare una buona comunicazione?
la Wire supporta il multimaster ma non è documentato. in oltre esiste un bug dell'hardware, aggirabile via software
(astro ne parlammo tempo fa ma non riuscii a procurarti il link... l'ho ritrovato recentemente: Atmel AVR TWI I2C Multimaster Issue - Robot Room)
Grazie mille!! me lo puoi spiegare brevemente che io e l'inglese non andaimo molto d'accordo?
lesto:
la Wire supporta il multimaster ma non è documentato. in oltre esiste un bug dell'hardware, aggirabile via software
Nella 0022 sono sicuro che non c'era nessun supporto, documentato o meno, al I2C, se è stato introdotto con le versioni più recenti dell'IDE non lo so.
Quella pagina che hai linkato è molto vecchia e non parla di Arduino, quindi del ATmega 328, parla di AVR in generale, non mi risulta nessun bug hardware sulla TWI degli ATmega.
per il bug mi pare che ci sia anche sugli atmega, perche il primo articolo che lessi usava il 328p.
per il multimaster non conosco la versione minima: The Digital Cave - Arduino I2C Sketches
(allego il codice per i posteri)
/**
*
* Sample Multi Master I2C implementation. Sends a button state over I2C to another
* Arduino, which flashes an LED correspinding to button state.
*
* Connections: Arduino analog pins 4 and 5 are connected between the two Arduinos,
* with a 1k pullup resistor connected to each line. Connect a push button between
* digital pin 10 and ground, and an LED (with a resistor) to digital pin 9.
*
*/
#include <Wire.h>
#define LED 9
#define BUTTON 10
#define THIS_ADDRESS 0x8
#define OTHER_ADDRESS 0x9
boolean last_state = HIGH;
void setup() {
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(BUTTON, INPUT);
digitalWrite(BUTTON, HIGH);
Wire.begin(THIS_ADDRESS);
Wire.onReceive(receiveEvent);
}
void loop() {
if (digitalRead(BUTTON) != last_state){
last_state = digitalRead(BUTTON);
Wire.beginTransmission(OTHER_ADDRESS);
Wire.send(last_state);
Wire.endTransmission();
}
}
void receiveEvent(int howMany){
while (Wire.available() > 0){
boolean b = Wire.receive();
Serial.print(b, DEC);
digitalWrite(LED, !b);
}
Serial.println();
}
edit: visto che usa send al posto di write, direi che il codice è pre-ide 1.0.1 o giiù di lì
RIEDITO:
il multi-master bug sembrerebbe essere confermato per gli atmega8: TWI-Multi-Master für ATMEGA in C - Mikrocontroller.net (da tradurre dal tedesco, io ho usato google-translatem, quindi pspero di non aver letto baggianate), sarebbe bello provare a riprodurlo sui atmega328p, ad avere i mezzi per farlo
Mi dispiace ma non funziona questo metodo!! grazie mille lo stesso!!
lesto:
per il bug mi pare che ci sia anche sugli atmega, perche il primo articolo che lessi usava il 328p.
La documentazione ufficiale Atmel, e mi fido solo di questa, non parla di nessun bug sulla I2C relativamente agli ATmega.
Sono propenso a credere che il problema riscontrato dipende dal compilatore/librerie.
Io uso il multimaster, codice mio, con gli AT91CAN senza problemi, ho un sistema con sei micro in multimaster su bus I2C, prodotto in diverse decine di esemplari, sono quasi due anni che le varie schede fanno il loro lavoro senza mai aver dato problemi sulla I2C che viene pesantemente utilizzata per lo scambio dei dati tra i vari micro, circa 60 transazioni al secondo.
per il multimaster non conosco la versione minima: The Digital Cave - Arduino I2C Sketches
E' da verificare, però per me quello non è vero multimaster.
io però non ho ancora capito se è possibile a dare il multi-master?
!!! perchè ho provato ma non funziona
Scusate posso chiedere una cosa? ho prvato ad usare softwareSerial solo che quando vado a leggere il valore mi da sempre il valore 255!! e la massa comune è collegata tra le varie schede!
alle588:
io però non ho ancora capito se è possibile a dare il multi-master?![]()
![]()
!!! perchè ho provato ma non funziona
hai invertito gli indirizzi
#define THIS_ADDRESS 0x8
#define OTHER_ADDRESS 0x9
delle due schede?
alle588:
Scusate posso chiedere una cosa? ho prvato ad usare softwareSerial solo che quando vado a leggere il valore mi da sempre il valore 255!! e la massa comune è collegata tra le varie schede!
codice?
E' da verificare, però per me quello non è vero multimaster.
non so, non ho spippolato il codice, l'ho preso per buono (vero multimaster)
La documentazione ufficiale Atmel, e mi fido solo di questa, non parla di nessun bug sulla I2C relativamente agli ATmega.
Sono propenso a credere che il problema riscontrato dipende dal compilatore/librerie.
quì ti posso dare ragione, ma è difficilissimo trovare documentazione su questo bug
lesto:
quì ti posso dare ragione, ma è difficilissimo trovare documentazione su questo bug
Un bug simile, a livello hardware, sarebbe più che noto e non si troverebbe solo qualche post su dei blog/forum, il mondo amatoriale è solo una goccia nel mare quando si parla di micro, se c'era veramente un simile problema hardware stai pur certo era noto, documentato ufficialmente da Atmel, con tanto di workaround.
Adesso qualcosa si muove!!! l'invio dei messaggi funziona e li riceve solo che quando spedisco la risposta, il buzzer collegato all'ingresso A2 continua a suonare!e di comandi per farlo suonare continuamente non ce ne sono!!lo uso solo nel setup per segnalare il settaggio dei parametri!!!
Non guardare il file "Arduino Telecamera che è molto "buttato li"
Tesina_braccio_Robotico.ino (15.5 KB)
Arduino_Motor.ino (3.63 KB)
Arduino_Telecamera.ino (1.97 KB)