=?ISO-8859-2?Q?Kapry=B6ny_kod_w_winavr_=28attiny2313=29=2E?=



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: Filip Ozimek <filip_at_nospam_mielonka.polbox.pl>
Subject: =?ISO-8859-2?Q?Kapry=B6ny_kod_w_winavr_=28attiny2313=29=2E?=
Date: Sat, 05 Mar 2005 15:43:24 +0100


Czesc,

w ramach poznawania AVRow napisalem sobie taki kod jak nizej; wgrany do
ATtiny2313, zewn. kwarc, podlaczony do 7447 i 2 przyciskow. Problem
polega na tym, ze czasami wszystko dobrze dziala, tj. nacisniecie
przyciskow zwieksza/zmniejsza wartosc na wyswietlaczu a czasami jedno
nacisniecie powoduje przeskok o 2 wartosci lub nie powoduje nic (nawet
przytrzymanie przycisku). Co sie dzieje? I czy da sie to jakos rozwiazac?


-----------------------------------------------------------------

#include <avr/io.h>
#include <inttypes.h>
#include <avr/delay.h>
#define F_CPU 4000000UL


/* PORTB (PIN0..PIN1) -- podlaczone do 7447 */
/* PORTD (PIN5) -- przycisk reset zwierajacy */
/* PORTD (PIN4) -- przycisk reset zwierajacy */

int main()
{
uint8_t i;

DDRB = 0xFF;
PORTB = 0xFF;

DDRD = 0x00;
PORTD = 0xFF;

i = 0;

PORTB=14;


while (1)
{

while (bit_is_clear(PIND,5) || bit_is_clear(PIND,4)) ;
_delay_ms(10);

if (bit_is_clear(PIND,5))
{
i++;
if (i > 9)
i=0;
PORTB = i;
}

if (bit_is_clear(PIND,4))
{

if (i == 0)
{
i=9;
} else
{
i--;
}
PORTB = i;
}


while (bit_is_clear(PIND,5) || bit_is_clear(PIND,4));
}
return(0);
}

-----------------------------------------------------------------


--
Filip.

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "Piotrek Sz." <zumek_at_nospam_NOSPAM.gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Kapry=B6ny_kod_w_winavr_(attiny2313).?=
Date: Sat, 5 Mar 2005 16:33:07 +0000 (UTC)


Filip Ozimek <filip_at_nospam_mielonka.polbox.pl> napisał(a):

Czesc,

Witam :)

. Co sie dzieje? I czy da sie to jakos rozwiazac?

Pewnie !
Tylko Twój biedny procek wykonuje to , co mu kazałe¶ ,tylko że Tobie chodzi o
co¶ innego :(
..
/* PORTD (PIN4) -- przycisk reset zwierajacy */

Rozumiem , że przy wci¶nięciu zwierają pin proca do masy (GND) ???

..
while (1)
{

while (bit_is_clear(PIND,5) || bit_is_clear(PIND,4)) ;

Powyższa pętla czeka na zwolnienie obu klawiszy - czy o to Ci chodziło ??
Mniemam że nie ??

_delay_ms(10);

if (bit_is_clear(PIND,5))
{
i++;
if (i > 9)

Tu brakuje nawiasów klamrowych.

i=0;
PORTB = i; //Tu się marnotrawi pamięć programu :(
}

if (bit_is_clear(PIND,4))
{

if (i == 0)
{
i=9;
} else
{
i--;
}
}

PORTB=i;
while (bit_is_clear(PIND,5) || bit_is_clear(PIND,4));

Znów czekamy na zwolnienie klawiszy.

}
return(0);
}

-----------------------------------------------------------------




--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: Filip Ozimek <filip_at_nospam_mielonka.polbox.pl>
Subject: Re: =?ISO-8859-2?Q?Kapry=B6ny_kod_w_winavr_=28attiny2313?=
Date: Sat, 05 Mar 2005 19:56:36 +0100


Piotrek Sz. wrote:
Rozumiem , że przy wci¶nięciu zwierają pin proca do masy (GND) ???

Tak.


Powyższa pętla czeka na zwolnienie obu klawiszy - czy o to Ci chodziło ??
Mniemam że nie ??

Po zwarciu do masy pojawi się stan niski, klawisze będą wci¶nięte. Tak
mi się zdaje.

if (bit_is_clear(PIND,5))
{
i++;
if (i > 9)


Tu brakuje nawiasów klamrowych.

Gdzie? Do if(bit_is_clear...)? Bo chybą są? Czy do if (i > 9)? Tam jest
jedna instrukcja, więc blok jest IMHO zbędny.

PORTB = i; //Tu się marnotrawi pamięć programu :(

Co będzie lepsze? outb()?
PORTB=i;
while (bit_is_clear(PIND,5) || bit_is_clear(PIND,4));


Znów czekamy na zwolnienie klawiszy.

Wła¶nie, tutuaj jest chyba błąd, powinno być zaprzeczenie
!bit_is_clear(); czekam aż klawisz zostanie zwolniony, pojawi się stan
wysoki.

--
Filip.

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "Piotrek Sz." <zumek_at_nospam_NOSPAM.gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Kapry=B6ny_kod_w_winavr_(attiny2313).?=
Date: Sat, 5 Mar 2005 18:36:51 +0000 (UTC)


Może tak ?
..
while (1)
{

while (bit_is_set(PIND,5) && bit_is_set(PIND,4)) ;
_delay_ms(10);

if (bit_is_clear(PIND,5))
{
i++;
if (i > 9)
{
i=0;
}
}
if (bit_is_clear(PIND,4))
{
if (i == 0)
{
i=9;
} else
{
i--;
}
}

PORTB=i;
while (bit_is_clear(PIND,5) || bit_is_clear(PIND,4));
_delay_ms(10); //przy puszczaniu tez drgają ;-)
}
...



--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: Filip Ozimek <filip_at_nospam_mielonka.polbox.pl>
Subject: Re: =?ISO-8859-2?Q?Kapry=B6ny_kod_w_winavr_=28attiny2313?=
Date: Sat, 05 Mar 2005 21:06:46 +0100


Piotrek Sz. wrote:
Może tak ?

Dzięki, sprawdze jak wróce do domu :)

--
Filip.

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: Filip Ozimek <filip_at_nospam_mielonka.polbox.pl>
Subject: Re: =?ISO-8859-2?Q?Kapry=B6ny_kod_w_winavr_=28attiny2313?=
Date: Sat, 05 Mar 2005 22:51:30 +0100


Piotrek Sz. wrote:
Może tak ?

Wpisałem Twój kod, ale działa bardzo podobnie (tj. podbnie nie działa
). Przyciski są ok, bezpo¶rednie zwarcie kabelkiem daje taki sam efekt.
Spróbuję co¶ podobnego w asemblerze napisać, zobaczymy co wtedy.


--
Filip.

>> Internet dziala nieskonczenie razy lepiej po podlaczeniu komputera
do gniazdka sieciowego. <<

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "J.F." <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: =?ISO-8859-2?Q?Kapry=B6ny_kod_w_winavr_=28attiny2313?=
Date: Mon, 7 Mar 2005 00:41:35 +0100


On Sat, 05 Mar 2005 22:51:30 +0100, Filip Ozimek wrote:
Wpisałem Twój kod, ale działa bardzo podobnie (tj. podbnie nie działa
). Przyciski są ok, bezpo¶rednie zwarcie kabelkiem daje taki sam efekt.
Spróbuję co¶ podobnego w asemblerze napisać, zobaczymy co wtedy.

Generalnie to sie naciales na drgania zestykow.
Pamietaj ze w chwili zmiany przycisk generuje kilka szybkich impulsow.

Twoj kod mial jeden "blad" i Piotr go usunal - moze powieksz te delaye
do 50ms .. i najlepiej w obu petlach while wsadz delaya.

A jesli nie pomoze .. to juz pozostaje tylko bardziej ambitne
odklocanie zestykow ..

J.


Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: Filip Ozimek <filip_at_nospam_mielonka.polbox.pl>
Subject: Re: =?ISO-8859-2?Q?Kapry=B6ny_kod_w_winavr_=28attiny2313?=
Date: Mon, 07 Mar 2005 18:13:59 +0100


J.F. wrote:
Generalnie to sie naciales na drgania zestykow.
Pamietaj ze w chwili zmiany przycisk generuje kilka szybkich impulsow.


Twoj kod mial jeden "blad" i Piotr go usunal - moze powieksz te delaye
do 50ms .. i najlepiej w obu petlach while wsadz delaya.

Rozwiązałem to tak, że dałem delaya (~200-300ms) bez while, czyli
dłuższe przytrzymanie przycisku powoduje zwiększanie się warto¶ci
(i to nawet jest dobre rozwizanie).
Zauważyłem, że mocne i stanowcze naci¶nięcie przycisku powoduje
pożądany efekt; sprawdze jak się zachowują małe mikroprzełączniki, może
tam będzie lepiej.

--
Filip.

>> Internet dziala nieskonczenie razy lepiej po podlaczeniu komputera
do gniazdka sieciowego. <<