Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Zilele emailului

Best gaming laptop?

Humane (2024)

Recomandare casti 100-150 lei
 Schimbare bec far VW Touran 1T3

Plata impozit PF

Ce parere aveti de viteza/ modul ...

Love Lies Bleeding - 2024
 Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica
 Ce componenta e asta si ce ziceti...

Dupa 20 ani de facultate, am uita...

Mobile.de ofera imprumut de bani ...

problema test grila
 

Arduino IDE - RPM

- - - - -
  • Please log in to reply
1 reply to this topic

#1
mellbo

mellbo

    Member

  • Grup: Members
  • Posts: 885
  • Înscris: 07.06.2010
Acest cod foloseste TIMER1, as vrea sa-l convertesc in TIMER2.
Se poate ? Putin ajutor va rog.

/* PINS*/
#define TACHOMETER_PIN 8
#define buff_time_SIZE 32 //32
volatile unsigned t1CaptureValue = 0;
volatile unsigned pulseCount = 0;
volatile unsigned long t1time;
volatile unsigned long t1last = 0;
volatile unsigned long int buff_time[buff_time_SIZE];
volatile byte head = 0;
volatile byte tail = 0;
unsigned long int PERIODuS = 0;
long int RPM = 0;
double HZ = 0;
unsigned long cMs = 0;
uint32_t lstTest = 0;
float WindSpeed = 0.0;
/*-----------------------------------------------------------------------------*/
void setup() {
pinMode(TACHOMETER_PIN, INPUT);
//RPM READER SETUP
cli();
TCCR1A = 0x0;
TCCR1B = 0x2;
TIFR1 = (1<<ICF1) | (1<<TOV1);
TIMSK1 |= (1<<ICIE1) | (1<<TOIE1);
sei();
Serial.begin(9600);
Serial.println("UPX - RPM");
for (int i=0;i<buff_time_SIZE;i++) buff_time[i] = 0;
}
/*-----------------------------------------------------------------------------*/
void loop() {
cMs = millis();
computeRPM();

if ((cMs-lstTest) >= 500UL) {
lstTest = cMs;
Serial.print(F("WindSpeed: ")); Serial.print(WindSpeed);
Serial.print(F("\tRPM: ")); Serial.println(RPM);
}
}
/*-----------------------------------------------------------------------------*/
void computeRPM(){
uint32_t buff_time_bkp[buff_time_SIZE];
byte newhead;

static unsigned long lastReadRPM = cMs;
if(head != tail) {
newhead = (head + 1) % buff_time_SIZE;
head = newhead;
PERIODuS = buff_time[newhead];
HZ = 1000000.0/PERIODuS;
RPM = (unsigned int)(HZ/0.0166666666666667); // 1/60
lastReadRPM = cMs;
}
if ((cMs-lastReadRPM)>=2000UL) { //no RPM
RPM = 0;
HZ = 0;
PERIODuS = 0;
}

if (PERIODuS > 0)	
	 WindSpeed = (3.8453184 / (float(PERIODuS)/1000000.0));
else
	 WindSpeed = 0.0;
}
/*-----------------------------------------------------------------------------*/
ISR(TIMER1_OVF_vect) {
pulseCount++;
}
/*-----------------------------------------------------------------------------*/
ISR(TIMER1_CAPT_vect) {
unsigned long t1Tmp;
t1CaptureValue = ICR1;
t1Tmp = ((unsigned long)pulseCount << 16) | t1CaptureValue;
t1time = (t1Tmp - t1last) >> 1;
t1last = t1Tmp;
tail = (tail + 1) % buff_time_SIZE;
buff_time[tail] = t1time;
}
/*-----------------------------------------------------------------------------*/


Nu e vorba de lene, e vorba ca ma depaseste captura in isr.
Va multumesc.

Edited by mellbo, 13 June 2020 - 17:19.


#2
mellbo

mellbo

    Member

  • Grup: Members
  • Posts: 885
  • Înscris: 07.06.2010
l-am facut pana la urma cu atach, mi-ar fi placut insa sa pot face schimbarea.
codul asta l-am facut acum doi ani si acum am uitat tot...
nu se prind timerele astea de mine veac.

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate