Stránka 2 z 2

Napsal: 15 led 2016, 12:42
od pocitujlasku
Arduino by som nezavrhoval, niekedy som sa hral s x51 v C a ASM - tam sa da povedat, ze mas vsetko pod kontrolou, ale napisat program je casovo narocne. Dnes je bohuzial doba taka, ze kazda usetrena hodina je k dobru.
Teraz si pre domace vychytavky robim vsetko v arduino, jednoduche veci viem zbuchat relativne rychlo, pohodlne, na kopec veci existuje kopec kniznic. Prave dokoncujem ovladanie akvarka arduino+display 5110+wifi modul. prototyp som mal hotovy za 2 dni. Mam tam datum, cas, teplotu (DS18B20), nastavim si casy zapnutia/vypnutia, a to cele viem ovladat cez telnet. V ASM, alebo C by som to robil mesiac.
Kedze vacsinou som samouk, tak som isiel cestou pokus/omyl - nasiel som si nejaky hotovy projekt, ktory robil zhruba to, co som potreboval a skusal som ho okresat, upravit, prisposobit.
Ono vsetky jazyky su o tom istom, len sa lisia zapisom.

Napsal: 18 led 2016, 13:09
od denny_ul
poradí někdo, jak se v arduinu změří takový impuls
Obrázek
v Bascomu to vypadá takto

Kód: Vybrat vše

Bitwait Pinb.0 , Set                     'čekej na úroveň "1"
Time1 = Start Timer1                     'spusť timer1
Bitwait Pinb.0 , Reset                   'čekej na úroveň "0"
Time2 = Stop Timer1                      'zastav timer1

pulsbreite = Timer1                      'zapiš stav timeru1
když nechci použít "pulsein"

Napsal: 18 led 2016, 14:33
od popopepe
Téměř stejně:

Kód: Vybrat vše


//
//    FILE: PulseWidthMeter.pde
//  AUTHOR: Rob Tillaart
//    DATE: 2012-mar-20
//
// PUPROSE:
//

unsigned long count = 0;
void setup()
{
  Serial.begin(9600);
  Serial.println("pulse width meter 0.1");

  pinMode(3, INPUT);
}

void loop()
{
  count = 0;
  while ((PIND & B00001000) == B00000000); // wait for HIGH
  unsigned long start = micros();                 // this line influences the reading...
  while ((PIND & B00001000) == B00001000) count++; // start counting until LOW
  unsigned long stop = micros();

  Serial.print("CNT: ");
  Serial.println(count, DEC);
  Serial.print(stop-start, DEC);
  Serial.println(" microseconds ");
  Serial.print((1.0*count)/(stop-start), 3);
  Serial.println(" count per microseconds ");

  delay(1000);
}

http://forum.arduino.cc/index.php?topic=96971.0
Ale nezkoušel jsem to fyzicky.

Napsal: 19 led 2016, 18:51
od saitt

Kód: Vybrat vše

PIND & B00001000) == B00000000
může někdo vysvětlit tenhle příkaz nepoužívám...to je nějaká maska nebo něco takového?

Napsal: 19 led 2016, 19:16
od Habesan
Jo.
Vyhodnocuje se tím 4. LSB na PIND, a když je v nule je výsledek logická jednička.

Napsal: 20 led 2016, 19:05
od saitt
Něco podobného jsem viděl v programech v PLCéčku. Jo pro ty co se nemužou dostat na piratebay....
https://thepiratebay.se/search/arduino/0/99/0

Napsal: 21 led 2016, 10:13
od Jurawood
akorát bych dal do loop() hned na začátek while (1)
a místo B00000000 0b00000000.
Bude to několikanásobně rychlejší a přesnější :-)
A pokud odpráskneš i časovač pro micros() a načasuješ si i timer sám tak budeš rychlejší asi 20x
Jsou to maličkosti

Napsal: 25 led 2016, 18:29
od Le_Ze
Měl bych dotaz.
Když chceme na displej 20x4 zobrazovat čas do sepnutí pinu.
Hodiny a minuty není problém.
Kamoš to ale chce i s vteřinami.
Není to plynule.
skače to po 1 - 2 - 3 vteřinch, podle náročností vykonavaneho programu.

Napsal: 25 led 2016, 19:55
od Habesan
To jsem čekal, že je ATmega výkonnější.
Nastav si časovač na přerušení kažnou sekundu (nebo trochu méně) a ty sekundy posílej v obsluze toho přerušení.

Napsal: 25 led 2016, 20:35
od lesana87
Sebevýkonnější hw zazdí špatně napsaný sw. Nedávno jsem dělala stopky, procesor (AVR) běžel na 32kHz a stíhal multiplexovat displej (i se sekundama) a ještě půlku času spát.

Napsal: 26 led 2016, 21:36
od Le_Ze
Každý nemůže byt tak šikovný.