<html>
<head>
<meta content="text/html; charset=iso-8859-13"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Jei nuspręstum programuoti C, čia mano kodinta Atmega128, kiek
pamenu, veikė patikimai netgi prie pakankamai didelių enkoderio
sūkių:<br>
<br>
<br>
static volatile uint8_t A, B, Aold, Bold;<br>
static volatile int32_t pos32;<br>
<br>
ISR(INT6_vect)<br>
{<br>
EIFR |= _BV(INTF6);<br>
A = (PINE >> PE7) & 1;<br>
if (A != Aold)<br>
{<br>
if (A ^ ((PINE >> PE6) & 1)) pos32--; else pos32++;<br>
Aold = A;<br>
}<br>
}<br>
<br>
ISR(INT7_vect)<br>
{<br>
EIFR |= _BV(INTF7);<br>
B = (PINE >> PE6) & 1;<br>
if (B != Bold)<br>
{<br>
if (B ^ ((PINE >> PE7) & 1)) pos32++; else pos32--;<br>
Bold = B;<br>
}<br>
}<br>
<br>
int main(void)<br>
{<br>
MCUCR = _BV(JTD);// This bit must be set twice within four
cycles to change its value.<br>
MCUCR = _BV(JTD);// See p.258 of ATmega128 datasheet<br>
ACSR = _BV(ACD); // Disable Analog Comparator to reduce power
consumption<br>
<br>
// Initialize IO pins<br>
PORTB = _BV(PB7) | _BV(PB5) | _BV(PB0) | _BV(PB1) ;<br>
DDRB = _BV(PB4) | _BV(PB6) | _BV(PB7);<br>
DDRD = _BV(PD0) | _BV(PD1) | _BV(PD3) | _BV(PD4) | _BV(PD5) |
_BV(PD7);<br>
DDRE = _BV(PE1) | _BV(PE2) | _BV(PE3) | _BV(PE4);<br>
<br>
PORTD = _BV(PD0) | _BV(PD1);<br>
PORTE = _BV(PE6) | _BV(PE7);<br>
<br>
// interrupts<br>
EICRB = _BV(ISC60) | _BV(ISC70);<br>
EIMSK = _BV(INT6) | _BV(INT7);<br>
<br>
_delay_ms(800);<br>
sei();<br>
SpecInicializacija(...);<br>
wdt_enable(WDTO_2S);<br>
<br>
int32_t tmp32;<br>
for (;;)<br>
{<br>
_delay_ms(200);<br>
cli();<br>
tmp32 = pos32;<br>
sei();<br>
DideleFunkcija(...);<br>
wdt_reset();<br>
if (SW_IS_PRESSED) // Resetinimas<br>
{<br>
cli();<br>
pos32 = 0;<br>
sei();<br>
}<br>
}<br>
}<br>
<br>
<br>
<br>
<div class="moz-cite-prefix">On 2015.06.05 14:36, ig wrote:<br>
</div>
<blockquote cite="mid:mks1kh$n3o$1@trimpas.omnitel.net" type="cite">Paprasta
programele seka variklio encoderio outputa, skaiciuoja
"zingsniukus" ir kai padaromas pilnas apsisukimas (624 zingsniai),
keiciama sukimosi kryptis. Ir taip "mojuoja" pirmyn atgal.
<br>
<br>
Taciau karts nuo karto (mazdaug vienas is desimt ciklu),
atsitiktinai
<br>
variklis apsisuka maziau nei pilna apsisukima ir pradeda keisti
krypti.
<br>
pabandziau su serial.println isvedineti "c" reiksme kai keiciasi
kryptis (t.y. if viduje - uzkomentuota eilute).
<br>
</blockquote>
<br>
</body>
</html>