px




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 98 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7  Další
Autor Zpráva
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: stř 07.03.2018 14:11 
Moderátor serveru
Moderátor serveru

Registrován: 28.2.2005
Příspěvky: 17491
Bydliště: Rakovník, CZ
Obrázky: 0
Ja to kupoval vcelku:
https://www.banggood.com/Funduino-Nano- ... rehouse=CN

_________________
Aby mne mé záliby bavily, nemusím je brát kdovíjak vážně - jyrry.cbcnet.cz


Nahoru
 Profil  
 
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: stř 07.03.2018 20:26 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 714
Bydliště: Vysočina
mior píše:
Poprosím o link, tiež ma to zaujalo...
Ebay - hledej: Arduino Nano Board


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: stř 07.03.2018 20:32 
Moderátor serveru
Moderátor serveru

Registrován: 28.2.2005
Příspěvky: 17491
Bydliště: Rakovník, CZ
Obrázky: 0
https://www.ebay.com/itm/Nano-I-O-Expan ... 1684168863
A doporučuju tu s barevnými piny, i tak jsem to včera asi 2x otočil :oops:

_________________
Aby mne mé záliby bavily, nemusím je brát kdovíjak vážně - jyrry.cbcnet.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: stř 07.03.2018 21:31 
Moderátor serveru
Moderátor serveru

Registrován: 28.2.2005
Příspěvky: 17491
Bydliště: Rakovník, CZ
Obrázky: 0
Chvilku jsem to zase šteloval a výsledkem je servotester s plynulým řízením jak rychlosti přeběhu serva tak s nastavením rozsahu pohybu. Je to sranda jak se servíčka škubou s malým rozkmitem a vysokou rychlostí :lol:


Návod jak vložit video do příspěvku na RCMANIA.cz
Mám u toho vedle sebe "modrý zázrak" HXT500 a dvě silně letité HS50 (černou i modrou). To je jako Moskvič, Mercedes a Bavorák. Ten chróstal se pohybuje nekultivovaně, poskoky a proměnnou rychlostí zato HS-ka si tak jako vrní a jezdí měkce, plynule.


Návod jak vložit video do příspěvku na RCMANIA.cz

_________________
Aby mne mé záliby bavily, nemusím je brát kdovíjak vážně - jyrry.cbcnet.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: pon 12.03.2018 21:09 
Moderátor serveru
Moderátor serveru

Registrován: 28.2.2005
Příspěvky: 17491
Bydliště: Rakovník, CZ
Obrázky: 0
Dneska dorazilo tohle, patří to k sobě:
Příloha:
CP2102.jpg
CP2102.jpg [ 108.36 KiB | Zobrazeno 1156 krát ]
Předpokládám že to bude stačit... :?:

_________________
Aby mne mé záliby bavily, nemusím je brát kdovíjak vážně - jyrry.cbcnet.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: pon 12.03.2018 21:11 
Mazák
Mazák

Registrován: 3.11.2011
Příspěvky: 715
Bydliště: Česká republika
Na naprogramování určitě.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: pon 12.03.2018 22:45 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 714
Bydliště: Vysočina
jyrry píše:
Předpokládám že to bude stačit... :?:
A ani nebudeš muset instalovat driver :) . Koukám, že chystáš automatický mávátka :mrgreen: .


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: úte 13.03.2018 7:45 
Moderátor serveru
Moderátor serveru

Registrován: 28.2.2005
Příspěvky: 17491
Bydliště: Rakovník, CZ
Obrázky: 0
Funguje. Akorát se musí dobře připájet všechny potřebné piny směrem k převodníku :oops:
:mrgreen:

_________________
Aby mne mé záliby bavily, nemusím je brát kdovíjak vážně - jyrry.cbcnet.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: úte 13.03.2018 10:17 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 714
Bydliště: Vysočina
jyrry píše:
Funguje. Akorát se musí dobře připájet všechny potřebné piny směrem k převodníku :oops:
:mrgreen:
Jj, pájení je základ. Ale jen tak pro úplnost. Stačí 4 dráty (+,-,rx,tx). DTR je vlastně reset a když ho převodník nemá, musí se krátce stisknout tlačítko na desce v momentě, kdy začíná nahrávat soft do desky.
A teď už můžeš mít (třeba zítra :D ) telemetrický měřič článků i na tvých 6S (a může to být i s variem)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: úte 20.03.2018 7:59 
Moderátor serveru
Moderátor serveru

Registrován: 28.2.2005
Příspěvky: 17491
Bydliště: Rakovník, CZ
Obrázky: 0
Trochu si hraju s načítáním délky servoimpulzu ze servotesteru. Funguje mi to na X způsobů, s přerušením i bez něj ale když tím krmím servo, je pořád takové nervozní, jemně povrkává.
Dal jsem si posílat do PC načtenou délku a ejhle, motá se to kolem plusmínus 4 us - tedy o takt procesůrku. Dá se s tím něco udělat?
Mimo to jsem zjistil že ten servotester (G.T.Power v alu-profilu) jede s rámcem 16.5 ms ... :?
Takhle to je třeba bez přerušení:
Kód:
// servo čtení:
  int puls_uS;
  long ramec_uS;
  unsigned long aktual_uS;
  unsigned long start_uS;
   
void setup() {
  pinMode(2, INPUT_PULLUP); // vstup PWM
  pinMode(3, OUTPUT); // servo 1
  Serial.begin(9600);
  }

void loop() {
  while (digitalRead(2) == 0) { }
  ramec_uS = (micros() - aktual_uS);
  aktual_uS = micros();
  while (digitalRead(2) == 1) { }
  puls_uS = micros() - aktual_uS;
  Serial.print(puls_uS);
  Serial.print("  ");
  Serial.println(long(ramec_uS));
  pulz(puls_uS);
  }

void pulz(int pulz_uS) {
  start_uS = micros();
  digitalWrite(3, HIGH);
//  delayMicroseconds(pulz_uS);
  while (micros() - start_uS <= pulz_uS){ }
  digitalWrite(3, LOW);
  }

_________________
Aby mne mé záliby bavily, nemusím je brát kdovíjak vážně - jyrry.cbcnet.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: úte 20.03.2018 12:18 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 714
Bydliště: Vysočina
jyrry píše:
... a ejhle, motá se to kolem plusmínus 4 us - tedy o takt procesůrku. ...
Zase jen pro upřesnění, z manuálu - přeložil Google:
ATmega48A / PA / 88A / PA / 168A / PA / 328 / P je nízkonapěťový 8bitový CMOS mikrokontrolér založený na architektuře ARIS RISC. Vykonáním výkonných instrukcí v jednom hodinovém cyklu .....
(Tohle není pic, nebo máš hodiny 250kHz?)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: úte 20.03.2018 16:06 
Mazák
Mazák
Uživatelský avatar

Registrován: 17.1.2017
Příspěvky: 693
Bydliště: Brno
jyrry píše:
Trochu si hraju s načítáním délky servoimpulzu ze servotesteru. Funguje mi to na X způsobů, s přerušením i bez něj ale když tím krmím servo, je pořád takové nervozní, jemně povrkává.
Dal jsem si posílat do PC načtenou délku a ejhle, motá se to kolem plusmínus 4 us - tedy o takt procesůrku. Dá se s tím něco udělat?


To jsou brutální rozdíly. Promicro teda nemá krystal, jen keramický oscilátor, ale to se spíš projeví na teplotní stabilitě v delším horizontu, ne takhle. 4 us je fakt hodne.

Nejpřesnější čtení délky pulzu se dělá přes input capture unit. Vezme se časovač který je napojený na input capture, nastaví se mu nějaký vhodný takt tak, aby měl jednak dostatečné rozlišení, a jednak aby nepřetekl mezi jednotlivými pulzy. Já jsem pro čtení PPM signálu z žákovského výstupu vysílačky nastavoval na 16MHz Promicru osminásobný dělič, čili takt 2 MHz, půl mikrosekundy. Toto pokryje 20 ms PPM signálu a přitom má dostatečné rozlišení na servo signál. A pak se už jen nechá zasílat přerušení od vzestupné nebo sestupné hrany, přičemž čas té hrany je uchovaný v tom input capture registru, a až tak moc nezáleží na tom, kdy se dostaneme k obsluze přerušení (samozřejmě to musíme stihnout do příští hrany signálu).

Kus kódu (v obyčejném céčku, ne Arduino IDE):

Kód:
void init_timer(void)
{
        TCCR1B = _BV(CS11) | _BV(ICNC1);
        TIMSK1 |= _BV(ICIE1);
        edge = 0;
        channel = 0;
}

ISR(TIMER1_CAPT_vect) {
        uint16_t duration = (ICR1 - prev_time);

        prev_time = ICR1;

        if (edge) { // rising
                TCCR1B &= ~_BV(ICES1);
                edge = 0;
       
                if (duration < 500)
                        goto packet_err;
        } else { // falling
                TCCR1B |= _BV(ICES1);
                edge = 1;

                // tady nejak zpracovat informaci, ze mame pulz delky duration
        }
packet_err:
        // tady zpracovat chybnou delku pobytu v nule
}


A na výstup podobně - použít časovač a přes output compare unit říct, po kolika taktech časovače má dojít k překlopení signálu. Opět se to dá říct předem a časovač to pak nějak sám vykoná bez ohledu na to, jak zrovna hlavní program stíhá nebo ne.

_________________
Sky Surfer 1400, samokřídlo Ita, FT Mini Scout, Hydrofoam, FlySky i6


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: úte 20.03.2018 22:28 
Moderátor serveru
Moderátor serveru

Registrován: 28.2.2005
Příspěvky: 17491
Bydliště: Rakovník, CZ
Obrázky: 0
To už je vyšší dívčí, já mám jen strojárnu. Plavu už jen v tom zápisu, samý znaky... :?

_________________
Aby mne mé záliby bavily, nemusím je brát kdovíjak vážně - jyrry.cbcnet.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: úte 20.03.2018 22:46 
Mazák
Mazák
Uživatelský avatar

Registrován: 26.5.2013
Příspěvky: 992
Bydliště: Brno
Jj, u Megy je Input Capture Unit dobrá volba, u Tiny se to musí ošetřit jinak.

_________________
MC-20HOTT,DS-16,X10S,S-trino MkII,RCF Sbach, MXS 64",Maat,250 Race,LOGO550SE,Goblin570


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a servo
PříspěvekNapsal: úte 20.03.2018 23:18 
Mazák
Mazák
Uživatelský avatar

Registrován: 26.5.2013
Příspěvky: 992
Bydliště: Brno
jyrry píše:
To už je vyšší dívčí, já mám jen strojárnu. Plavu už jen v tom zápisu, samý znaky... :?

V zápisu se převážně jedná o bitové operace, něco o bitových operacích najdeš, když do googlu zadáš heslo jazyk C bitové operace, makro _BV(xy) je popsáno v knihovnách avr-lib, jedná se o bitový posun jedničky vlevo o xy míst, tj. 1<<xy, třeba posuv jedničky (např. 0b00000001) o tři bity vlevo, tj. 1<<3 potom je 0b00001000. Když máš nějaký např. 8 bitový registr TMSK s hodnotou 0b11000101, a potřebuješ nastavit bit IE, který je na pozici 5 bitu, tak v pro preprocesor nadefinuješ #define IE 5,
a poté v programu napíšeš TMSK |= _BV(IE). Preprocesor to doplní takto TMSK |= 1<<5, což je vlastně TMSK=TMSK | 1<<5, což je bitový OR mezi bajty TMSK (0b11000101) a 1<<5 (0b0010000), takže výsledek je TMSK (0b11100101). Btw, bity se počítají zleva, 0 až 7.

Jinak TCCR1B |= _BV(ICES1); je nastaveni bitu ICES1 do jedničky v registru TCCR1B, TCCR1B &= ~_BV(ICES1); je vynulování bitu ICES1 v registru TCCR1B. & je bitový AND, a ~ je bitový doplněk (0b11111110 = ~ 0b00000001).

_________________
MC-20HOTT,DS-16,X10S,S-trino MkII,RCF Sbach, MXS 64",Maat,250 Race,LOGO550SE,Goblin570


Naposledy upravil BoŠ dne úte 20.03.2018 23:26, celkově upraveno 1

Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 98 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7  Další

 


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvní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

Hledat:
Přejít na:  

 

  Powered by phpBB® Forum Software © phpBB Group  Český překlad – phpBB.cz 

 

NAVRCHOLU.cz