[avr-gcc] problem z arytmetyka ...



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł K" <kpw_at_nospam_qs.pl>
Subject: [avr-gcc] problem z arytmetyka ...
Date: Thu, 14 Oct 2004 14:35:14 +0200


Witam,
napisalem prosty programik to liczenia czasu twania
okresu przebiegu prostokatnego na wejscie IC1.
Wyglada jak ponizej:

volatile u16 Counter;
volatile u16 Capture;
volatile u08 Ready;
volatile u08 Start;
volatile u32 Wynik;

int main ( void ) {

ICR1 = 0;
TCNT1 = 0;
TIMSK |= (1<<TICIE1) | (1<<TOIE1);
TCCR1B |= (1<<ICNC1);

#if defined (__AVR_ATmega128__)
// Config IC1 port ATMEGA128
DDRD &= ~(1<<DDD4);
PORTD &= ~(1<<PD4);
#endif

Ready = 0;
Start = 1;
sei();

//----- Program
glowny --------------------------------------------------------
while (1) {

if (Ready == 1) {
Wynik = (u32)Counter * 0x0000FFFF + (u32)Capture;
Ready = 0;
}

}

return 0;
}



SIGNAL(SIG_OVERFLOW1){
TCNT1 = 0;
Counter++;
Ready = 0;
}

SIGNAL(SIG_INPUT_CAPTURE1){
if (Start == 1) {
TCNT1 = 0;
ICR1 = 0;
TCCR1B |= (1<<CS10); //Start Timer1

Counter = 0;
Ready = 0;
Start = 0;
} else {
Capture = ICR1;
TCCR1B &= ~(1<<CS10); //Stop Timer1

Ready = 1;
Start = 1;
}

}

Wycialem procedury wyswietlania wyniku na LCD zeby nie zasmiecac zbytnio.
Jednak zauwazylem ze Counter nie jest mnozona przez 0x0000FFFF i przyjmuje
warosc ujemna
jak rowniez Capture tez jest raz ujemna a raz dodatnia. Ludzie co jest
grane???? Gdzie tkwi blad. Na AVRStudio 4.0
wszystko sie symuluje poprawnie (wrrr).


--

--
Best regards
K_at_nospam_pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------




========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Thu, 14 Oct 2004 21:45:12 +0200


On Thu, 14 Oct 2004 14:35:14 +0200, "Paweł K" <kpw_at_nospam_qs.pl> wrote:

Wynik = (u32)Counter * 0x0000FFFF + (u32)Capture;

Akurat AVR-studio nie znam, ale moze mnozyc przez 0x0ffffL ?


--
Jerry

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Thu, 14 Oct 2004 21:51:14 +0200


On Thu, 14 Oct 2004 21:45:12 +0200, jerry1111
<stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl> wrote:

On Thu, 14 Oct 2004 14:35:14 +0200, "Paweł K" <kpw_at_nospam_qs.pl> wrote:

Wynik = (u32)Counter * 0x0000FFFF + (u32)Capture;

Akurat AVR-studio nie znam, ale moze mnozyc przez 0x0ffffL ?

No i po cholere taka operacja? Bo siakos nie rozumiem.
Napisz po ludzku:
wynik=(counter<<16)-1+capture


--
Jerry

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_poczta.onet.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Thu, 14 Oct 2004 22:31:55 +0200


volatile u16 Counter;
volatile u16 Capture;
volatile u08 Ready;
volatile u08 Start;
volatile u32 Wynik;

int main ( void ) {

ICR1 = 0;
TCNT1 = 0;
TIMSK |= (1<<TICIE1) | (1<<TOIE1);
TCCR1B |= (1<<ICNC1);

#if defined (__AVR_ATmega128__)
// Config IC1 port ATMEGA128
DDRD &= ~(1<<DDD4);
PORTD &= ~(1<<PD4);
#endif

Ready = 0;
Start = 1;
sei();

file://----- Program
glowny --------------------------------------------------------
while (1) {

if (Ready == 1) {
Wynik = (u32)Counter * 0x0000FFFF + (u32)Capture;

A dlaczego mnożysz przez 65535 a nie 65536?
Myślę zę bardziej poprawnie to powinno wyglądać tak:
Wynik = (u32)(Counter) *(u32) (0x10000) + (u32)Capture;

A co znaczy, ze wynik raz jest ujemny raz dodatni? Przecież wynik masz typu
unsigned.

A tak wogóle to kiedy wyliczasz ten Wynik to powinieneś zablokować
przerwania.
Capture = ICR1;

Co to jest ICR1 ? rejestr 8 bitowy czy 16 ?

To tak pobieznie...

Pozdrawiam
Mister






========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł K" <kpw_at_nospam_qs.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Thu, 14 Oct 2004 23:01:40 +0200


A co znaczy, ze wynik raz jest ujemny raz dodatni? Przecież wynik masz
typu
unsigned.
Wyswietlam Wynik na LCD i raz pokazuje sie ujemny a raz dodatni
i nie jest to blad w wyswietlaniu :(

A tak wogóle to kiedy wyliczasz ten Wynik to powinieneś zablokować
przerwania.
na wyliczenie mam caly okres przebiegu przed przeklamaniem
oblicznie zabezpiecza mnie if (Ready == 1) ....

Co to jest ICR1 ? rejestr 8 bitowy czy 16 ?
16bit



--

--
Best regards
K_at_nospam_pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 09:08:46 +0200


Wyswietlam Wynik na LCD i raz pokazuje sie ujemny a raz dodatni
i nie jest to blad w wyswietlaniu :(
Jak nie? widocznie procedura obsługi LCD spodziewa sie signed.
Nic nie piszesz czy poprawienie rzutowania dało efekt.

Co to jest ICR1 ? rejestr 8 bitowy czy 16 ?
16bit

Zaraz, czy w Mega 128 można bezpośrednio zapisać rejestr 16 bitowy ?
przecież to procek 8 bitowy.

Mister



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "EM" <edim123_at_nospam_poczta.onet.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 09:04:24 +0200


Wycialem procedury wyswietlania wyniku na LCD zeby nie zasmiecac zbytnio.
Jednak zauwazylem ze Counter nie jest mnozona przez 0x0000FFFF i przyjmuje
warosc ujemna
jak rowniez Capture tez jest raz ujemna a raz dodatnia. Ludzie co jest
grane???? Gdzie tkwi blad. Na AVRStudio 4.0
wszystko sie symuluje poprawnie (wrrr).

Witaj
A skąd wiesz, że wartości są ujemne? Z procedury LCD, która wyświetla
wartości zarówno dodatnie jak i ujemne? Jeżeli w wyniku pojawia się jedynka
na najstarszej pozycji, to liczba może być traktowana jako ujemna. Ogólnie
przyjrzyj się zapisowi heksadecymalnemu i sprawdź, czy wyniki są poprawne.
Pozdr
EM



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł K" <kpw_at_nospam_qs.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 12:27:40 +0200


A skąd wiesz, że wartości są ujemne? Z procedury LCD, która wyświetla
wartości zarówno dodatnie jak i ujemne? Jeżeli w wyniku pojawia się
jedynka
na najstarszej pozycji, to liczba może być traktowana jako ujemna. Ogólnie
przyjrzyj się zapisowi heksadecymalnemu i sprawdź, czy wyniki są poprawne.
W hexie tez sa anomalia ...

--

--
Best regards
K_at_nospam_pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "EM" <edim123_at_nospam_poczta.onet.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 12:47:38 +0200



A skąd wiesz, że wartości są ujemne? Z procedury LCD, która wyświetla
wartości zarówno dodatnie jak i ujemne? Jeżeli w wyniku pojawia się
jedynka
na najstarszej pozycji, to liczba może być traktowana jako ujemna.
Ogólnie
przyjrzyj się zapisowi heksadecymalnemu i sprawdź, czy wyniki są
poprawne.

W hexie tez sa anomalia ...

Jeszcze raz zapytam
W AVRstudio wszystko jest OK, tzn. wyniki zgodne z oczekiwanymi?
Jeśli tak:
Gdzie wyskakują wartości ujemne? Na LCD?
Jakie anomalia w hexie?
--
Pozdr
EM




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł K" <kpw_at_nospam_qs.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 12:54:08 +0200


W AVRstudio wszystko jest OK, tzn. wyniki zgodne z oczekiwanymi?
Jeśli tak:
Gdzie wyskakują wartości ujemne? Na LCD?
Na LCD.
Jakie anomalia w hexie?
np Capture wyswietla 4fc1, Counter c1, a Wynik 4f00.
Sprawdzalem wszystkie warianty zaproponowane przez kolegow w
poprzednich watkach.

--

--
Best regards
K_at_nospam_pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "EM" <edim123_at_nospam_poczta.onet.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 14:13:40 +0200


Wynik = (u32)Counter * 0x0000FFFF + (u32)Capture;

np Capture wyswietla 4fc1, Counter c1, a Wynik 4f00.

Podstawmy i obliczmy:
Wynik powinien być C14F00
-> wniosek - liczba obcięta do typu u16 (a nie np. brak monożenia przez
FFFF)

Procedura LCD nie obsługuje liczb u32 poprawnie?
--
Pozdr
EM




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł K" <kpw_at_nospam_qs.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 15:35:35 +0200


Procedura LCD nie obsługuje liczb u32 poprawnie?
do wyswietlania uzywam stdio.h i printf ();

--

--
Best regards
K_at_nospam_pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 15:51:08 +0200


do wyświetlania uzywam stdio.h i printf ();


A dopisujesz l?

np. printf("%lx", Wynik);


Mister




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł K" <kpw_at_nospam_qs.pl>
Subject: Re: [avr-gcc] problem z arytmetyka ...
Date: Fri, 15 Oct 2004 16:46:21 +0200


np. printf("%lx", Wynik);
bylo, ale pogrzebalem w makefile i all dziala !! big tx.

--

--
Best regards
K_at_nospam_pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai