Отговори на тема  [ 28 мнения ]  Отиди на страница Предишна  1, 2
Въпрос относно ADC на ПИК 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Въпрос относно ADC на ПИК
Тази функция ми харесва понеже следя няколко процеса едновременно. Пускам си преобразуването и през това време контролера си върши друга работа. Когато е готово, си взимам резултата :)
Изникна друг проблем обаче. Когато взема 2 резултата от АЦП-то, те са 2 цели числа(колкото битчета е преброил там). Искам да разделя едното число на другото, за да получа някакъв коефициент. За него използвам float променлива. И като умножа по още едно float число и резултата все е 0. Защо? Някакво препълване ли става???
Ето примерен код:
float sum,coef;
int adc1,adc2;
coef=adc1/adc2;
sum= 100*coef;

И при това положение стойността на sum е все 0.
Защо се получава така и какво мога да направя по въпроса???

_________________
www.elkran.com


Нед Яну 29, 2012 3:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Въпрос относно ADC на ПИК
Пробвай с sum= 100.0*coef;
а coef колко е, проверявал ли си го? adc2 може ли да стане 0?
Можеш да пробваш и
float sum,coef;
int adc1,adc2;
sum= (100*adc1)/adc2;

_________________
Warriors of the Night, ASSEMBLER!!!


Нед Яну 29, 2012 4:19 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Въпрос относно ADC на ПИК
Не. Adc2 не става 0. Обаче когато adc1<adc2 sum става 0. Иначе всичко е наред. Защо се получава тоя бъг???

_________________
www.elkran.com


Нед Яну 29, 2012 5:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение Re: Въпрос относно ADC на ПИК
stoyanoff написа:
Не. Adc2 не става 0. Обаче когато adc1<adc2 sum става 0. Иначе всичко е наред. Защо се получава тоя бъг???



int a = 1000;
int b = 1001;

c = a / b; // това дава c = 0. Справка: учебничето по ANSI C


Нед Яну 29, 2012 6:29 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение Re: Въпрос относно ADC на ПИК
ike написа:
Пробвай с sum= 100.0*coef;
а coef колко е, проверявал ли си го? adc2 може ли да стане 0?
Можеш да пробваш и
float sum,coef;
int adc1,adc2;
sum= (100*adc1)/adc2;


Това пък още повече ще дава 0 :)

мадежа ще си оправи "бъга" най-лесно така:

float sum,coef;
int adc1,adc2;
sum= (100.0*adc1)/adc2;[/quote]


Нед Яну 29, 2012 6:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Въпрос относно ADC на ПИК
Ясно! Значи номера е просто да не допускам числителя да стане по-голям от знаменателя. Първоначалната ми идея беше да си намирам частно(коефициент) и с него да смятам по-нататък и така да спестя няколко операции. Явно ще се прави по тоя начин.

_________________
www.elkran.com


Нед Яну 29, 2012 7:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Въпрос относно ADC на ПИК
Май не ти стана много ясно... Очевидно компилатора го тълкува това дето го пишеш така :

int c = int a / int b (което е равно на 0) и след това float d = int c

пробвай първо да прехвърлиш двете Int променливи във float и тогава давай с деленето.

Батето за това ти натвъди да погледнеш книжките.

едит :...


Последна промяна Cekins на Нед Яну 29, 2012 9:59 pm, променена общо 2 пъти



Нед Яну 29, 2012 7:21 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение Re: Въпрос относно ADC на ПИК
Cekins написа:
...едит : ps66, това да не би да е някакъв вид фортран че да иска "." за да се усети че става въпрос за флоат :)


вземи да прочетеш някоя книжка, преди да коментираш !


Нед Яну 29, 2012 9:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Въпрос относно ADC на ПИК
Его още един дето не разбира от шеги.


Нед Яну 29, 2012 9:56 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Въпрос относно ADC на ПИК
Абе пак ти гледах кода ползваш read_adc(), това изобщо не ти позволява само да четеш ADC та да изпълняваш други процеси, това вътре си има един while() който чака ADC да свърши меренето. Има два начина за да не губиш време, или постоянно в тялото проверяваш ADC done бита, или ползваш прекъсване.
А относно резултата, горе вече колегите са писали.


Нед Яну 29, 2012 10:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Въпрос относно ADC на ПИК
Специално за ТОНИ:
while(time<160){
time=read_timer0();
..........
процеси
.........
if(adc_done()==1 && adc_bool==1)
{
adc=read_adc();
adc_bool=0;
}
}

Ето за това ми трябва. Периодично да си проверявам дали е готово. И да си върши контролера и други неща понеже имам още 1 процес, който зависи от времето. Не искам да имам 2 прекъсвания.

_________________
www.elkran.com


Пон Яну 30, 2012 11:20 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Въпрос относно ADC на ПИК
Що? Много ще го затормозят прекъсванията? И ти е критично време от порядък на 1-2 микросекунди ? Така пък написано не се знае кога точно ще се прочете ацп-то. Щото тия процеси ако включват някакви сметки (което обикновенно е така) никой не може да ти каже колко време отнемат - примерно едно 32бит/24 бит делене може да хване от 200 до 1500 цикъла (примерно). Да не говорим за флоата.


Пон Яну 30, 2012 12:50 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение Re: Въпрос относно ADC на ПИК
Да не ползваш прекъсвания е велико! Кефи ме !
Същото е като да караш кола само на първа предавка. Така имаш много яка возия ! Ба си, как другите не са се сетили досега ...


Пон Яну 30, 2012 1:52 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 28 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни