pulsing s millis/micros

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
robot_chobot
Příspěvky: 3
Registrován: 13 úno 2018, 17:13
Reputation: 0

pulsing s millis/micros

Příspěvek od robot_chobot » 23 srp 2018, 16:53

Zdravim, trapi ma taka vec ze ako natavit alebo inak povedane zrychlit funkciu millis/micros. chcel by som na vytupe 5 a 6 mat tu frekvenciu 7.8kHz, to by sa malo zabezpecit s TCCR0B = TCCR0B & B11111000 | B00000010; a bol som v tom ze to zrychli aj pocitanie millisu ze bdue vlastne 8x rychlejsie podla prescalera. v celom programe ide o to aby vytup bol pulzovany raz jeden raz druhy a hodnotou freq by som vedel zmenit rychlost pulzovania, len totiz sa mi zda ze je to nejak fixne dane na asi 2ms najmenej.a chcel by som aby to pulzovalo podstatne rychlejsie.

int u;
float ampl = 0;
int krok = 25;
int count =0;
unsigned long aktmillis;
unsigned long predmillis = 0;
boolean polvlna =false;
void setup() {
TCCR0B = TCCR0B & B11111000 | B00000010;
//B00000010; 7.8kHz
//B00000011; 980Hz
Serial.begin(9600);
pinMode(u,OUTPUT);
digitalWrite(u,LOW);
}
void loop() {
aktmillis = micros();
float pot = analogRead(A0);
float freq = map(pot,0,1023,100,2000);//nastavit dobru regulaciu casu
if(aktmillis - predmillis >=freq)
{analogWrite(u,ampl);
ampl = ampl + krok;
if(ampl==250 || ampl==0)krok = -krok;
if(ampl == 0)count++;
else;
if(count%2 ==0){count =0;polvlna = HIGH;}
else{polvlna = LOW;};
if(polvlna == HIGH){u = 5;digitalWrite(6,LOW); }
else{u = 6;digitalWrite(5,LOW);}
predmillis = aktmillis;}
Serial.println(aktmillis);
}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 24 hostů