=?ISO-8859-2?Q?Kapry=B6ny_kod_w_winavr_=28attiny2313=29=2E?=
Masz problem? Zapytaj na forum elektroda.pl
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.
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/
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.
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/
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.
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. <<
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.
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. <<