Может здесь поможете... Суть проблемы: Для вычисления температуры с датчика существует формула: T°C = 235 - 400*T1/T2; T1 - длительность 1 - максимум 12 мс; Т2 - длительность 0 - максимум 43 мс; Вообщем, если считать в мс, то двубайтных переменных хватает чтобы вычислить температуру, но точность ни куда. Но бля нормальной точности длительноть необходимо брать в мкс, тогда результат первых вычислений (400*Т1) получается трёх байтный, а в tiny12 нет четырёх байтных переменных. Как их двух двубайтных собрать одну четырех байтную переменныю, или может другой выход есть? Спс.
-= Александр =- писал(а):Можно сначала посчитать Т1/Т2... А можно 0,5875-Т1/Т2
Или 2,35-4*Т1/Т2 - даст ответ в десятичных долях градуса.
12000/43000 = 0,27906976744186046511627906976744 К сожалению не умею работать с запятой... 2,35-4*Т1/Т2 - пробывал, точность уходит также как и с мс. Надо что-то вроде:
Не советовать АВРстудию это на мой взгляд слишком круто ( чесно, от Вас такого не ожидал. Во всех обучалках языкам высокого уровня сразу советуют ставить компилятор ЯВУ и студию). По теме: Про студию можно почитать у Баранова в книге " Применение микроконтроллеров АВР: схемы, алгоритмы, программы". Точно знаю, что она есть в сети, и в ней неплохо описаны алгоритмы установки, запуска, набора и отладки. По поводу алгоритма: аппноут AVR200 на сайте Atmel.com. Процедуры 8ти и 16ти битного деления и умножения, коды прилагаются. Думаю, что 32-битные тоже сделать возможно.
[off] За что я не люблю С, так это за то, что его надо знать. А на асме- есть список команд, и впуть. Хотя главное-идея. А реализация, что на С, что на асме- дело техники. [/off]
TYPE SIZE (bytes) RANGE unsigned char 1 0..256 signed char 1 -128..127 char (*) 1 0..256 unsigned short 1 0..256 (signed) short 1 -128..127 unsigned int 2 0..65535 (signed) int 2 -32768..32767 unsigned long 2 0..65535 (signed) long 2 -32768..32767