Arduino (C++) - zkraceni doby impulzu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Arduino (C++) - zkraceni doby impulzu – C / C++ – Fórum – Programujte.comArduino (C++) - zkraceni doby impulzu – C / C++ – Fórum – Programujte.com

 

martin
~ Anonymní uživatel
1600 příspěvků
29. 3. 2013   #1
-
0
-

Zdravim,

potrebuju v Arduinu zkracovat impulzy.

Na vstup mi prijde impulz, napr. 10ms ja ho potrebuju zkratit o vzdy stejnou hodnotu - napr. 20% a nastavit na vystup.

Takze vstup bude zapnuty 10ms a vystup bude zapnuty 8ms. Problem je, ze delka vstupu se meni, klidne tam muze byt treba 100ms a ja pak musim nastavit 80ms na vystup.

Arduino neumi (aspon tedy nevim jak) vice vlaken.

Kdyz pouziju nasledujici typ kodu:

int led = 13;
void setup() {               
  pinMode(led, OUTPUT);    
}
void loop() {
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led, LOW);
  delay(1000);
}

Tak zapnu vystup a na stanovenou dobu zastavim cely program a pak teprve pokracuji, coz je nepripustne.

Napadlo me udelat nejaky casovac napr 1 mikrosekunda a vzdy ho zvetsovat o 1. U prodlouzeni pulzu si myslim, ze by problem nebyl. Jak ale vyresim zkraceni?

Zatim jsem napsal:

const byte in = 7; // namapovani pinu na I/O procesoru
const byte out = 8;

unsigned long minuly;
unsigned long casovacIn = 0;
unsigned long casovacOut = 0;
boolean inStav = 0;

byte konstanta = 20; // 20%

void setup() {
  pinMode(in, INPUT); // nataveni funkce pinu
  pinMode(out, OUTPUT);
}

void loop() {
  if (in == HIGH) {
    inStav = true;
    casovacIn++;
  } else {
    minuly = casovacIn;
    inStav = false;
    casovacIn = 0;
  }
  
  if (inStav && (minuly*konstanta/10) < casovacOut) {
    casovacOut++;
    digitalWrite(out, HIGH);
  } else {
    casovacOut = 0;
    digitalWrite(out, LOW);
  }
  
  delayMicroseconds(1);  
}

Je to dobry postup? Jak byste to resili vy?

Dekuji za pomoc!

Nahlásit jako SPAM
IP: 93.89.146.–
yaqwsx+9
Posthunter
29. 3. 2013   #2
-
0
-

S Arduinem jsem nikdy nepracoval, ale vzhledem k tomu, že se jedná o ATmegy, tak ten framework toho asi moc nemění.

Nastuduj si práci s časovači a přerušeními. Osobně bych si nastavil externí přerušení na vstupní pin. V tomto přerušení bych si na vzestupné hraně uložil počáteční hodnotu časovače. Při sestupné hraně bych si v tomto přerušení uložil koncovou hodnotu časovače. Rozdílem těchto hodnot získám délku pulsu. Tu zkrátím a následně využiji časovač v módu CCR k vygenerování nového zkráceného pulzu.

Nahlásit jako SPAM
IP: 37.188.227.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Krio32
~ Anonymní uživatel
2 příspěvky
8. 11. 2015   #3
-
0
-

ahoj , resil jsem zkraceni inpulsu na zapalovani predstihu motorky

a pouzil jsem toto , ted je terba udelat upravu pro arduino

 

 

http://k15.kreteni.cz/zapalovani.php

Nahlásit jako SPAM
IP: 94.124.110.–
Krio32
~ Anonymní uživatel
2 příspěvky
8. 11. 2015   #4
-
0
-

kdo sedi nad stejnmy problemem , tak at se ozve na skype gremgrem32,

Nahlásit jako SPAM
IP: 94.124.110.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Zkrácení kódu — založil oxidián

Zkrácení stringu pomocí Trim()? — založil JiriVavru

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý