<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
<META content="MSHTML 6.00.2900.2180" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=Arial size=2>Dobrý den,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>chcípla nám kočka a nemá kdo lovit takové to 
chlupaté s ocáskem, no a než se sežene a vyroste nové kotě v lovce, tak 
nás v září hlodavci ohlodají. </FONT><FONT face=Arial size=2>Našel 
jsem nějaké teorie i schémátka (vyloveno z archive.org a fakt si vzpomínám jenom 
velmi matně kde to mohlo být, proto je v příloze), no a protože prostě nemám 
plnou lékárničku s tím co tam chtějí, tak jsem to předělal do arduina. No 
tak se mě nechtělo na rozpálenou půdu.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Nevím proč, ale zdá se mně, že to bylo 2x pomalejší 
než to mělo být (20-32-40kHz), no tak jsem udělal jednu úpravu a to tu, že 
oscilátor se nedělí dvěma a rovnou je brán jako Q0 (zde oznečené jako Q1). 
Schéma má číslování posunuté, je to tak i v tom programu. Axx je označené 
vývody 4011.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Mohl by někdo kvalifikovaně odhadnout, kolik 
microsec zhruba může zabrat to zpracování v cyklu FOR...? Stačí mi zhruba 
nástřel ze zkušeností, kolik by to mohlo být, nikoli výpočet. Chci to na 
upřesnění toho DelayMicro</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>A samozřejmě pokud máte nějaké tipy ohledně toho 
bitshiftu, či kritiku kódu že se to dělá jinak, tak se za to taky nebudu 
zlobit.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2>No a největší sranda je ta, že když jsem tenhle kód 
teďka hodil do starého prostředí Arduino-1.5.1, tak jel 2x rychleji, než z 
UECIDE, vek terém jsem to psal a na které jsou upravené i čísla u 
DelayMicrosec a to mám v obou vybranou stejnou desku (Arduino 
Nano). </FONT><FONT face=Arial size=2>Asi mi v tom taky řádili 
mimozemšťani, jako komusi nedávno v C::B.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>Děkuji, JL.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV><PRE>#include <avr/wdt.h> // watchdog</PRE><PRE>#define LED 13<BR>#define OUT1 9;  // pravá kaskáda tranzistorů<BR>#define OUT2 10; // levá</PRE><PRE>byte SW1 = 1;   // 0 = hmyz, 1 = zvířata</PRE><PRE>void hash_4020_1(){</PRE><PRE>    // binární dělička 4020<BR>    // schéma plašiče je blbě číslované, začíná Q1 místo Q0 jak je v datasheetu<BR>    byte Q01 = 0;<BR>    byte Q04 = 0;<BR>    byte Q06 = 0;<BR>    byte Q08 = 0;<BR>    byte Q10 = 0;<BR>    byte Q12 = 0;<BR>    byte Q13 = 0;<BR>    byte Q14 = 0;</PRE><PRE>    byte A11 = 0;<BR>    byte A12 = 0;<BR>    byte A09 = 0;<BR>    byte A10 = 0;</PRE><PRE>        <BR>        for (unsigned int i = 0; i <= 16383 ; i++){     // pin QC = i, ale nějak to nevycházelo moc nízko, tak i=Q1</PRE><PRE>            Q01 = i & 1 ; // kaskáda binárních děliček<BR>            Q04 = i>>3 & 1 ;<BR>            Q06 = i>>5 & 1 ;<BR>            Q08 = i>>7 & 1 ;<BR>            Q10 = i>>9 & 1 ;<BR>            Q12 = i>>11 & 1 ;<BR>            Q13 = i>>12 & 1 ;<BR>            Q14 = i>>13 & 1 ;</PRE><PRE>            if (SW1 == 0) // 4011<BR>                A12 = Q12 | Q08 ;<BR>            else <BR>                A12 = Q12 | Q08 | Q04 ;<BR>            <BR>            A11 = not(A12 | Q01) ;<BR>            A10 = not(A11 | A12) ;</PRE><PRE>            bitWrite(PORTB,1,A11);// D9     // pravá kaskáda tranzistorů<BR>            bitWrite(PORTB,2,A10);// D10    // levá</PRE><PRE>            bitWrite(PORTB,5,Q14); // D13   // BLIK</PRE><PRE>            if     (Q10 == 0 and Q13 == 0) delayMicroseconds(20); // řízení kmitočtu oscilátoru<BR>            else if(Q10 == 1 and Q13 == 0) delayMicroseconds(14);<BR>            else if(Q10 == 0 and Q13 == 1) delayMicroseconds(14);<BR>            else if(Q10 == 1 and Q13 == 1) delayMicroseconds(10);<BR>         }<BR>    }</PRE><PRE>void setup() {<BR>     wdt_enable(WDTO_8S); //interní watchdog 8 vteřin - hodnoty WDTO_15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S</PRE><PRE>     pinMode(LED, OUTPUT);<BR>     digitalWrite(LED, 1);<BR>     delay(1000);<BR>     digitalWrite(LED, 0);</PRE><PRE>     digitalWrite(10, 0);<BR>     tone(9,1000,100);</PRE><PRE>     wdt_reset(); // watchdog OK<BR>}</PRE><PRE>void loop() {<BR>    hash_4020_1(); <BR>    wdt_reset(); // watchdog OK<BR>}<BR></PRE></BODY></HTML>