Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Proteus, KiCAD и другие ECAD Разработчик так или иначе сталкивается с системами автоматизированного проектирования. Данный раздел - по САПР.

 
Опции темы
Непрочитано 20.02.2007, 22:39  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию Интересная задача знатокам Си

Есть семисегментный трехразрядный индикатор. Нужно смотреть на него (програмно), и сохранять его значение в переменную типа float, так как все значения с запятой.
Я уже начал писать, вроде как все просто, но нехочет нормально работать если стоит запятая (point) после второго разряда. Вот код:


str18[0]=1;
str18[1]=7;
str18[2]=3;
point=2;

float SUM=0;
byte LD1, LD2, LD3;
LD1=str18[0];
LD2=str18[1];
LD3=str18[2];

SUM=((LD1*100)+(LD2*10)+LD3);

switch (point){
case 0 : break;
case 1 : SUM=SUM/100; break;
case 2 : SUM=SUM/10; break;
}

data=SUM;
return data;


При point=0 получаем 173;
При point=1 получаем 1,73;
При point=2 должны получить 17,3 а получаем 7,29.

Получаеться, что на 100 делим и все ок, а на 10 резульиаи не верный.
Заранее благодарен за любую помощь.
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 21.02.2007, 00:17  
EagleB3
Вид на жительство
 
Регистрация: 03.05.2006
Сообщений: 312
Сказал спасибо: 30
Сказали Спасибо 144 раз(а) в 52 сообщении(ях)
EagleB3 на пути к лучшему
По умолчанию

А что будет получено, если задать point=4; ?
EagleB3 вне форума  
Непрочитано 21.02.2007, 00:59  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Сообщение от EagleB3
А что будет получено, если задать point=4; ?
То же, что и при point=0;
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 21.02.2007, 03:11  
ALEX__A
Почётный гражданин KAZUS.RU
 
Регистрация: 30.10.2006
Сообщений: 1,755
Сказал спасибо: 0
Сказали Спасибо 80 раз(а) в 56 сообщении(ях)
ALEX__A на пути к лучшему
По умолчанию

Вероятно ошибка не в данной части кода. Приведите полный код.
Какой тип имеет переменная data?

Попробуйте изменить case 1 : SUM=SUM/100; break;
на case 1 : SUM=SUM/10; break; и провести преобразование при point=1;

Ошибка очень похожа на некорректное описание (преобразование) типов переменных.

С уважением, Алексей.
ALEX__A вне форума  
Непрочитано 21.02.2007, 11:14  
BigYu
Прохожий
 
Регистрация: 22.11.2006
Сообщений: 1
Сказал спасибо: 8
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
BigYu на пути к лучшему
По умолчанию

попробуйте такой вариант:

//----------------------------
switch (point){
case 0 : break;
case 1 : SUM=SUM/100.; break;
case 2 : SUM=SUM/10.; break;
}
//----------------------------
BigYu вне форума  
Непрочитано 21.02.2007, 12:39  
NiTr0
Прописка
 
Регистрация: 09.08.2006
Сообщений: 252
Сказал спасибо: 2
Сказали Спасибо 125 раз(а) в 90 сообщении(ях)
NiTr0 на пути к лучшему
По умолчанию

А что мешает сделать вывод дебаг-инфы куда-либо? и посмотреть, на каком этапе ошибка
NiTr0 вне форума  
Непрочитано 21.02.2007, 13:30  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

К сожалению предложения от ALEX__A и BigYu не помогли. Вот полный код функции:


float float_control_range(float data, int8 p)
{

byte n=0, rd=0, bufpoint, pointset=0;
int8 b=0;

bufpoint=point;

if(p›0)b=1;
else if(p‹0)b=-1;

switch (ChLed){
case 1 : rd=str18[2]; n=2; break;
case 2 : rd=str18[1]; n=1; break;
case 3 : rd=str18[0]; n=0; break;
case 4 : pointset=1; break;
}

if(pointset==0){
if (b›0){
if(rd‹9){
rd++;
}
else rd=0;
}

else if (b‹0){
if (rd›0){
rd--;
}
else rd=9;
}

str18[n]=rd;
}
else if(pointset==1){

}
/*******************/
str18[0]=1;
str18[1]=7;
str18[2]=3;
point=1;
/*******************/
float SUM=0;
byte LD1, LD2, LD3;
LD1=str18[0];
LD2=str18[1];
LD3=str18[2];

SUM=((LD1*100)+(LD2*10)+LD3);

switch (point){
case 0 : break;
case 1 : SUM=SUM/10; break;
case 2 : SUM=SUM/100; break;
}

data=SUM;
return data;
}


Где:
ChLed - указывает что вводим, т.е мигающий курсор.
1-3 - вводим разряды, 4 - запятую

case 4 : pointset=1; break; - будет вписана процедура ввода запятой, аналогично вводу цыфр.

выделенная часть /*...*/ написана только для отладки
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 21.02.2007, 15:56  
littande
Прохожий
 
Регистрация: 09.01.2007
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
littande на пути к лучшему
По умолчанию

Если у тебя при Point =2 получается "другой результат", значит в масив str18[x] приходят "другие" значение.
проверь определение массива и значение переменной Point при входе в switch
littande вне форума  
Непрочитано 21.02.2007, 16:03  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Сообщение от littande
Если у тебя при Point =2 получается "другой результат", значит в масив str18[x] приходят "другие" значение.
Ну как же, если я временно вставил:

/*******************/
str18[0]=1;
str18[1]=7;
str18[2]=3;
point=1;
/*******************/

массив типа byte

То что я написал теоретически должно работать, просто наверное обговариваем очередные "грабли".
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 21.02.2007, 17:58  
MJuras
Прохожий
 
Регистрация: 05.12.2006
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
MJuras на пути к лучшему
По умолчанию

Привет всем!

Вообще бы я сказал, что
Код:
switch (point){ 
case 0 : break; 
case 1 : SUM=SUM/100; break; 
case 2 : SUM=SUM/10; break; 
}
некорректно, по моему.....
Дело в том, что при проверке
Код:
case 1 : SUM=SUM/10; break;
переменная SUM уже содержит значение в 100 раз меньшее, т.к. при реальном выполнении кода в каждом кейсе выполняется расчет SUM.
MJuras вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интересная прога для мониторинга USB GNN Микроконтроллеры, АЦП, память и т.д 0 09.07.2009 11:56
Весьма интересная задача для AVR (паралельное вычисление) ua_gruzin Микроконтроллеры, АЦП, память и т.д 10 24.10.2008 17:07
Интересная схемка dimmich Электроника - это просто 8 12.05.2008 08:40
Интересная информация... dosikus Микроконтроллеры, АЦП, память и т.д 3 11.08.2007 23:07


Часовой пояс GMT +4, время: 20:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot