<!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>