Ищу прошивку attiny 2313 термометра

Что-то потеряли? Заходите, будем искать, что ж поделать...
Ответить
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб фев 14, 2015 01:21:10

Сообщение Batters_ghw »

Приветствую форумчане, решил собрать термометр http://radiokot.ru/circuit/digital/home/61/. Но вот незадача, так как термометр будет устанавливаться в машину, а десятые доли градуса мне не нужны, хотел бы попросить вас переписать прошивку. http://www.radiokot.ru/forum/download/file.php?id=33869 Так же хочу поинтересоваться, можно ли подключить 2 датчика ds18b20 и если да то с какой частотой будут чередоваться показания с них, в каком файле исходников и какой строке это можно поменять?
Заранее благодарен! :))
Реклама
Друг Кота
Аватара пользователя
Сообщения: 44134
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Сообщение АлександрЛ »

Batters_ghw писал(а):Приветствую форумчане, решил собрать термометр http://radiokot.ru/circuit/digital/home/61/. Но вот незадача, так как термометр будет устанавливаться в машину, а десятые доли градуса мне не нужны, хотел бы попросить вас переписать прошивку.
Ну, специально для вас прошивку переписывать никто не будет, тем более, что, для того, чтобы не было "десятых", достаточно этот разряд индикатора просто не использовать (не ставить, или не подключать.
По "почти этой" схеме у меня термометр собран
Изображение
- как раз для индикатора с ОА,но четырёхразрядном, с индикацией знака температуры в левом разряде. Резисторы в цепях сегментов лучше всё- таки, поставить- иначе порты МК будут перегружены по току.
IMG_0380.JPG
(93.86 КБ) 391 скачивание
платы- "вид снизу"
IMG_0378.JPG
(136.77 КБ) 354 скачивания
и "сверху"
IMG_0379.JPG
(122.2 КБ) 437 скачиваний
Прошивка
MiniTerm2313_OA.txt
(4.13 КБ) 121 скачивание
только измените txt на hex
фьюзы:
Fuses_MiniTerm2313_OA.png
(45.64 КБ) 428 скачиваний
Это всё считано программой Uniprof
Два термодатчика поддерживает, на сколько я помню (или как мне показалось), переключается индикация секунд через пять, может чуть больше. Правда, второй датчик мне пришлось подбирать- при каком- то сочетании датчиков они не переключались.. :dont_know:
Реклама
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб фев 14, 2015 01:21:10

Сообщение Batters_ghw »

Это всё очень хорошо, но танцы с бубном в виде покупки ещё 2-х индикаторов меня не устраивают, к тому же их не вставить в место заглушки в моё авто. Вот строки которые непосредственно отвечают за вывод информации, тут всё понятно, но так как я не программист, то изменить данные строки не могу ибо понятия не имею что нужно вычеркнуть, а что дописать.

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

void view_term(void) {
	unsigned char celie, drob, tmp;
	unsigned int temp, celie_tmp, drob_tmp;


	temp = (unsigned int) temperature;
        
	if (temperature>=0) {
		digit_out[0]=PROBEL;       // первый символ (сотни) пустой 
	} else {        
		temp = ( ~temp ) + 0x0001; // если число отрицательное перевести его в норм.вид 
		digit_out[0]=MINUS;        // и высветить знак минус (в дальнейшем атрибут отр.темп.)
		 };
	zpt_ON=1; 

	celie_tmp = temp >> 4;              // целая часть числа
	drob_tmp  = temp & 0x000F;          // дробная часть числа с точностью 1/16 градуса

	drob  = (unsigned char) ((drob_tmp * 10) / 16); // преобразование дробной части в формате "1/16 градуса" в десятичный формат с точностью 0,1 градуса 

	celie = (unsigned char) celie_tmp;  // я люблю явное преведение типов

	if (celie >= 100) {tmp=bin2bcd(celie-100); digit_out[0] = 1; } else { tmp=bin2bcd(celie); }   // вычислить целую часть

	if ((celie >= 100) || ((digit_out[0] == MINUS) && (celie >= 10))) { //  если больше 100,0 гр. или если темп. меньше -10 точность 1 гр.
		zpt_ON=0;
		digit_out[1] = tmp >> 4;    // десятки
		digit_out[2] = tmp & 0x0F;  // единицы 
	}

	if ((digit_out[0] == MINUS) && (celie < 10)) { // если темп.меньше 0 и больше -10 точность 0,1 гр.
		digit_out[1] = celie; // единицы
		digit_out[2] = drob;  // дробная часть
	}

	if ((digit_out[0] == PROBEL) && (celie < 100)) { // если темп. меньше 100,0 гр и больше 0 гр точность 0,1 гр.
		if (tmp >> 4) digit_out[0] = tmp >> 4; // десятки - если десятков нет то и не показывать
		digit_out[1] = tmp & 0x0F;             // единицы
		digit_out[2] = drob;                   // дробная часть
	}
}  // -------------------------------------------------------------------------
Друг Кота
Аватара пользователя
Сообщения: 44134
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Сообщение АлександрЛ »

Batters_ghw писал(а):Это всё очень хорошо, но танцы с бубном в виде покупки ещё 2-х индикаторов меня не устраивают, к тому же их не вставить в место заглушки в моё авто.
:shock: Все "танцы с бубнами" будут заключаться в том, что к выводам 2 и 7 микроконтроллера просто НИЧЕГО НЕ ПОДКЛЮЧАЕТСЯ.... :dont_know:
То же самое будет и с исходной схемой-
http://radiokot.ru/circuit/digital/home/61/
к выводам 8 и 9 вы ничего не подключаете....
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб фев 14, 2015 01:21:10

Сообщение Batters_ghw »

Разобрался я, но теперь в другом косяк. Как сделать чтоб было не "-0" ,а просто "0"

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

void view_term(void) {
	unsigned char celie, tmp;
	unsigned int temp, celie_tmp;


	temp = (unsigned int) temperature;
        
	if (temperature>=0) {
		digit_out[0]=PROBEL;       // первый символ (сотни) пустой 
	} else {        
             temp = ( ~temp ) + 0x0001; // если число отрицательное перевести его в норм.вид  
	     digit_out[0]=MINUS;        // и высветить знак минус (в дальнейшем атрибут отр.темп.)   
         };
	zpt_ON=0; 

	celie_tmp = temp >> 4;              // целая часть числа

	celie = (unsigned char) celie_tmp;  // я люблю явное преведение типов

	if (celie >= 100) {tmp=bin2bcd(celie-100); digit_out[0] = 1; } else { tmp=bin2bcd(celie); }   // вычислить целую часть

	if ((celie >= 100) || ((digit_out[0] == MINUS) && (celie >= 10))) { //  если больше 100,0 гр. или если темп. меньше -10 точность 1 гр.
		digit_out[1] = tmp >> 4;    // десятки
		digit_out[2] = tmp & 0x0F;  // единицы 
	}

	if ((digit_out[0] == MINUS) && (celie < 10)) { // если темп.меньше 0 и больше -10 точность 1 гр.
		digit_out[1] = PROBEL; // десятки
		digit_out[2] = celie;  // единицы
	}

	if ((digit_out[0] == PROBEL) && (celie < 100)) { // если темп. меньше 100,0 гр и больше 0 гр точность 1 гр.
		digit_out[1] = PROBEL;             // десятки
		if (tmp >> 4) digit_out[1] = tmp >> 4; // десятки - если десятков нет то и не показывать
		digit_out[2] = tmp & 0x0F;                   // единицы 
Реклама
Ответить

Вернуться в «Ищу...»