Вопросы по синтаксису СИ

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

Не получается нормально код запостить...целиком в этом файле
Вложения
КОД.doc
(26.5 КБ) 328 скачиваний
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Ну вы ваааащееее ... в НОУТПЭДЕ ваш исходник файл .txt 1.2 Кб всего !

В CVAVR результат АЦП можно читать из ADCW - смотрите задачу 11.

unsigned long ADCL=0; // сделайте ее побольше

ADCL = (long)ADCW;

// можно увеличить число чтоб не терять знаки при округлении
ADCL = (ADCL * 5000)/1024;

А при выводе на LCD это учесть размещением десятичной точки. Можно и на 500 умножить.
Вложения
код.txt
(1.16 КБ) 320 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

tych писал(а):Ну вы ваааащееее ... в НОУТПЭДЕ ваш исходник файл .txt 1.2 Кб всего !


Остынте), я это знаю! В блокноте тект отосланный на форум собирался в одну строчку, как это исправить я не знаю-пришлось вставить в ворд.

tych писал(а):В CVAVR результат АЦП можно читать из ADCW - смотрите задачу 11.

unsigned long ADCL=0; // сделайте ее побольше

ADCL = (long)ADCW;

// можно увеличить число чтоб не терять знаки при округлении
ADCL = (ADCL * 5000)/1024;

А при выводе на LCD это учесть размещением десятичной точки. Можно и на 500 умножить.


Спасиба за советы. Про 16 битный регистр, который хранит результат АЦП в СVAVR я знаю из вашего курса, просто хотел особо не завязываться под особенности компилятора.

Всё-таки хочеться выяснить, почему при записи результата вычесления (дробного числа) во float, от него отсекается дробная часть.
Число преобразования спокойно записывается в переменную adcl, это можно котролировать-при подсчёте на калькуляторе получается дробное число.
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

KIP писал(а):... функция расчёта возвращает только целое значение напряжения, а дробную часть отсекает. Подскажите, где ошибка?
Ошибка вот здесь:

Код: Выделить всё

float raschet_naprygeniay(unsigned int adcl){  
 return (adcl*5)/1024;
}

Выражение (adcl*5)/1024 - включает только int члены, а значит, имеет тип int. Приведение выражения int к float не меняет его значения, следовательно, дробная часть остается равной нулю.
Следует написать так:

Код: Выделить всё

float raschet_naprygeniay(unsigned int adcl){  
 return (adcl*5)/1024.;
}
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

Спасиба за посказку, тепеперь всё работает!)
Последний раз редактировалось KIP Вс сен 21, 2008 20:39:55, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Yellow Tiger писал(а):Ошибка вот здесь
можно сказать, классика Си :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

ARV писал(а):можно сказать, классика Си :)
Пожалуй, можно взять шире - незначительные, по мнению некоторых, детали "вдруг" значат неожиданно много. :lol:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

ну да, в то время как другие языки приводят тип операндов к типу приемника результата, Си делает иначе :) если привыкнуть - уже не ошибешься...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

ARV писал(а):ну да, в то время как другие языки приводят тип операндов к типу приемника результата, Си делает иначе
Ну, что вы - C делает точно так же, просто, согласно правилам языка, любая часть сложного выражения является (промежуточным) результатом (и может быть использована именно как результат), то есть, верхняя часть дерева разбора - является приемником этого результата и поэтому сия часть обязана подчиняться общим правилам приведения типов. Если это понимать - не ошибешься.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

ну так я и говорю... если привыкнуть к Си - нет проблем...

а вот в паскале инт=инт/инт даст целый результат, а флоат=инт/инт - дробный :)
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Ну, это "нет проблем" приходит не сразу. :) Да и одного знания мало, еще и стиль нужно наработать. Скажем, есть такая практика в сравнениях на равенство с константами ставить константу на первое место, чтобы отсечь ошибки с непропечатанными '==', так вот - никогда не мог заставить себя писать именно так - как-то это некузяво... однако, очепятки такого рода все же бывали, и всякий раз найти их было непросто, так как в таком простом месте попросту не ожидаешь никакой ошибки. Пересилил себя ооочень не сразу, привычка - вторая натура. :)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»