[avr-gcc] problem z arytmetyka ...
Masz problem? Zapytaj na forum elektroda.pl
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
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
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
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
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
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
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
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
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
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
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
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
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
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