Подсветка чайника с меняющимся цветом в зависимости от t

Обсуждаем контроллеры компании Atmel.
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

Андрей Огромное Вам СПАСИБО!!!
Проверил на макете все работает прекрасно!!
Последний раз редактировалось Nizam Пн авг 24, 2015 13:31:02, всего редактировалось 2 раза.
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Jack_A »

Я, конечно, не модератор, но думаю, не стоит злоупотреблять аршинными шрифтами.
Спойлер"Холоднокровней, Маня, вы же не на работе" (С) И.Бабель
Реклама
Аватара пользователя
Karl2233
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Сб июн 20, 2015 12:46:58

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Karl2233 »

прикольно.
вопрос к Андрей СШ(спасибо за труд созданию прошивки) - хочу датчик примастырить к корпусу чайника. я это к тому, что внутрь пихать как-то не очень хочется, а снаружи аккуратно приделать датчик можно к любому чайнику.
понимаю что вопрос в калибровке, посему вопрос - можно ли градацию сделать так, что бы она учитывала тот факт, что на корпусе температура ниже чем, например, 100 С при кипении? вижу это так же, как bad2cat
По поводу подсветки - на мой взгляд ступенчатая практичнее для пользователя (только цвета должны быть удобны не для программиста, а для пользователя) - почему? Потому что опознать человеку неизвестный цвет обычно трудно. Тем более мгновенно оценить по нему степень нагрева.
Должно быть на первое время 3 ступени - синий, жёлтый (от 45 градусов), красный (кипяток).

вполне здравое рассуждение :solder: зачем плодить сущности сверх меры?
синий - до 40С, желтый(зелёный) - от 40 до 70, красный - от 70, звук - от 90.
таким образом, можно RGB применить и по цветам вроде всё легко узнаваемо и с таким разбросом температуры можно датчик ставить на корпус.
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Karl2233 писал(а):синий - до 40С, желтый(зелёный) - от 40 до 70, красный - от 70, звук - от 90.
таким образом, можно RGB применить и по цветам вроде всё легко узнаваемо и с таким разбросом температуры можно датчик ставить на корпус.
Я ещё после написания поста подумал, что моя градация укладывается в степени ожогов :)) Но не стал писать.
до 30-холодный. (синий, выше 30 - бирюзовый, тёпленькая, пить можно)
выше 45 - ожог первой степени. (жёлтый, предупреждение)
выше 70 - ожог второй степени. (фиолетовый или оранжевый, кому что)
выше 90 - ожог третьей степени. :)) (красный, опасно!)

Зелёный я исключаю умышленно, как цвет используемый для обозначения отравленных жидкостей (в играх часто и иконках на реактивах).
Хотя кому-то он кажется цветом комфорта.
Я тоже, в некотором роде, радиоинженер...
Реклама
Эиком - электронные компоненты и радиодетали
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

Про расположение датчика снаружи думал и пришёл к выводу, что нужна специальная процедура калибровки, Сделать можно но настройка муторной станет. Именно поэтому и предпочитаю просто градиент от синего к красному. Такая индикация в отличие от ступенчатой не требует точной калибровки.

Кроме того вообще в этой схеме есть два косяка:
1. Интерфейс "одна проволочка" требует точного соблюдения таймингов, а встроенный RC-генератор может поплыть при нагреве. Вывод: микроконтроллер надо располагать где похолодней (в ручке).
2. Говорят DS18B20 быстро дохнет при высоких температурах.

Исходный код тут. Над плавным переходом подумаю чуть позже, надо немного свои схемки доделать.
Спойлерmain.adb

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

with 
	AVR, 
	AVR.MCU, 
	AVR.Wait,
	Interfaces,
	One_Wire; 

use AVR, AVR.MCU,Interfaces;

procedure Main is 

	RED_pin: constant := 0;
	GREEN_pin: constant := 2;
	BLUE_pin: constant := 1;
	BEEP_pin: constant := 3;

	RED: boolean renames PORTB_Bits(RED_pin);
	GREEN: boolean renames PORTB_Bits(GREEN_pin);
	BLUE: boolean renames PORTB_Bits(BLUE_pin);
	BEEP: boolean renames PORTB_Bits(BEEP_pin);
		
	low_byte, high_byte, t: Unsigned_8 := 0; 
		
	procedure Wait_ms is 
	new AVR.Wait.Generic_Busy_Wait_Milliseconds(Crystal_hertz => 1_200_000);
	
begin

	RED := low;
	GREEN := low;
	BLUE := low;
	BEEP := low;
	
	DDRB_Bits := (0..3 => DD_Output, others => DD_Input);
	
	loop 
	
		if One_wire.Reset then 
			One_Wire.Send_command(16#CC#);
			One_Wire.Send_command(16#44#);
		end if;
		
		Wait_ms(1000);
		
		if One_wire.Reset then
			One_Wire.Send_command(16#CC#);
			One_Wire.Send_command(16#BE#); 
			low_byte := One_wire.Get; 
			high_byte := One_wire.Get;
		end if;
		
		high_byte := shift_left(high_byte,4) and 2#0111_0000#; 		
		low_byte  := shift_right(low_byte,4) and 2#0000_1111#;
		t := high_byte or low_byte;
		
				
		case t is
			when 1..30 =>  red := false;	green := false;		blue := true;	beep := false; 
			when 31..50 => red := false;	green := true;		blue := false; 	beep := false;
			when 51..70 => red := true;	green := true;		blue := false; 	beep := false;
			when 71..95 => red := true;	green := false;		blue := false;  beep := false;
			when 96..110 => PINB_Bits(RED_pin) := true; green := false; blue := false; PINB_Bits(BEEP_pin) := true;
			when others => red := true; green := true; blue := true; beep := true;
		end case;
		
	
	end loop; 
	
end Main;
One_Wire-AVR_Wiring.ads

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

---------------------------------------------------------------------------
-- The AVR-Ada Library is free software;  you can redistribute it and/or --
-- modify it under terms of the  GNU General Public License as published --
-- by  the  Free Software  Foundation;  either  version 2, or  (at  your --
-- option) any later version.  The AVR-Ada Library is distributed in the --
-- hope that it will be useful, but  WITHOUT ANY WARRANTY;  without even --
-- the  implied warranty of MERCHANTABILITY or FITNESS FOR A  PARTICULAR --
-- PURPOSE. See the GNU General Public License for more details.         --
--                                                                       --
-- As a special exception, if other files instantiate generics from this --
-- unit,  or  you  link  this  unit  with  other  files  to  produce  an --
-- executable   this  unit  does  not  by  itself  cause  the  resulting --
-- executable to  be  covered by the  GNU General  Public License.  This --
-- exception does  not  however  invalidate  any  other reasons why  the --
-- executable file might be covered by the GNU Public License.           --
---------------------------------------------------------------------------


with AVR;                         use AVR;
with AVR.MCU;

package One_Wire.AVR_Wiring is
   pragma Preelaborate;

   OW_Line : constant AVR.Bit_Number := 4;
 
   OW_DD  : Boolean renames MCU.DDRB_Bits (OW_Line);
   OW_Out : Boolean renames MCU.PortB_Bits (OW_Line);
   OW_In  : Boolean renames MCU.PinB_Bits (OW_Line);

end One_Wire.AVR_Wiring;
Makefile

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

###########################################################################
## The AVR-Ada Library is free software;  you can redistribute it and/or ##
## modify it under terms of the  GNU General Public License as published ##
## by  the  Free Software  Foundation;  either  version 2, or  (at  your ##
## option) any later version.  The AVR#Ada Library is distributed in the ##
## hope that it will be useful, but  WITHOUT ANY WARRANTY;  without even ##
## the  implied warranty of MERCHANTABILITY or FITNESS FOR A  PARTICULAR ##
## PURPOSE. See the GNU General Public License for more details.         ##
###########################################################################

# This makefile is adapted from the sample Makefile of WinAVR by Eric
# B. Wedington, Jцrg Wunsch and others.  As they released it to the
# Public Domain, I could pretend that I wrote it myself.  Honestly, I
# removed many (probably useful) parts to better fit the GNAT project makes.
#

# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make file.prog = Upload the hex file to the device, using avrdude.
#                Please customize the avrdude settings below first!
#
# make filename.s = Just compile filename.adb into the assembler code only.
#
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------

-include $(Makefile_pre)

# MCU name
MCU := attiny13

# GNAT project file
GPR := build.gpr

# put the names of the target files here (without extension)
ADA_TARGETS := main


#---------------- GNATMAKE Options ----------------
MFLAGS = -XMCU=$(MCU) -p -P$(GPR)
# -p : Create missing obj, lib and exec dirs

#---------------- Programming Options (avrdude) ----------------
# Output format. (can be srec, ihex, binary)
FORMAT = ihex

#---------------- Programming Options (avrdude) ----------------

# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = ftbb

# com1 = serial port.
# programmer connected to serial device, add -b 57600 for Arduinos
AVRDUDE_PORT = ft0 -B 19200

AVRDUDE_WRITE_FLASH = -U flash:w:
AVRDUDE_WRITE_EEPROM = -U eeprom:w:

AVRDUDE_READ_LFUSE = -U lfuse:r:lfuse.hex:i
AVRDUDE_READ_HFUSE = -U hfuse:r:hfuse.hex:i
AVRDUDE_READ_EFUSE = -U efuse:r:efuse.hex:i

AVRDUDE_WRITE_LFUSE = -U lfuse:w:lfuse.hex:i
AVRDUDE_WRITE_HFUSE = -U hfuse:w:hfuse.hex:i
AVRDUDE_WRITE_EFUSE = -U efuse:w:efuse.hex:i


# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE_COUNTER = -y

# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_NO_VERIFY = -V

# Increase verbosity level.  Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v

AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)

#======================

# Define programs and commands.
SHELL    := sh
CC       := avr-gcc
OBJCOPY  := avr-objcopy
OBJDUMP  := avr-objdump
SIZE     := avr-size
NM       := avr-nm
AVRDUDE  := C:\program files\ftbb\avrdude
REMOVE   := rm -f
COPY     := cp
RENAME   := mv
WINSHELL := cmd
GNATMAKE := avr-gnatmake

RESET_FTBB := C:\Ada_Projects\release_reset_on_ftbb\release_reset_ftbb.exe

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)


# Default target.
all: build

ADA_TARGETS_ELF = $(addsuffix .elf, $(ADA_TARGETS))
ADA_TARGETS_HEX = $(addsuffix .hex, $(ADA_TARGETS))
ADA_TARGETS_EEP = $(addsuffix .eep, $(ADA_TARGETS))
ADA_TARGETS_LSS = $(addsuffix .lss, $(ADA_TARGETS))
ADA_TARGETS_SYM = $(addsuffix .sym, $(ADA_TARGETS))
ADA_TARGETS_SIZE = $(addsuffix .size, $(ADA_TARGETS))

# Create the necessary sub-directories
SUBDIRS := obj lcdobj lcdlib


build: $(ADA_TARGETS_ELF) $(ADA_TARGETS_HEX) $(ADA_TARGETS_EEP) \
   $(ADA_TARGETS_LSS) $(ADA_TARGETS_SYM) $(ADA_TARGETS_SIZE)

%.size: %.elf FORCE
	$(SIZE) --format=avr --mcu=$(MCU) $<

# Program the device.
%.prog: %.hex %.eep
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)$*.hex
# $(AVRDUDE_WRITE_EEPROM)

# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
%.lss: %.elf
	$(OBJDUMP) -h -S $< > $@

# Create a symbol table from ELF output file.
%.sym: %.elf
	$(NM) -n $< > $@

# --- build and link using gnatmake, force rebuilding by gnatmake to
#     make sure dependencies are resolved
%.elf: $(GPR) $(SUBDIRS) FORCE
	$(GNATMAKE) $(MFLAGS) -XAVRADA_MAIN=$*

# Compile: create assembler files from Ada source files.
%.s : %.adb
	$(GNATMAKE) -f -u $(MFLAGS) $< -cargs -S

%.s : %.ads
	$(GNATMAKE) -f -u $(MFLAGS) $< -cargs -S

# Assemble: create object files from assembler source files.
%.o : %.S
	@echo
	@echo $(MSG_ASSEMBLING) $<
	$(CC) -c $(ALL_ASFLAGS) $< -o $@

# create the subdirectories
$(SUBDIRS):
	$(REMOVE) -r $@
	mkdir $@

# Target: clean project.
clean: clean_gnat clean_list

clean_gnat:
	avr-gnatclean -XMCU=$(MCU) -P$(GPR)

clean_gnat_recursive:
	avr-gnatclean -r -XMCU=$(MCU) -P$(GPR)

clean_list :
	$(REMOVE) *.hex
	$(REMOVE) *.eep
	$(REMOVE) *.elf
	$(REMOVE) *.map
	$(REMOVE) *.sym
	$(REMOVE) *.lss
	$(REMOVE) *.ali
	$(REMOVE) b~*.ad?
	$(REMOVE) -rf $(SUBDIRS)
	
program: 
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)main.hex
	$(RESET_FTBB) FT232R\ USB\ UART
	
read_fuses:
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_READ_LFUSE)
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_READ_HFUSE)
#	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_READ_EFUSE)
	
write_fuses:	
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_HFUSE)
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_LFUSE)
#	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_EFUSE)

run: all program

FORCE:

# Listing of phony targets.
.PHONY : all finish \
   build elf hex eep lss sym clean clean_list program

-include $(Makefile_post)
build.gpr

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

---------------------------------------------------------------------------
-- The AVR-Ada Library is free software;  you can redistribute it and/or --
-- modify it under terms of the  GNU General Public License as published --
-- by  the  Free Software  Foundation;  either  version 2, or  (at  your --
-- option) any later version.  The AVR-Ada Library is distributed in the --
-- hope that it will be useful, but  WITHOUT ANY WARRANTY;  without even --
-- the  implied warranty of MERCHANTABILITY or FITNESS FOR A  PARTICULAR --
-- PURPOSE. See the GNU General Public License for more details.         --
---------------------------------------------------------------------------

project Build extends "avr_app" is

	for Object_Dir use "obj";
	for Exec_Dir use ".";
	for Source_Dirs use (".");
   	
end Build;
Реклама
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Андрей СШ писал(а):Про расположение датчика снаружи думал и пришёл к выводу, что нужна специальная процедура калибровки, Сделать можно но настройка муторной станет. Именно поэтому и предпочитаю просто градиент от синего к красному. Такая индикация в отличие от ступенчатой не требует точной калибровки.
А кому нужна вообще точная температура воды в чайнике? Ну будет +-5 градусов - чтобы ошпарится будет достаточно любой температуры, но с разным временем, пока не сработает болевой порог. Так что калибровать ничего не нужно.
Насчёт DSки - наверное есть металлические варианты.

Вот для нецифрового варианта всё просто - берётся транзистор или диод в металле и его хоть до 150 градусов нагревай.Хочешь линейную шкалу - берите термопару или медный провод мотайте.

Кстати, нагрев происходит по логарифмической кривой.
Т.е. он замедляется приближаясь к максимуму температуры.
Поэтому как колибровать шкалу - это ещё вопрос.
Кому-то захочется индикации равномерно по температуре через равные промежутки, а кому-то по времени нагрева.
Ну ещё вариант - чисто физическо-биологический - как я предложил.
т.е. холодно, горячо (для человека), кипяток.
Я тоже, в некотором роде, радиоинженер...
Реклама
Аватара пользователя
Karl2233
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Сб июн 20, 2015 12:46:58

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Karl2233 »

у DS в пластике температура до 125, вроде на 25% выше необходимого, а с учётом того что корпус нагревается явно ниже 100С то с лихвой хватит.

про калибровку - да кому нужна высокая точность в данном аспекте!? :shock:
плавное перетекание цвета это конечно прикольно, но если это усложняет задачу, то можно обойтись. думаю три цвета вполне себе годный вариант.
ну можно 7 :))) от холодных к тёплым.
всё равно никто чайник не выключает раньше закипания, а включают, как правило, потрогав его стенку
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Karl2233 писал(а):у DS в пластике температура до 125, вроде на 25% выше необходимого, а с учётом того что корпус нагревается явно ниже 100С то с лихвой хватит.
Пластик не охота макать в кипяток.
Хотя электрочайники вон полностью из поастика и ничего. Люди пользуются.
Karl2233 писал(а):всё равно никто чайник не выключает раньше закипания, а включают, как правило, потрогав его стенку
Я всё это время думал что речь идёт о электрочайнике с автоматом выключения. А тут эвона как... :))
Я тоже, в некотором роде, радиоинженер...
Аватара пользователя
Karl2233
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Сб июн 20, 2015 12:46:58

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Karl2233 »

зачем макать?!? я ведь грю - к корпусу приделать снаружи.
в любом удобном месте. можно даже снизу, где нагревательный элемент (в пятке чайника). а по периметру основания RGB ленту пустить... :roll:

автомат выключения есть.
но я частенько, если чайник недавно кипел, включаю его на минуту и не дожидаясь выключения снимаю и наливаю кипяток.
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

Снизу точно не надо. Там нагреватель. Температура может быть много выше 100°.

По температурам DS18B20 слухи ходят именно о том, что при 125° оно работает, но не долго. Хотя с другой стороны высокая температура в чайнике тоже не постоянно.
У меня был только один случай выхода из строя DS18B20, но температуры там были высокие (иногда больше 100°) и подолгу.
Nizam
Открыл глаза
Сообщения: 60
Зарегистрирован: Сб мар 06, 2010 15:44:00

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Nizam »

Андрей СШ писал(а):Про расположение датчика снаружи думал и пришёл к выводу, что нужна специальная процедура калибровки, Сделать можно но настройка муторной станет. Именно поэтому и предпочитаю просто градиент от синего к красному. Такая индикация в отличие от ступенчатой не требует точной калибровки.

Кроме того вообще в этой схеме есть два косяка:
1. Интерфейс "одна проволочка" требует точного соблюдения таймингов, а встроенный RC-генератор может поплыть при нагреве. Вывод: микроконтроллер надо располагать где похолодней (в ручке).
2. Говорят DS18B20 быстро дохнет при высоких температурах.

Исходный код тут. Над плавным переходом подумаю чуть позже, надо немного свои схемки доделать.
Спойлерmain.adb

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

with 
	AVR, 
	AVR.MCU, 
	AVR.Wait,
	Interfaces,
	One_Wire; 

use AVR, AVR.MCU,Interfaces;

procedure Main is 

	RED_pin: constant := 0;
	GREEN_pin: constant := 2;
	BLUE_pin: constant := 1;
	BEEP_pin: constant := 3;

	RED: boolean renames PORTB_Bits(RED_pin);
	GREEN: boolean renames PORTB_Bits(GREEN_pin);
	BLUE: boolean renames PORTB_Bits(BLUE_pin);
	BEEP: boolean renames PORTB_Bits(BEEP_pin);
		
	low_byte, high_byte, t: Unsigned_8 := 0; 
		
	procedure Wait_ms is 
	new AVR.Wait.Generic_Busy_Wait_Milliseconds(Crystal_hertz => 1_200_000);
	
begin

	RED := low;
	GREEN := low;
	BLUE := low;
	BEEP := low;
	
	DDRB_Bits := (0..3 => DD_Output, others => DD_Input);
	
	loop 
	
		if One_wire.Reset then 
			One_Wire.Send_command(16#CC#);
			One_Wire.Send_command(16#44#);
		end if;
		
		Wait_ms(1000);
		
		if One_wire.Reset then
			One_Wire.Send_command(16#CC#);
			One_Wire.Send_command(16#BE#); 
			low_byte := One_wire.Get; 
			high_byte := One_wire.Get;
		end if;
		
		high_byte := shift_left(high_byte,4) and 2#0111_0000#; 		
		low_byte  := shift_right(low_byte,4) and 2#0000_1111#;
		t := high_byte or low_byte;
		
				
		case t is
			when 1..30 =>  red := false;	green := false;		blue := true;	beep := false; 
			when 31..50 => red := false;	green := true;		blue := false; 	beep := false;
			when 51..70 => red := true;	green := true;		blue := false; 	beep := false;
			when 71..95 => red := true;	green := false;		blue := false;  beep := false;
			when 96..110 => PINB_Bits(RED_pin) := true; green := false; blue := false; PINB_Bits(BEEP_pin) := true;
			when others => red := true; green := true; blue := true; beep := true;
		end case;
		
	
	end loop; 
	
end Main;
One_Wire-AVR_Wiring.ads

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

---------------------------------------------------------------------------
-- The AVR-Ada Library is free software;  you can redistribute it and/or --
-- modify it under terms of the  GNU General Public License as published --
-- by  the  Free Software  Foundation;  either  version 2, or  (at  your --
-- option) any later version.  The AVR-Ada Library is distributed in the --
-- hope that it will be useful, but  WITHOUT ANY WARRANTY;  without even --
-- the  implied warranty of MERCHANTABILITY or FITNESS FOR A  PARTICULAR --
-- PURPOSE. See the GNU General Public License for more details.         --
--                                                                       --
-- As a special exception, if other files instantiate generics from this --
-- unit,  or  you  link  this  unit  with  other  files  to  produce  an --
-- executable   this  unit  does  not  by  itself  cause  the  resulting --
-- executable to  be  covered by the  GNU General  Public License.  This --
-- exception does  not  however  invalidate  any  other reasons why  the --
-- executable file might be covered by the GNU Public License.           --
---------------------------------------------------------------------------


with AVR;                         use AVR;
with AVR.MCU;

package One_Wire.AVR_Wiring is
   pragma Preelaborate;

   OW_Line : constant AVR.Bit_Number := 4;
 
   OW_DD  : Boolean renames MCU.DDRB_Bits (OW_Line);
   OW_Out : Boolean renames MCU.PortB_Bits (OW_Line);
   OW_In  : Boolean renames MCU.PinB_Bits (OW_Line);

end One_Wire.AVR_Wiring;
Makefile

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

###########################################################################
## The AVR-Ada Library is free software;  you can redistribute it and/or ##
## modify it under terms of the  GNU General Public License as published ##
## by  the  Free Software  Foundation;  either  version 2, or  (at  your ##
## option) any later version.  The AVR#Ada Library is distributed in the ##
## hope that it will be useful, but  WITHOUT ANY WARRANTY;  without even ##
## the  implied warranty of MERCHANTABILITY or FITNESS FOR A  PARTICULAR ##
## PURPOSE. See the GNU General Public License for more details.         ##
###########################################################################

# This makefile is adapted from the sample Makefile of WinAVR by Eric
# B. Wedington, Jцrg Wunsch and others.  As they released it to the
# Public Domain, I could pretend that I wrote it myself.  Honestly, I
# removed many (probably useful) parts to better fit the GNAT project makes.
#

# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make file.prog = Upload the hex file to the device, using avrdude.
#                Please customize the avrdude settings below first!
#
# make filename.s = Just compile filename.adb into the assembler code only.
#
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------

-include $(Makefile_pre)

# MCU name
MCU := attiny13

# GNAT project file
GPR := build.gpr

# put the names of the target files here (without extension)
ADA_TARGETS := main


#---------------- GNATMAKE Options ----------------
MFLAGS = -XMCU=$(MCU) -p -P$(GPR)
# -p : Create missing obj, lib and exec dirs

#---------------- Programming Options (avrdude) ----------------
# Output format. (can be srec, ihex, binary)
FORMAT = ihex

#---------------- Programming Options (avrdude) ----------------

# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = ftbb

# com1 = serial port.
# programmer connected to serial device, add -b 57600 for Arduinos
AVRDUDE_PORT = ft0 -B 19200

AVRDUDE_WRITE_FLASH = -U flash:w:
AVRDUDE_WRITE_EEPROM = -U eeprom:w:

AVRDUDE_READ_LFUSE = -U lfuse:r:lfuse.hex:i
AVRDUDE_READ_HFUSE = -U hfuse:r:hfuse.hex:i
AVRDUDE_READ_EFUSE = -U efuse:r:efuse.hex:i

AVRDUDE_WRITE_LFUSE = -U lfuse:w:lfuse.hex:i
AVRDUDE_WRITE_HFUSE = -U hfuse:w:hfuse.hex:i
AVRDUDE_WRITE_EFUSE = -U efuse:w:efuse.hex:i


# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE_COUNTER = -y

# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_NO_VERIFY = -V

# Increase verbosity level.  Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v

AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)

#======================

# Define programs and commands.
SHELL    := sh
CC       := avr-gcc
OBJCOPY  := avr-objcopy
OBJDUMP  := avr-objdump
SIZE     := avr-size
NM       := avr-nm
AVRDUDE  := C:\program files\ftbb\avrdude
REMOVE   := rm -f
COPY     := cp
RENAME   := mv
WINSHELL := cmd
GNATMAKE := avr-gnatmake

RESET_FTBB := C:\Ada_Projects\release_reset_on_ftbb\release_reset_ftbb.exe

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)


# Default target.
all: build

ADA_TARGETS_ELF = $(addsuffix .elf, $(ADA_TARGETS))
ADA_TARGETS_HEX = $(addsuffix .hex, $(ADA_TARGETS))
ADA_TARGETS_EEP = $(addsuffix .eep, $(ADA_TARGETS))
ADA_TARGETS_LSS = $(addsuffix .lss, $(ADA_TARGETS))
ADA_TARGETS_SYM = $(addsuffix .sym, $(ADA_TARGETS))
ADA_TARGETS_SIZE = $(addsuffix .size, $(ADA_TARGETS))

# Create the necessary sub-directories
SUBDIRS := obj lcdobj lcdlib


build: $(ADA_TARGETS_ELF) $(ADA_TARGETS_HEX) $(ADA_TARGETS_EEP) \
   $(ADA_TARGETS_LSS) $(ADA_TARGETS_SYM) $(ADA_TARGETS_SIZE)

%.size: %.elf FORCE
	$(SIZE) --format=avr --mcu=$(MCU) $<

# Program the device.
%.prog: %.hex %.eep
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)$*.hex
# $(AVRDUDE_WRITE_EEPROM)

# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
%.lss: %.elf
	$(OBJDUMP) -h -S $< > $@

# Create a symbol table from ELF output file.
%.sym: %.elf
	$(NM) -n $< > $@

# --- build and link using gnatmake, force rebuilding by gnatmake to
#     make sure dependencies are resolved
%.elf: $(GPR) $(SUBDIRS) FORCE
	$(GNATMAKE) $(MFLAGS) -XAVRADA_MAIN=$*

# Compile: create assembler files from Ada source files.
%.s : %.adb
	$(GNATMAKE) -f -u $(MFLAGS) $< -cargs -S

%.s : %.ads
	$(GNATMAKE) -f -u $(MFLAGS) $< -cargs -S

# Assemble: create object files from assembler source files.
%.o : %.S
	@echo
	@echo $(MSG_ASSEMBLING) $<
	$(CC) -c $(ALL_ASFLAGS) $< -o $@

# create the subdirectories
$(SUBDIRS):
	$(REMOVE) -r $@
	mkdir $@

# Target: clean project.
clean: clean_gnat clean_list

clean_gnat:
	avr-gnatclean -XMCU=$(MCU) -P$(GPR)

clean_gnat_recursive:
	avr-gnatclean -r -XMCU=$(MCU) -P$(GPR)

clean_list :
	$(REMOVE) *.hex
	$(REMOVE) *.eep
	$(REMOVE) *.elf
	$(REMOVE) *.map
	$(REMOVE) *.sym
	$(REMOVE) *.lss
	$(REMOVE) *.ali
	$(REMOVE) b~*.ad?
	$(REMOVE) -rf $(SUBDIRS)
	
program: 
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)main.hex
	$(RESET_FTBB) FT232R\ USB\ UART
	
read_fuses:
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_READ_LFUSE)
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_READ_HFUSE)
#	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_READ_EFUSE)
	
write_fuses:	
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_HFUSE)
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_LFUSE)
#	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_EFUSE)

run: all program

FORCE:

# Listing of phony targets.
.PHONY : all finish \
   build elf hex eep lss sym clean clean_list program

-include $(Makefile_post)
build.gpr

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

---------------------------------------------------------------------------
-- The AVR-Ada Library is free software;  you can redistribute it and/or --
-- modify it under terms of the  GNU General Public License as published --
-- by  the  Free Software  Foundation;  either  version 2, or  (at  your --
-- option) any later version.  The AVR-Ada Library is distributed in the --
-- hope that it will be useful, but  WITHOUT ANY WARRANTY;  without even --
-- the  implied warranty of MERCHANTABILITY or FITNESS FOR A  PARTICULAR --
-- PURPOSE. See the GNU General Public License for more details.         --
---------------------------------------------------------------------------

project Build extends "avr_app" is

	for Object_Dir use "obj";
	for Exec_Dir use ".";
	for Source_Dirs use (".");
   	
end Build;
Андрей здравствуйте .. Прошу прощения..
Я про исходный код . Я не спец в программировании. И мне не понятно то что вы тут выложили.
Может кто разбирается? Прошу вашей помощи.
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Андрей СШ писал(а): По температурам DS18B20 слухи ходят именно о том, что при 125° оно работает, но не долго. ...
У меня был только один случай выхода из строя DS18B20, но температуры там были высокие (иногда больше 100°) и подолгу.
Слушайте, а что пишет даташит? Хотя там могут и приврать.
Есть два способа (объективно) проверить - теоретически и практически.
Первый - это поискать даташит на ABS. Может корпус DS и не из него сделан, но что-то близкое (мне кажется). Если ABS при 100 С живёт 2 часа, то о чём разговор? Но это я гадаю. Есть ли спецы по ABS?

(вот ведь блин, у меня мама занималась пластмассами, компаундами и клеями всю жизнь и я чуть химиком не стал, с детства её книжки почитывал). А про ABS не знаю ничего - импортный же. А мама оборонкой занималась.
Я тоже, в некотором роде, радиоинженер...
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Андрей СШ »

С ABS проблем нет - размягчается при 170° и больше. Проблема в чипе - при высоких температурах электроника быстрее стареет.

Думаю надо поступить проще - сделать и не париться. Сломается и ладно - невелика потеря. А когда сломается будем думать про другой датчик.

Инструкция как это компилируется здесь
http://geektimes.ru/post/257638/
там есть ошибки, но не критичные.

Плавное изменение сделать не сложно, но это надо пару часов спокойно подумать - а у меня что-то не выделяется столько без перерывов.
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Андрей СШ писал(а):С ABS проблем нет - размягчается при 170° и больше. Проблема в чипе - при высоких температурах электроника быстрее стареет.
Заблуждение.
Отжиг микросхем происходит при 150-170 С. Готовых, перед корпусировкой. Это для них нормальная температура - для кремния.
Деградация быстрее происходит у пластмассы - уже при 60 начинается - потому что это органика. Базовые знания физики вообще-то.

У многих советских мощных биполярных транзисторов рабочая температура кристалла 150гр.С, корпуса 175С.

PS
поглядел свойства ABS - сополимер Акрилонитрила (цианидный винил)-Бутадиена (основа каучуковых резин)-Стирола.
Размягчение начинается от 80-100 градусов. Влагопоглощение 0,3% за 24 часа при 20С. Был лучшего мнения о нём. Но не факт что DS из него.

теперь возьмём советский
Эпоксидный компаунд МБК или КГСМ - Влагопоглощение такое же (это считается проблемой эпоксидки :)) ), термостойкость - размягчение начинается при 220С - поверхностное.
В него окунают кристаллы советских микросхем перед корпусировкой.
Я тоже, в некотором роде, радиоинженер...
Аватара пользователя
Karl2233
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Сб июн 20, 2015 12:46:58

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Karl2233 »

в даташите написано что диапазон измерений DS в пластике до 125С, значит рабочая Т явно больше.
кипение воды 100С, на корпусе явно меньше чем 100. так что ничего не сгорит.
а на счёт размещения внизу.. да, погорячился я :)))
значит всё можно разместить в ручке :solder:

про кремний. рабочая Т у кремния 125 (вспомните усилитель Агеева), максимальная 150-175. так что ничего не сгорит.
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Karl2233 писал(а):в даташите на корпусе явно меньше чем 100.
честно говоря, размещение на корпусе, в ручке и в любом другом месте, кроме воды - это самообман. Никакой корректной температуры не получить. Показания будут зависеть от внешних воздействий - холодно ли в помещении, есть ли сквозняк, насколько долго холодно.
Можно так нехило обмануться и сунуть палец в горячую воду, потому что корпус ещё холодный и не прогрелся, а внутри уже кипяток - электрочайник греется за пару минут.
Я тоже, в некотором роде, радиоинженер...
Аватара пользователя
Karl2233
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Сб июн 20, 2015 12:46:58

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Karl2233 »

да ну!
А кому нужна вообще точная температура воды в чайнике?
:)))
тащемто, вода кипит при 100С вне зависимости от окружающей Т.
так что если в комнате будет или 18 или 32 градуса вода вскипит всё равно при 100.

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

так что окружающая Т на обсуждаемый показометр вряд ли окажет существенное влияние.
Последний раз редактировалось Karl2233 Вт авг 25, 2015 11:00:12, всего редактировалось 1 раз.
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Karl2233 писал(а):да ну!
А кому нужна вообще точная температура воды в чайнике?
:)))
Хе-хе, подловили , что-ли?
А вы хоть раз в жизни меряли температуру воды при которой у вас палец руки опущенный в воду перестаёт терпеть?
или температуру которую терпит ваша ступня на ноге?
А я в детстве всё промерял. И не по заданию, а из любопытства.
А нынешним детям на всё похер.
Даже слово "хер" не знают откуда пошло есть на Руси. :))

Ну и вот.
Я тоже, в некотором роде, радиоинженер...
Аватара пользователя
Karl2233
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Сб июн 20, 2015 12:46:58

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение Karl2233 »

а зачем мне совать палец в горячую или кипяток?! :shock:
болевой порог возникает при 50С (+/-), вода кипит при 100С.
какая связь между пальцем и кипением воды? :)))

я не подлавливаю, я говорю что мы пытаемся сделать показометр(цветомузыкукипение), и особая точность какбэ не нужна.

з.ы. я уже начал чайник курочить для глубокой модернизации(с) иллюминацию вмонтирую в ручку, там же управление и датчик. :solder:
Последний раз редактировалось Karl2233 Вт авг 25, 2015 11:07:02, всего редактировалось 1 раз.
Аватара пользователя
bad2cat
Потрогал лапой паяльник
Сообщения: 374
Зарегистрирован: Пт июн 12, 2015 09:21:56
Откуда: Челяба-сити

Re: Подсветка чайника с меняющимся цветом в зависимости от t

Сообщение bad2cat »

Karl2233 писал(а):а зачем мне совать палец в горячую или кипяток?! :shock:
болевой порог возникает при 50С (+/-), вода кипит при 100С.
какая связь между пальцем и кипением воды? :)))

я не подлавливаю, я говорю что мы пытаемся сделать показометр(цветомузыкукипение), и особая точность какбэ не нужна.
Не, ну так и я о том же говорю, что особая не нужна.
Но хоть какая-то - нужна. А какая точность у датчика размещённого в ручке или в корпусе? Разница между водой может достичь 20 градусов.
Причём эта разница не постоянна - я вот о чём говорю.
Когда датчик в воде - то пусть он даже врёт, но врёт с известным отклонением. Можно приспособится.
Я тоже, в некотором роде, радиоинженер...
Ответить

Вернуться в «AVR»