Go Down

Topic: VirtualWire e ATmega8, cattivi amici (Read 1 time) previous topic - next topic

pelletta

Feb 09, 2013, 11:34 pm Last Edit: Feb 09, 2013, 11:40 pm by Pelletta Reason: 1
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 :smiley-sweat:

leo72

Hai un link alla citata lib? Magari dandogli un'occhiata si riesce a capire se l'adattamento al'Atmega8 è fattibile oppure no.

pelletta

L'ho presa qui

Dice anche che è compatibile con gli ATmega8 ma non riesco proprio a ottenere un minimo di comunicazione con quei micro.

Ho dimenticato di dire che nelle prove stavo usando l'IDE 022, se può servire posso anche fare un ultimissimo tentativo con l' 1.01

Testato

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

e senza antenna ?
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

pelletta

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

leo72

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.

Tornando alla lib, vedo che comunque qualcuno l'ha usata con gli Atmega8 con successo:
http://www.robertoinzerillo.com/wordpress/?p=74

Lì hanno un Atmega8A, ma non dovrebbe cambiare nulla rispetto all'Atmega8 se non i consumi leggermente minori.

pelletta

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

lesto

#7
Feb 12, 2013, 08:19 pm Last Edit: Feb 12, 2013, 08:21 pm by lesto Reason: 1
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)

Code: [Select]
/*
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. http://en.wikipedia.org/wiki/1-Wire

ovviamente poi devi confrontare i valori misurati con il vero arduino
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

BrainBooster


lesto

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up