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

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

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

Сообщение Batters_ghw »

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

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

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

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

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

Сообщение 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;                   // дробная часть
	}
}  // -------------------------------------------------------------------------
Аватара пользователя
АлександрЛ
Друг Кота
Сообщения: 43912
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

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

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

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

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

Сообщение 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;                   // единицы 
Реклама
Ответить

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