Ciao a tutti, dopo molte ore trascorse a provare e a nominare invano il nome di tutte le divinità esistenti ho scoperto che la libreria virtualWire non funziona sugli ATmega8.
Sto giocando con dei moduli radio 433 MHz, di fatto con gli ATmega8 non ne vogliono proprio sapere di comunicare.
Ho provato anche diverse frequenze 16, 8, 1 MHz per il micro ma il risultato non cambia.
L'IDE compila senza problemi gli sketch.
Ho testato infine gli stessi sketch con un ATmega328 a 1MHz e tutto funziona bene.
Questo post non è la solita richiesta di aiuto, metto gli ATmega328 e via... ho il sangue abbastanza avvelenato stasera
Spero che queste informazioni possono evitare qualche incazzatura a qualcuno in futuro... se sapete perchè non va comunque fa sempre piacere
pelletta in base alla tua esperienza confermi le distanze raggiungibili ?
nella pagina che hai lincato dice che gia' a 6 metri (in un ufficio), nonostante l'uso di un antenna da 13cm, la comunicazione e' corrotta
Non mi risultano dati corrotti.
Con uno spezzone di filo di 15 cm per antenna su entrambi i moduli (ricevente e trasmittente) ho passato tranquillamente 4 piani.
Senza antenna devo ancora vedere quanto coprono
La lib pare settare correttamente i registri per Atmega8, per lo meno da una rapida occhiata.
Sicuramente è scritta per supportare l'IDE 002x dato che carica il file wiring.h e non Arduino.h, quindi la prova con l'IDE 1.0 non dovrebbe neanche compilare lo sketch.
Non so che dire... a me non funzionano.
Ho visto il codice che usa per trasmettere ed è lo stesso che ho io.
Appena ho un ritaglio di basetta faccio una schedina per l'ATmega8A, ce l'ho solo in package qfn e non posso testarlo su breadboard al momento
non hai qualcosa per verificare i valori che escono dal pin? forse addirittura con un arduino usando gli interrupt on change e bufferizzando i tempi di cambio... ovviamente anche le richieste dal mini dovreanno essere intervallate il più possibile.
ecco il codice (non testato, ma compila)
/*
Logical state analizer by Lesto @ www.arduino.cc/forum
*/
const byte arraySize = 128;//must be power of 2
const byte indexJump = 256/arraySize; //we will use this index as increment to play with overflow!
volatile uint32_t buffer[arraySize];
volatile uint8_t index = 0;
volatile uint8_t toPrint = 0;
uint8_t print_index = 0;
void setup(){
Serial.begin(115200);
Serial.println("Remeber first result is invalid and max precision is 4microsec, 250kHz");
attachInterrupt(0, countTime, CHANGE);//0 is pin 2 on arduino uno, ethernet, mega; 3 on Leonardo; 0 on due
}
void loop(){
while(print_index != index){
if (toPrint > arraySize){
Serial.println("There is too much data for buffer size, some data is lost forever");
}
Serial.println(buffer[print_index]-buffer[print_index-indexJump]); //first result is invalid
Serial.flush();
print_index+=indexJump;
toPrint--;
}
}
void countTime(){
buffer[index]=micros();
index += indexJump;
toPrint++;
}
poichè il 1wire lavora in millisecondi la precisione e la velocità seriale non dovrebbero essere un rosso problema. 1-Wire - Wikipedia
ovviamente poi devi confrontare i valori misurati con il vero arduino
ehm ho confuso virtualWire e 1Wire.. BTW quei moduli funzionano normalmente a 9600baud, il che non dovrebbe essere un grosso problema SE le comunicazioni sono inframezzate