Switch to full style
Dneska se procesory objevují všude, pokud máte nějaký nápad, či udělát, tak se neváhejte pochlubit.
Odeslat odpověď

Re: Arduino a servo

úte 13.02.2018 12:52

BoŠ píše:... že pro AtTiny platí...,
Platí to pro avr, citát je z ATmegy.

Re: Arduino a servo

úte 13.02.2018 13:09

ellet píše:Platí to pro avr, citát je z ATmegy.


Souhlas, já se díval pouze na Tiny, tak jsem nechtěl být zavádějící

Re: Arduino a servo

stř 14.02.2018 17:10

Jak se daří Jyrry?

Re: Arduino a servo

stř 14.02.2018 18:10

viewtopic.php?f=39&t=83110 :-)
Akorát jsem si zadělal na pakárničku rozsahem PWM pro servo 500-2500us... kde jsem to vzal teda nevím :roll:
Ale už to maká jak si představuju.
Teď zkusím některé z mých projektů na PICech převést na Arduino, abych se pocvičil :-)
A na cestě je ATmega328 nano a adapter USB-TTL CP2102.

Mám tam i ošetření když vynechají vstupní PWM pulzy 3x za sebou:
// dve serva na jednom kanalu:
int neutral_uS = 1500;
int hystereze = 20;
int puls_uS = 1500;
int puls1_uS = 1500;
int puls2_uS = 1500;
int ramec_uS = 20000;
byte pocet_imp = 0;

const byte LED = 1;
const byte PWM = 2;
const byte servo1 = 3;
const byte servo2 = 4;

void setup() {
pinMode(LED, OUTPUT); // LEDka
pinMode(PWM, INPUT); // vstup PWM
pinMode(servo1, OUTPUT); // servo 1
pinMode(servo2, OUTPUT); // servo 2
attachInterrupt(0, ctipuls, RISING);
}

void loop() {
pocet_imp++;
if (pocet_imp > 3) puls_uS = neutral_uS;
if (puls_uS > 1520){
puls1_uS = puls_uS * 2 - 2000;
}
else {
puls1_uS = 1000;
}
if (puls_uS < 1480){
puls2_uS = puls_uS * 2 - 1000;
}
else {
puls2_uS = 2000;
}
if (puls_uS > neutral_uS + hystereze) digitalWrite(LED, HIGH);
if (puls_uS < neutral_uS - hystereze) digitalWrite(LED, LOW);
noInterrupts();
pulz(puls1_uS, servo1);
pulz(puls2_uS, servo2);
interrupts();
delayMicroseconds(ramec_uS - puls_uS);
}

void pulz(int pulz_uS, byte servo) {
digitalWrite(servo, HIGH);
delayMicroseconds(pulz_uS);
digitalWrite(servo, LOW);
}

void ctipuls() {
unsigned long aktual_uS = micros();
long newpuls_uS;
while (digitalRead(2) == HIGH) {
}
newpuls_uS = micros() - aktual_uS;
if (newpuls_uS < 900) newpuls_uS = puls_uS; // osetreni delky
if (newpuls_uS > 2100) newpuls_uS = puls_uS; // osetreni delky
puls_uS = newpuls_uS;
pocet_imp = 0;
}

Re: Arduino a servo

stř 14.02.2018 20:32

jyrry píše:...A na cestě je ATmega328 nano a adapter USB-TTL CP2102.
Pro Nano ten převodník nepotřebuješ ale určitě se bude hodit pro Mini Pro, které brzo objednáš. (A snad jsi objednal převodník s 6-ti koiíky, je s ním pohodlnější práce)

Re: Arduino a servo

stř 14.02.2018 22:53

Aaaa, pardon, je to pro mini a 6 kolíků ano
Čerpám chytrosti z https://arduino-shop.cz/ :|

jo a viewtopic.php?f=39&t=83110&p=1398118#p1398118 :lol:

Re: Arduino a servo

pát 16.02.2018 21:13

Ještě lama-otázku :-)
Co budu potřebovat k téhle desce? Bootloader tam asi nebude, přes co se to nakrmí?

Re: Arduino a servo

pát 16.02.2018 21:33

jyrry píše:Ještě lama-otázku :-)
Co budu potřebovat k téhle desce? Bootloader tam asi nebude, přes co se to nakrmí?
Nic, je tam (mám tu samou z ebay).

Re: Arduino a servo

pát 16.02.2018 23:18

Chlapi, máte mně na svědomí :lol:

S PICama jsem polevil také proto že mi nechodí správně prostředí PICBasic-u na 64b woknousech v novém (no, repasovaném...) kompu. Tohle na tom chodí :mrgreen:

Re: Arduino a servo

pon 05.03.2018 16:41

Tak když už jste mně navnadili... :lol:
Zatím z postupně objednaných destiček a hračiček dorazilo tohle:
A_nano.jpg
Co k tomu ještě musí přibýt abych to mohl nakrmit prográmkem z Arduino IDE? Podle https://arduino-shop.cz/arduino/1164-ar ... deska.html jen instalovat driver?

Re: Arduino a servo

pon 05.03.2018 16:45

Nemusí se většinou nic instalovat. Stačí připojit přes USB, zvolit správný typ desky a můžete nahrávat.

Re: Arduino a servo

pon 05.03.2018 17:46

Jestli to nepojede. tak si to o driver řekne. Jestli ti nejde v PicBasicu ten tvůj druhý řádek (zavináč....), tak se to dá obejít.

Re: Arduino a servo

pon 05.03.2018 18:22

Už si tu skrz to hýbu servem 8)
Bylo mi podezřelé že to je tak jednoduché. A je :mrgreen:

Re: Arduino a servo

pon 05.03.2018 19:33

Teda ta destička pod tím, ta je ale šikovná... dají se na to napíchnout rovnou serva, poťák, osciloskop, atd... pinů je dost a dost :mrgreen:
Proč jsem to neznal dřív? :?
servotester.jpg

A je to; bez namáčení a bez přerušení :mrgreen:
Kód:
// servo tester:
  unsigned int puls1_uS = 1500;
  unsigned int puls2_uS = 1500;
  unsigned int puls3_uS = 1500;
  unsigned int krok;
 
  unsigned long aktual_uS;
  unsigned long ramec_uS = 20000;
   
  const byte PWM = 2;
  const byte servo1 = 3;
  const byte servo2 = 4;
  const byte servo3 = 5;
  const byte POT = A0;
   
  void setup() {
  pinMode(servo1, OUTPUT); // servo 1
  pinMode(servo2, OUTPUT); // servo 2
  pinMode(servo3, OUTPUT); // servo 3
  pinMode(POT, INPUT); // POTak
  }

void loop() {
  while (puls2_uS < 2000){
    nacti();
    puls2_uS = puls2_uS + krok;
    pulzy();
    while (micros() - aktual_uS < ramec_uS){}
    }
  while (puls2_uS > 1000){
    nacti();
    puls2_uS = puls2_uS - krok;
    pulzy();
    while (micros() - aktual_uS < ramec_uS){}
    }
  }

void nacti() {
  aktual_uS = micros();
  puls1_uS = analogRead(POT) + 1000;
  krok = analogRead(POT) / 10;
  }

void pulzy() {
  pulz(puls1_uS, servo1);
  pulz(puls2_uS, servo2);
  pulz(puls3_uS, servo3);
  }

void pulz(int pulz_uS, byte servo) {
  digitalWrite(servo, HIGH);
  delayMicroseconds(pulz_uS);
  digitalWrite(servo, LOW);
  }

Servotester má 3 výstupy; na prvním se servo hýbe dle poťáku, na druhém cykluje s rychlostí dle poťáku (od "stojí" až cca 4 cykly/sec) a na třetím je "neutrál" - 1,500 ms.
S tím cyklováním to je legrace - zvlášť u levných serv (jako HXT500, nějaké HK apod.) se při pomalém pohybu servo mění na krokový motor :mrgreen: a kupodivu to ustály třeba letité (>15 roků) HS50 ...

Re: Arduino a servo

pon 05.03.2018 21:43

Říkal jsem, že tě Arduino nemine ale ten notebook, z toho jak to napájíš, moc radost nemá.
Odeslat odpověď