Autor |
Zpráva |
BoŠ
|
Napsal: pon 05.03.2018 21:52 |
|
Mazák
|
|
|
Registrován: 26.5.2013 Příspěvky: 1538 Bydliště: Brno
|
jyrry píše: . ... ...a kdyby tam ještě nebyl ten delay, ale počítání času z loopu, tak by to byl plnohodnotný řídící program bez zbytečných prodlev. Jinak ale pěkný posuv správným směrem! !
_________________ MC-20HOTT,DS-16,X10S,14SG,S-trino MkII,SpeedFire, Extra 102",MiniCorado,LOGO550SE,Goblin570
|
|
Nahoru |
|
|
|
|
|
jyrry
|
Napsal: pon 05.03.2018 22:08 |
|
Moderátor serveru
|
|
|
Registrován: 28.2.2005 Příspěvky: 20822 Bydliště: Rakovník, CZ Obrázky: 0
|
ellet: to je můj stolní komp optiplex 780 z nějakého levnepocitace.cz (nebo tak nějak); píchnul jsem to USB přes měřáček, ukazuje to max. 0,3A když to jedno servo zatížím, jinak 0,1-0,2 max... BoŠ: na to se právě chystám a psychicky připravuju; nalil jsem si dvoudecku suchého bílého, nasypal pár oříšků v paprikovém těstíčku a jdu na to No a zabralo to, ještě jsem to trochu doučesal a zkrátil: Kód: // servo tester @ Arduino nano: int dir = 1; unsigned int min_uS = 1000; unsigned int max_uS = 2000; unsigned int puls2_uS = 1500; unsigned int puls3_uS = 1500; unsigned long period_uS = 20000; void setup() { pinMode(3, OUTPUT); // servo 1 @ pin 3 pinMode(4, OUTPUT); // servo 2 @ pin 4 pinMode(5, OUTPUT); // servo 3 @ pin 5 pinMode(A0, INPUT); // potak @ pin A0 }
void loop() { unsigned long aktual_uS = micros(); unsigned int puls1_uS = analogRead(A0) + min_uS; unsigned int step_ = analogRead(A0) / 10; puls2_uS = puls2_uS + dir * step_; if (puls2_uS >= max_uS || puls2_uS <= min_uS) dir = -1 * dir; pulz(puls1_uS, 3); pulz(puls2_uS, 4); pulz(puls3_uS, 5); while (micros() - aktual_uS <= period_uS){} }
void pulz(int pulz_uS, byte servo) { unsigned long out_uS = micros(); digitalWrite(servo, HIGH); while (micros() - out_uS <= pulz_uS){} digitalWrite(servo, LOW); }
_________________ jyrry.webnode.cz
|
|
Nahoru |
|
|
BoŠ
|
Napsal: úte 06.03.2018 5:22 |
|
Mazák
|
|
|
Registrován: 26.5.2013 Příspěvky: 1538 Bydliště: Brno
|
jyrry píše: ... No, ty delay a počítané smyčky se nepoužívají, protože v dané chvíli, kdy se čeká na odčasování, se procesor v podstatě fláká, a kdyby byl požadavek na obsluhu dalších zařízení, tak by se muselo čekat na odčasování. Počítání času se řeší většinou tak, že při obsluze funkce se do statické proměnné uloží čas vstupu do funkce, a při každém dalším zavolání se vyhodnocuje časový rozdíl. Např. takto Citace: ISR(INT0_vect) { static unsigned long last_millis = 0; unsigned long m = millis();
if (m - last_millis > DEBOUNCE_DELAY ) // ignoruj preruseni { cli(); state=!state; digitalWrite (LED1, state); sei();
}
last_millis = m; GIFR = bit (INTF0); // clear flag for interrupt 0
} Samozřejmě při tomto relativně jednoduchém prográmku je to jedno, ale pokud bys potřeboval reagovat třeba na aktivaci vstupu bez použití přerušení cyklickým čtením tohoto vstupu, tak při čekání na odčasování pulsu by nebyla žádná reakce na tu aktivaci vstupu. Ale to je jen detail. Jinak je to bezva!!
_________________ MC-20HOTT,DS-16,X10S,14SG,S-trino MkII,SpeedFire, Extra 102",MiniCorado,LOGO550SE,Goblin570
|
|
Nahoru |
|
|
jyrry
|
Napsal: úte 06.03.2018 5:34 |
|
Moderátor serveru
|
|
|
Registrován: 28.2.2005 Příspěvky: 20822 Bydliště: Rakovník, CZ Obrázky: 0
|
BoŠ píše: ... v dané chvíli, kdy se čeká na odčasování, se procesor v podstatě fláká, a kdyby byl požadavek na obsluhu dalších zařízení, tak by se muselo čekat na odčasování. ... Jojo, na PICech to tak mám řešené přes přerušení, tady se zatím rozkoukávám Trochu tápu v těch symbolech, například state = !state - to mění logickou úroveň? Je nějaký symbol na změnu znaménka, místo dir = -1 * dir ?
_________________ jyrry.webnode.cz
|
|
Nahoru |
|
|
BoŠ
|
Napsal: úte 06.03.2018 5:40 |
|
Mazák
|
|
|
Registrován: 26.5.2013 Příspěvky: 1538 Bydliště: Brno
|
Vypadalo by to potom nějak takto: Citace: void pulz(int pulz_uS, byte servo) { static unsigned long last_micros=0; unsigned long out_uS = micros(); if(last_micros=0) last_micros=out_uS; if(out_uS-last_micros < pulz_uS) { digitalWrite(servo, HIGH); last_micros=out_uS; } else { digitalWrite(servo, LOW); last_micros=0 } A ještě by se musela upravit v loop sekvence volání jednotlivých pulsů. Ale to je opravdu spíš takové cvičení, tak jak to máš je to pro daný účel v pohodě
_________________ MC-20HOTT,DS-16,X10S,14SG,S-trino MkII,SpeedFire, Extra 102",MiniCorado,LOGO550SE,Goblin570
Naposledy upravil BoŠ dne úte 06.03.2018 6:01, celkově upraveno 1
|
|
Nahoru |
|
|
BoŠ
|
Napsal: úte 06.03.2018 5:47 |
|
Mazák
|
|
|
Registrován: 26.5.2013 Příspěvky: 1538 Bydliště: Brno
|
jyrry píše: Jojo, na PICech to tak mám řešené přes přerušení, tady se zatím rozkoukávám Trochu tápu v těch symbolech, například state = !state - to mění logickou úroveň? Je nějaký symbol na změnu znaménka, místo dir = -1 * dir ? state = !state - ano, jedná se o inverzi, použito většinou u dvoustavových proměnných unsigned char (většinou se je_nula změní na není_nula, fyzická interpretace záleží na datovém typu). Změnu znaménka s ohledem na možnost různých datových typů bych řešil raději tvým případem, tj. dir=-1*dir. Šlo by to řešit např. na binární úrovni, ale asi by to bylo zbytečné.
_________________ MC-20HOTT,DS-16,X10S,14SG,S-trino MkII,SpeedFire, Extra 102",MiniCorado,LOGO550SE,Goblin570
|
|
Nahoru |
|
|
ellet
|
Napsal: úte 06.03.2018 9:46 |
|
Mazák
|
|
|
Registrován: 12.2.2016 Příspěvky: 1975 Bydliště: Vysočina, ČR
|
jyrry píše: Trochu tápu v těch symbolech, například state = !state - to mění logickou úroveň? .... Držel bych se ustáleného výrazu - negace - jak je uváděno v literatuře.
|
|
Nahoru |
|
|
BoŠ
|
Napsal: úte 06.03.2018 10:44 |
|
Mazák
|
|
|
Registrován: 26.5.2013 Příspěvky: 1538 Bydliště: Brno
|
ellet píše: Držel bych se ustáleného výrazu - negace - jak je uváděno v literatuře. No, nevím, jaká je skutečná interpretace pro jednotlivé datové typy, pro binár to určitě negace bude, pro unsigned char si nejsem jist.
_________________ MC-20HOTT,DS-16,X10S,14SG,S-trino MkII,SpeedFire, Extra 102",MiniCorado,LOGO550SE,Goblin570
|
|
Nahoru |
|
|
ellet
|
Napsal: úte 06.03.2018 11:53 |
|
Mazák
|
|
|
Registrován: 12.2.2016 Příspěvky: 1975 Bydliště: Vysočina, ČR
|
BoŠ píše: No, nevím, jaká je skutečná interpretace pro jednotlivé datové typy.... Odvolám se na Herouta. Booleovský výraz negace je "!" (v Pascalu - NOT) a interpretace je podle datových typů různá. V jazyku C je používán datový typ int, kde nulová hodnota znamená FALSE a nenulová hodnota (nejčastěji 0 ale není to podnínkou) je TRUE.
|
|
Nahoru |
|
|
BoŠ
|
Napsal: úte 06.03.2018 12:01 |
|
Mazák
|
|
|
Registrován: 26.5.2013 Příspěvky: 1538 Bydliště: Brno
|
ellet píše: Odvolám se na Herouta. Booleovský výraz negace je "!" (v Pascalu - NOT) a interpretace je podle datových typů různá. V jazyku C je používán datový typ int, kde nulová hodnota znamená FALSE a nenulová hodnota (nejčastěji 0 ale není to podnínkou) je TRUE. Jj, tak si to také nějak matně pamatuji. Jinak na boolean proměnné používám unsigned char, unsigned int je zbytečné plýtvání pamětí. Pokud chci ještě více šetřit, tak používám k záznamu stavu bitové pole a maskování, to je ale v těchto jednoduchých programech zbytečné.
_________________ MC-20HOTT,DS-16,X10S,14SG,S-trino MkII,SpeedFire, Extra 102",MiniCorado,LOGO550SE,Goblin570
|
|
Nahoru |
|
|
ellet
|
Napsal: úte 06.03.2018 12:17 |
|
Mazák
|
|
|
Registrován: 12.2.2016 Příspěvky: 1975 Bydliště: Vysočina, ČR
|
BoŠ píše: Jj, tak si to také nějak matně pamatuji. Jinak na boolean proměnné používám unsigned char, unsigned int je zbytečné plýtvání pamětí. Pokud chci ještě více šetřit, tak používám k záznamu stavu bitové pole a maskování, to je ale v těchto jednoduchých programech zbytečné. Tomu rozumím, hrál jsem si roky s assemblerem, kde se to jinak nedělá (nebo nedělalo). Já bych se ale nechtěl chlubit, že si něco pamatuju, věk už mě nutí k častějšímu opakování a studiu.
|
|
Nahoru |
|
|
BoŠ
|
Napsal: úte 06.03.2018 12:24 |
|
Mazák
|
|
|
Registrován: 26.5.2013 Příspěvky: 1538 Bydliště: Brno
|
ellet píše: Tomu rozumím, hrál jsem si roky s assemblerem, kde se to jinak nedělá (nebo nedělalo). Já bych se ale nechtěl chlubit, že si něco pamatuju, věk už mě nutí k častějšímu opakování a studiu. Však píšu, že matně ...
_________________ MC-20HOTT,DS-16,X10S,14SG,S-trino MkII,SpeedFire, Extra 102",MiniCorado,LOGO550SE,Goblin570
|
|
Nahoru |
|
|
jyrry
|
Napsal: úte 06.03.2018 23:14 |
|
Moderátor serveru
|
|
|
Registrován: 28.2.2005 Příspěvky: 20822 Bydliště: Rakovník, CZ Obrázky: 0
|
Trochu jsem si zapájel a stvořil pidiperiferie Příloha:
nano.jpg [ 107.87 KiB | Zobrazeno 5610 krát ]
vlevo 2x tlačítko, pak 2x LEDka, vpravo LEDka a trimr je to kompaktní a neválí se mi toho chumel u klávesnice
_________________ jyrry.webnode.cz
|
|
Nahoru |
|
|
ellet
|
Napsal: stř 07.03.2018 9:41 |
|
Mazák
|
|
|
Registrován: 12.2.2016 Příspěvky: 1975 Bydliště: Vysočina, ČR
|
jyrry píše: ...je to kompaktní a neválí se mi toho chumel u klávesnice Asi si to taky pořídím, za 27Kč - nekup to.
|
|
Nahoru |
|
|
mior
|
Napsal: stř 07.03.2018 10:53 |
|
Mazák
|
|
|
Registrován: 21.9.2008 Příspěvky: 3153 Bydliště: Nové Mesto nad Váhom, SK
|
ellet píše: Asi si to taky pořídím, za 27Kč - nekup to. Poprosím o link, tiež ma to zaujalo...
_________________ Realistické RC modely - http://rcmodely.cevaro.sk
|
|
Nahoru |
|
|
Kdo je online |
Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 10 návštevníků |
|
Nemůžete zakládat nová témata v tomto fóru Nemůžete odpovídat v tomto fóru Nemůžete upravovat své příspěvky v tomto fóru Nemůžete mazat své příspěvky v tomto fóru Nemůžete přikládat soubory v tomto fóru
|
|
|