Visualizza messaggio singolo
Vecchio 29 luglio 14, 22:11   #10 (permalink)  Top
romoloman
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
Continuiamo con le puntate....

Il codice scaricato dal repositori così come viene fornito non funziona per lo meno per la parte RPM, infatti: restituisce alla radio la rotazione in Hertz e necessita di un minimo di configurazione per l'utilizzo con OpenTX (2940)
devo dire che le modifiche da me apportate sono veramente minime, più che altro mi hanno consentito di capirne il funzionamento per sviluppi futuri, ad esempio per quanto riguarda il livello del carburante per utilizzare altri tipi di sensori quali flussimetri o anche con il sensore attuale tener conto della posizione del veivolo utilizzando un accelerometro.

Il codice da me modificato è contenuto nello zip allegato e la configurazione del sensore avviene mediante il file oxs_config.h

Prima di commentare il codice invece, posto uno sketch di arduino utilizzato su un altro arduino per simulare la centralina dei giri:
Poiché è presente un fotoaccoppiatore, invertente che nella configurazione utilizzata inverte il segnale, ho pensato di generare un impulso negativo molto stretto, nella considerazione che non mi è dato sapere la lunghezza dell'impulso prodotto dalle varie centraline.
Codice:
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
*/

//generatore di frequenza fissa
boolean Led = 0;

void setup(){
  pinMode(13, OUTPUT);
  pinMode(8, OUTPUT);

  cli(); //disabilito gli interrupts

  TCCR1A = 0;// setto l'intero registro TCCR1A  a 0
  TCCR1B = 0;// idem per TCCR1B
  TCNT1  = 0;// inizializzo il valore del contatore a 0
  // setto il comparatore per una frequenza di 20Hz
  OCR1A = 3124;// = (16*10^6) / (20*256) - 1 
  // abilito il modo CTC
  TCCR1B |= (1 << WGM12);
/*  
Tabella del prescaler
CS12	CS11	CS10	Prescaler
0	0	0	0
0	0	1	1
0	1	0	8
0	1	1	64
1	0	0	256
1	0	1	1024
*/  
  // Setto CS12 per il prescaler a 256
  TCCR1B |= (1 << CS12) ;  
  // abilito l'interrupt
  TIMSK1 |= (1 << OCIE1A);
  sei();//consento gli interrupt
}


ISR(TIMER1_COMPA_vect){
  if (Led){
    digitalWrite(13,HIGH);
    Led = 0;
  } else {
    digitalWrite(13,LOW);
    Led = 1;
  }
  digitalWrite(8,LOW);
  for (int i=1; i<1000;i++) {} //perdo del tempo
  digitalWrite(8,HIGH);  
}
  

void loop(){
  //non usato
}
Il codice non è nulla di particolare, ma utilizza un interrupt sul timer uno per generare l'impulso in modo da garantire una frequenza il più precisa possibile. (20Hz)
Il led collegato in genere sul pin 13 invece lampeggia a frequenza di 10 Hz.
Files allegati
Tipo file: zip openxsensor.zip‎ (51,0 KB, 75 visite)
__________________
Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo
Grazie "TRANQUILLO"
FAI 15766
romoloman non è collegato   Rispondi citando