Контроль уровня воды в баке на Атмега8

Обсуждаем контроллеры компании Atmel.
igor741986
Родился
Сообщения: 13
Зарегистрирован: Пн мар 06, 2017 15:17:48
Откуда: Башкортостан

Контроль уровня воды в баке на Атмега8

Сообщение igor741986 »

Два поплавка в баке, первый - бак пуст, второй - полон и два в колодце, первый - колодец пуст, второй колодец полон. Если в колодце кончается вода, то насос прекращает качать, как набирается, опять включается и качает пока не отработает датчик - бак полон или пока не опустошится колодец.
В протеус все работает, а когда выставляю во фьюзах внешний генератор на 8 МГЦ, то выдает ошибку и после не шьется, когда ставлю внутренний, то насос постоянно качает. Подскажите пожалуйста, что ему не хватает :) ?

Изображение

.equ XTAL = 8000000
.nolist
.include "m8def.inc"
.list
.cseg ;данная директива означает, что дальше идет код программы
.org 0x00 ;данная директива означает, что код программы будет располагаться с 0 ого адреса в FLASH

rjmp initial ;прерывание от RESET, ссылаемся на обработчик прерывания - initial
.org 0x20
initial: ldi R16,low(RAMEND) ;скопируем в R16 младщий байт из константы RAMEND, которая определена в m8def.inc и хранит размер SRAM
out SPL,R16 ;скопируем значение из R16 в SPL
ldi R17,high(RAMEND) ;скопируем в R16 старший байт из константы RAMEND, которая определена в m8def.inc
out SPH,R17 ;скопируем значение из R17 в SPH

;КОД КОНФИРУГИРУЮЩИЙ ПЕРЕФЕРИЮ МИКРОКОНТРОЛЛЕРА
sbi DDRD,0

ldi R16,0b00001111
out PORTB,R16

ldi R16,0b00000000
out DDRB,r16

;КОД ОСНОВНОЙ ПРОГРАММЫ

sbic PINB,1
sbi PORTD,0
rjmp main
s: sbis PINB,0
rcall s1
ret
s1: sbic PINB,1
rcall s2
ret
s2: dec R18
inc R18
breq s3

ret
s3: sbis PINB,2
rcall s4
ret
s4: sbic PINB,3
rjmp s4
sbis PINB,3
sbi PORTD,0
ret
start: sbis PINB,2
rcall start1
ret
start1: sbic PINB,1
rcall start2
ret
start2: sbis PINB,3
sbi PORTD,0
sbic PINB,3
ret
star: sbic PINB,2
rcall star1
ret
star1: cbi PORTD,0
ldi R18,0
ret
stop: sbis PINB,0
cbi PORTD,0
ret
main: ldi R18,1
sbic PINB,0
rcall start
sbis PINB,1
rcall stop
rcall star
rcall s
rjmp main
Я еще не волшебник, а только учусь)
Реклама
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Контроль уровня воды в баке на Атмега8

Сообщение Alkul »

У Вас устройство "в железе" есть?
Полную схему можно увидеть?
По представленному протеусному уродству я для начала не вижу, где тот самый "внешний генератор", тактирование от которого Вы выставляете фьюзами.
Реклама
Аватара пользователя
korob
Друг Кота
Сообщения: 6643
Зарегистрирован: Чт авг 09, 2012 01:09:39
Откуда: Ливны

Re: Контроль уровня воды в баке на Атмега8

Сообщение korob »

igor741986 писал(а):Подскажите пожалуйста, что ему не хватает?
Мне кажется что наоборот - МК здесь лишний, тем более Mega8. :roll: :oops: :facepalm:
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. :(
Всегда с уважением, Александр.
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Контроль уровня воды в баке на Атмега8

Сообщение Alkul »

korob писал(а):Мне кажется что наоборот - МК здесь лишний
В принципе да. Схему с такой логикой можно на нескольких релюшках сделать.
А хочется на МК - на ATtiny2313 можно две такие (работающие независимо друг от друга) схемы сделать плюс управление RGB-светодиодной лентой и еще половина памяти программ останется свободной.
Реклама
Эиком - электронные компоненты и радиодетали
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: Контроль уровня воды в баке на Атмега8

Сообщение pcb »

процессор тут не нужен.

нарисуйте таблицу истинности и используйте реле. Реле у вас будут в любом случае.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Реклама
igor741986
Родился
Сообщения: 13
Зарегистрирован: Пн мар 06, 2017 15:17:48
Откуда: Башкортостан

Re: Контроль уровня воды в баке на Атмега8

Сообщение igor741986 »

Alkul писал(а):У Вас устройство "в железе" есть?
Полную схему можно увидеть?
По представленному протеусному уродству я для начала не вижу, где тот самый "внешний генератор", тактирование от которого Вы выставляете фьюзами.
Схема тактируется внутренним генератором на 8 мгц, с ноги PD0 сигнал идет на релюху через оптопару, с релюхи на насос, все. Если все ноги с PB0 до PB3 свободны, то насос не должен работать, но он работает. Вообще реакции ноль, хоть что с ногами делай, насос качает. Походу с кодом что то не то. Видимо какую то мелочь я упускаю. Может с PD0 не постоянный ток идет, а с частотой из за кода, может в протеусе гасится этот дребезг, а здесь он приводит к тому что питание на релюху идет. Тяжело без осциллографа и опыта в програмировании).
Я еще не волшебник, а только учусь)
Реклама
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Re: Контроль уровня воды в баке на Атмега8

Сообщение AndTer »

Подтяжка входов на "+" включена?
Глупый не задает вопросы. Глупый и так все знает.
igor741986
Родился
Сообщения: 13
Зарегистрирован: Пн мар 06, 2017 15:17:48
Откуда: Башкортостан

Re: Контроль уровня воды в баке на Атмега8

Сообщение igor741986 »

AndTer писал(а):Подтяжка входов на "+" включена?
Да. Умеете пугать).
Я еще не волшебник, а только учусь)
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Контроль уровня воды в баке на Атмега8

Сообщение Alkul »

igor741986 писал(а):Схема тактируется внутренним генератором на 8 мгц, с ноги PD0 сигнал идет на релюху через оптопару, с релюхи на насос, все.
Вы схему можете нарисовать? Что за оптопара, как включена. Это что - тайна какая-то?

Дальше
igor741986 писал(а):Если все ноги с PB0 до PB3 свободны, то насос не должен работать, но он работает.
Что значит "свободны"? Концевики разомкнуты?

Если концевик "верхний уровень бак" разомкнут, то вывод PINB1 через внутренний pullup, который вы включили
ранее командами

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

ldi R16,0b00001111
out PORTB,R16
ldi R16,0b00000000
out DDRB,r16
притянут к питанию, и с него будет читаться лог.1

но Вы же пишете:

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

;КОД ОСНОВНОЙ ПРОГРАММЫ

sbic PINB,1
sbi PORTD,0
первая команда означает - пропустить следующую команду, если на выводе PINB1 лог.0, но у Вас-то на этом выводе лог.1 при разомкнутом концевике! Поэтому МК не пропускает следующую команду и законно выполняет

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

sbi PORTD,0
подавая тем самым питание на светодиод оптрона и запуская насос.
Дальше даже смотреть не стал, времени жалко. Разбирайтесь с ассемблером, вернее, изучите его получше.
Последний раз редактировалось Alkul Пн мар 06, 2017 18:37:01, всего редактировалось 1 раз.
igor741986
Родился
Сообщения: 13
Зарегистрирован: Пн мар 06, 2017 15:17:48
Откуда: Башкортостан

Re: Контроль уровня воды в баке на Атмега8

Сообщение igor741986 »

Alkul писал(а):
igor741986 писал(а):Схема тактируется внутренним генератором на 8 мгц, с ноги PD0 сигнал идет на релюху через оптопару, с релюхи на насос, все.
Вы схему можете нарисовать? Что за оптопара, как включена. Это что - тайна какая-то?

Дальше
igor741986 писал(а):Если все ноги с PB0 до PB3 свободны, то насос не должен работать, но он работает.
Что значит "свободны"? Концевики разомкнуты?

Если концевик "верхний уровень бак" разомкнут, то вывод PINB1 через внутренний pullup, который вы включили
ранее командами

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

ldi R16,0b00001111
out PORTB,R16
ldi R16,0b00000000
out DDRB,r16
притянут к питанию, и с него будет читаться лог.1

но Вы же пишете:

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

;КОД ОСНОВНОЙ ПРОГРАММЫ

sbic PINB,1
sbi PORTD,0
первая команда означает - пропустить следующую команду, если на выводе PINB1 лог.0, но у Вас-то на этом выводе лог.1 при разомкнутом концевике! Поэтому МК не пропускает следующую команду и законно выполняет

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

sbi PORTD,0
подавая тем самым питание на светодиод оптрона и запуская насос.
Дальше даже смотреть не стал, времени жалко. Разбирайтесь с ассемблером, вернее, изучите его получше.
Все правильно) эта часть кода в начале старта дает возможность наполнить бак(поэтому она не зациклена, а нужна только при первом включении), но потом когда мы посадим 1пин на землю, то насос должен отключится этого не происходит.
sbic PINB,1
sbi PORTD,0
По логике все очень просто и должно работать. Я могу конечно нарисовать схему, но на ней все можно отбросить, Останется один контроллер с ключами на входах и диодом(или вольтметром) на выходе, и это не поменяет картины, диод будет постоянно гореть, не реагируя на сигналы на входе.
Я еще не волшебник, а только учусь)
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Контроль уровня воды в баке на Атмега8

Сообщение Alkul »

igor741986 писал(а): Все правильно) эта часть кода в начале старта дает возможность наполнить бак(поэтому она не зациклена, а нужна только при первом включении), но потом когда мы посадим 1пин на землю, то насос должен отключится этого не происходит.
Вот честно - копаться в Вашем коде совершенно нет желания, разбираться, чем "start" отличается от "star" и т.д.
Напишите свою программу вот в таком стиле:
Спойлер

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

;Порт A (ЦАП)
.equ	CS   = 1		;Линия CS ЦАП. Работа микросхемы разрешена при лог.0 на этой линии
.equ	CLK  = 4		;Линия CLK ЦАП. Линия тактирования последовательного интерфейса ЦАП
.equ	SDI  = 5		;Линия SDI ЦАП. Линия ввода данных в ЦАП.
.equ	CLRS = 6		;Линия CLRS ЦАП. При лог.0 на линии ЦАП сбрасывается (на его выходе появляется сигнал, соответствующий коду 0h)
.equ	LOAD = 7		;Линия LOAD ЦАП. Активный в нуле строб записи в регистр данных ЦАП

;Порт B (Кнопки, ЖКИ-индикатор)
.equ	SELECT=0		;Кнопка "Выбор"
.equ	RIGHT=1		;Кнопка "Вправо"
.equ	UP=2		;Кнопка "Вверх"
.equ	RS=3		;Линия выбора (0 - инструкции, 1 - данные) типа обмена с LCD		    \	
.equ	Estr=4		;Разрешение выполнения любого цикла обмена (0 - обмен запрещен, 1 - обмен разрешен) __\ Линии управления ЖКИ-индикатором
.equ	LEFT=5		;Кнопка "Влево"
.equ	ESC=6		;Кнопка "Отмена"
.equ	DOWN=7		;Кнопка "Вниз"

;Порт С (АЦП)
.equ	SCLK = 0		;Линия SCLK АЦП. Линия тактирования последовательного интерфейса АЦП (интерфейс аналогичен SPI)
.equ	RES  = 1		;Линия RESET АЦП. При лог.0 на линии АЦП сбрасывается.
.equ	DRDY = 2		;Линия DRDY АЦП. После завершения преобразования линия DRDY сбрасывается (на линии лог.0). 
.equ	DOUT = 3		;Линия DOUT АЦП. Линия вывода данных из АЦП.
.equ	DIN  = 4		;Линия DIN АЦП. Линия ввода данных в АЦП.

.equ	RELE = 5		;Линия управления выходом. При лог.1 на линии на выходных клеммах прибора появляется ток, при лог.0 на линии RELE
			;выходная клемма "+" отключается от источника тока посредством размыкания контакта реле К1

;Порт D (Переключатели режимов работы, ЖКИ-индикатор)
.equ	S1=2		;Переключатели 
.equ	S2=1		;режимов работы прибора
;Старший ниббл порта D - информационные биты D4-D7 при обмене с ЖКИ-индикатором.


.equ	MaxMode = 0x0B	;Максимальное кол-во режимов в программе
.equ	MaxImpl = 0x10	;Максимальное кол-во импульсов в режиме


;Определения имен регистров и адресов переменных 
.equ	CurntL=0x98	;Мл.байт значения тока (в единицах измерения АЦП), которое нужно поддерживать 
.equ	CurntH=0x99	;Ст.байт значения тока (в единицах измерения АЦП), которое нужно поддерживать 
.equ	DACL=0x9A		;Мл.байт уставки ЦАП для заданного значения тока
.equ	DACH=0x9B		;Ст.байт уставки ЦАП для заданного значения тока
.equ	Level=0x9C	;Уставка значения тока в расчетных единицах  Уставка= (Зад.знач - 38)/2 ;
			; где Зад.знач - значение тока в миллиамперах (дискретами через 0,5 мА)
			;Такми образом, при задании тока от -19 до +19 мА уставка изменяется от 0 до 76

.CSEG

.org 00
	jmp RESET 	; Reset Handler
	jmp EXT_INT0 	; IRQ0 Handler
	jmp EXT_INT1 	; IRQ1 Handler
	jmp TM2_COMP 	; Timer2 Compare Handler
	jmp TM2_OVF 	; Timer2 Overflow Handler
	jmp TM1_CAPT 	; Timer1 Capture Handler
	jmp TM1_COMPA 	; Timer1 CompareA Handler
	jmp TM1_COMPB 	; Timer1 CompareB Handler
	jmp TM1_OVF 	; Timer1 Overflow Handler
	jmp TM0_OVF 	; Timer0 Overflow Handler
	jmp SPI_STC 	; SPI Transfer Complete Handler
	jmp USRT_RXC 	; USART RX Complete Handler
	jmp USRT_UDR 	; UDR Empty Handler
	jmp USRT_TXC 	; USART TX Complete Handler
	jmp ADC_conv	; ADC Conversion Complete Handler
	jmp EE_RDY 	; EEPROM Ready Handler
	jmp ANA_COMP 	; Analog Comparator Handler
	jmp TWSI 		; Two-wire Serial Interface Handler
	jmp EXT_INT2 	; IRQ2 Handler
	jmp TM0_COMP 	; Timer0 Compare Handler
	jmp SPM_RDY 	; Store Program Memory Ready Handler



EXT_INT0: 	; IRQ0 Handler
EXT_INT1: 	; IRQ1 Handler
TM2_COMP: 	; Timer2 Compare Handler
TM2_OVF: 		; Timer2 Overflow Handler
TM1_CAPT: 	; Timer1 Capture Handler
TM1_COMPA: 	; Timer1 CompareA Handler
TM1_COMPB:	; Timer1 CompareB Handler
;TM1_OVF: 		; Timer1 Overflow Handler
TM0_OVF: 		; Timer0 Overflow Handler
SPI_STC: 		; SPI Transfer Complete Handler
USRT_RXC: 	; USART RX Complete Handler
USRT_UDR: 	; UDR Empty Handler
USRT_TXC: 	; USART TX Complete Handler
ADC_conv:		; ADC Conversion Complete Handler
EE_RDY: 		; EEPROM Ready Handler
ANA_COMP: 	; Analog Comparator Handler
TWSI: 		; Two-wire Serial Interface Handler
EXT_INT2: 	; IRQ2 Handler
TM0_COMP: 	; Timer0 Compare Handler
SPM_RDY: 		; Store Program Memory Ready Handler
	reti

;Обработчик прерывания по переполнению таймера 1, вызывается каждую секунду
TM1_OVF:	push R16			;
	push R17			;
	push ZL			;
	push ZH			;
	push YL			;
	push YH			;
	push XL			;
	push XH			;
	push RL			;
	push RH			;
	push R19			;
	push R1			;
	push R0			;
	push R18			;
	in R16,SREG		;
	push R16			;


	ldi R17,$C2		;1 сек
	ldi R16,$F7		;
	out TCNT1H,R17		;Переинициализировать таймер 1
	out TCNT1L,R16		;на переполнение через 1 секунду

	lds XL,LongImpL		;Занести в рег.пару Х кол-во секунд, оставшихся
	lds XH,LongImpH		;до завершения текущего импульса
	sbiw XL,1			;Декремент кол-ва оставшихся секунд
	breq TM1_2		;Если кол-во оставшихся секунд равно нулю (импульс завершен), то переход на метку TM1_2 
	sts LongImpL,XL		;Иначе сохранить в ячейках  LongImpL и LongImpH
	sts LongImpH,XH		;новое значение кол-ва оставшихся секунд
	jmp TM1_END		;Переход на выход из программы

;Текущий импульс завершен
TM1_2:	lds ZL,AdrModeL		;Занести в рег.пару Z адрес первого байта информации о текущем режиме
	lds ZH,AdrModeH		;
	ld R16,Z+			;Занести в рег.R16 кол-во импульсов в текущем цикле, в рег.паре Z теперь адрес байта кол-ва повторов цикла в режиме

	lds R17,NumImpl		;Занести в рег.R17 порядковый номер импульса, выполняющегося в данный момент
	inc R17			;Инкремент номера импульса, выполняющегося в данный момент для проверки, последний ли это импульс в цикле
	cp R17,R16		;Если после инкремента номер импульса меньше кол-ва импульсов в текущем цикле, то это не последний импульс цикла
	brlo TM1_4		;Если R17 < R16, то завершенный импульс не последний в цикле, переход на метку TM1_4
	jmp TM1_6			;Иначе завершенный импульс последний в цикле, переход на метку TM1_6

;Завершенный импульс не последний в цикле
TM1_4:	sts NumImpl,R17		;Сохранить в ячейке NumImpl новое значение порядкового номера импульса, выполняющегося в данный момент
	adiw ZL,1			;Прибавить к адресу кол-ва повторов циклов текущего режима для перехода к адресу информации о первом импульсе
	ldi R16,3			;Занести в рег.R16 длину информации об одном импульсе
	mul R17,R16		;Умножить длину информации об одном импульсе на порядковый номер текущего импульса для рассчета смещения адреса
	add ZL,R0			;Прибавить к адресу первого байта информации о текущем режиме смещение адреса для расчета адреса первого
	adc ZH,R1			;байта информации о текущем импульсе
	ld R16,Z+			;Занести в рег.R16 значение тока текущего импульса в расчетных единицах (уставку тока для текущего импульса)
	sts Level,R16		;Сохранить новое значение уставки тока в ячейке Level
	ld R16,Z+			;Занести в рег.R16 значение мл.байта длины текущего импульса в секундах
	sts LongImpL,R16		;
	ld R16,Z+			;Занести в рег.R16 значение ст.байта длины текущего импульса в секундах
	sts LongImpH,R16		;
	call SET_CUR		;Переход на подпрограмму установки тока текущего импульса (выполняется за 17,5 мкс)
	jmp TM1_END		;Переход на выход из программы

;Завершенный импульс последний в цикле, проверить кол-во повторов цикла в текущем режиме
TM1_6:	ld R16,Z			;Занести в рег.R16 общее кол-во повторений циклов в текущем режиме
	lds R17,RepCycl		;Занести в рег.R17 кол-во выполненных повторений циклов в текущем режиме
	inc R17			;Инкремент кол-ва выполненных повторений циклов в текущем режиме
	cp R17,R16		;Если после инкремента кол-во выполненных повторов меньше общего кол-ва повторов, то режим не завершен
	brlo TM1_8		;Если R17 < R16, то текущий цикл не последний в режиме, переход на метку TM1_8
	jmp TM1_10		;Иначе это последний повтор цикла в текущем режиме

;Кол-во повторов цикла текущего режима не исчерпано, начать повтор цикла заново
TM1_8:	sts RepCycl,R17		;Сохранить в ячейке RepCycl новое кол-во выполненных повторов цикла в текущем режиме
	clr R17			;Обнулить рег.R17 для обнуления порядкового номера выполняемого импульса после перехода на метку TM1_4
	jmp TM1_4			;Перейти на метку TM1_4 для возврата на начало цикла и генерации первого импульса	

;Выполнены все повторы цикла в текущем режиме, проверить не последний ли это режим программы
TM1_10:	lds R17,NumMode		;Занести в рег.R17 порядковый номер текущего режима
	inc R17			;Инкремент порядкового номера текущего режима
	lds R16,TPC		;Занести в рег.R17 кол-во режимов в программе
	cp R17,R16		;Сравнить инкрементированный порядковый номер текущего режима с общим кол-вом режимов программы
	brlo TM1_12		;Если номер текущего режима меньше общего кол-ва режимов, то это не последний режим программы, переход на TM1_12
	jmp TM1_14		;Иначе завершенный режим последний в программе, переход на метку TM1_14

;Завершенный режим не последний в программе, перейти на запуск генерации по следующему режиму
TM1_12:	sts NumMode,R17		;Сохранить в ячейке NumMode порядковый номер следующего режима
	lds ZL,AdrModeL		;Занести в рег.пару Z адрес первого байта информации о текущем режиме
	lds ZH,AdrModeH		;
	ld R17,Z			;Занести в рег.R17 кол-во импульсов в цикле текущего режима
	adiw ZL,2			;Переход к адресу начала информации о первом импульсе цикла текущего режима
	ldi R16,3			;Занести в рег.R16 длину информации об одном импульсе (3 байта)
	mul R17,R16		;Умножить длину информации об одном импульсе на кол-во импульсов в цикле для рассчета смещения адреса,
	add ZL,R0			;Теперь в рег.паре Z адрес первого байта информации о следующем режиме,
	adc ZH,R1			;который становится теперь текущим режимом
	sts AdrModeL,ZL		;Занести в ячейки AdrModeL и AdrModeH начальный адрес нового
	sts AdrModeH,ZH		;текущего режима
	clr R17			;Обнулить рег.R17 для обнуления порядкового номера выполняемого импульса после перехода на метку TM1_4
	sts RepCycl,R17		;Обнулить значение кол-ва выполненных повторов цикла в текущем режиме в ячейке RepCycl
	sts NumImpl,R17		;Обнулить значение порядкового номера импульса, выполняющегося в данный момент в ячейке NumImpl
	adiw ZL,1			;В рег.паре Z теперь адрес байта кол-ва повторов цикла в следующем режиме, ставшем теперь текущим
	jmp TM1_4			;Переход на метку TM1_4 для генерации первого импульса нового текущего режима
и Вам самому станет понятно, что и как делается в Вашей программе.
igor741986
Родился
Сообщения: 13
Зарегистрирован: Пн мар 06, 2017 15:17:48
Откуда: Башкортостан

Re: Контроль уровня воды в баке на Атмега8

Сообщение igor741986 »

Спасибо всем тем, кто еще остался человеком и помогает. А кто не хочет помогать, а хочет порисоваться или выдать свою оценку, то мне не понятна ваша мотивация. Не мешайте мне, отвлекая от дела.
Изображение Изображение
Изображение
Изображение
Изображение
Изображение
На входах герконы, еще не подцепил.
Я еще не волшебник, а только учусь)
igor741986
Родился
Сообщения: 13
Зарегистрирован: Пн мар 06, 2017 15:17:48
Откуда: Башкортостан

Re: Контроль уровня воды в баке на Атмега8

Сообщение igor741986 »

У меня тут родилась идея сделать это все на одном прерывании и кодовой маске. А то подумаете, что я все бросил и сдался).
Я еще не волшебник, а только учусь)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Контроль уровня воды в баке на Атмега8

Сообщение BOB51 »

Удивляет ситуация, когда автор пытается нагородить... там, где это совершенно не требуется и в то же время абсолютно пренебрегает требованиями схемотехники там, где это необходимо.
8)
Имея четыре линии входного сигнала и максимум две для управления насосами (ежли не лепить обратный контроль по работе тех насосов) требуется всего-то 8 - 14 выводный МК поставить. Поскольку у АВР основное корпусирование или 8 выводный тини13/13А или 20 лапый тини2313 логично выбор на них остановить.
А вот схемотехнику получения входного сигнала с датчиков надо будет доработать - перевести на "токовую петлю" с дополнением оптронным преобразователем ток-логический уровень на платке устройства. Таким же образом и управление силовыми ключами приводов делать. Ибо реальное расстояние между датчиками, нагрузкой и самим модулем должно бысть явно "за 5 метров".
:wink:
Относительно программы...
Там только прерываний и не хватало!
:)))
Неуж-то стандартный программный опрос раз в 0,01 секунду по быстродействию не устраивает? (и это тоже еще в какой степени заторможено программой делать надо).
:tea:
igor741986
Родился
Сообщения: 13
Зарегистрирован: Пн мар 06, 2017 15:17:48
Откуда: Башкортостан

Re: Контроль уровня воды в баке на Атмега8

Сообщение igor741986 »

BOB51 писал(а): Относительно программы...
Там только прерываний и не хватало!
:)))
Неуж-то стандартный программный опрос раз в 0,01 секунду по быстродействию не устраивает? (и это тоже еще в какой степени заторможено программой делать надо).
:tea:
Меня бы все устраивало), но стандартный опрос не опрашивает или как то некорректно опрашивает, слишком быстро или ему еще какие то условия надо(поэтому я и никогда не понимал электронику, ты не видишь, что там внутри происходит, в данный момент), вот с прерыванием все четко работает. Сигнал1 пришел, на выходе четко сигнал, сигнал2 пришел, на выходе четко сигнала нет. Только надо 4 контакта на прерывания в идеале, это самое простое решение. Атмега2560 в этом плане лучше, да и в ней всего больше мне, как раз на все хватит. А то я хотел Атмеги 8 между собой согласовывать.
Я еще не волшебник, а только учусь)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Контроль уровня воды в баке на Атмега8

Сообщение BOB51 »

Сигнал с механического контакта НИКОГДА мгновенно не устанавливается.
Процедура фильтрации обязательна.
Прерывание в данном случае еще больше проблем вызывать будет.
8)
А для Вашей задачки, ежли 4 датчика и один силовой выход, и 13-й тиньки "с избытком" достаточно (не говоря уже о примитивных релейках и/или автомате "на рассыпухе").
:roll:
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Re: Контроль уровня воды в баке на Атмега8

Сообщение AndTer »

BOB51 писал(а):Процедура фильтрации обязательна.
Прерывание в данном случае еще больше проблем вызывать будет.
Не знаю, самое удобное опрос кнопок по прерыванию.(от таймера правда) и дребезг можно убрать и реагировать на любые комбинации, хоть на все сразу нажатые кнопки.
BOB51 писал(а):А для Вашей задачки
Ну чел делает на том что у него есть. Что тини что мега, сути не меняет и никак ни на код ни на устройство не влияет.
Только корпус и цена.

Разбираться в коде не стану. Я ассемблер учил давно) Ещё на КР580 компы были)
Успел забыть и вспоминать не хочу)
На си, такая программа пишется быстро и просто.
Глупый не задает вопросы. Глупый и так все знает.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Контроль уровня воды в баке на Атмега8

Сообщение BOB51 »

Да и на ассемблере весьма простой вариант - возможно и поменьше суммарным кодом будет.
Только алгоритм правильный нужен.
Насчет прерываний... Все равно затем антидребезг потребуется - смысл усложнять программу с учетом возможных повторных вызовов прерывания сразу по его исполнению?
:dont_know:
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Re: Контроль уровня воды в баке на Атмега8

Сообщение AndTer »

BOB51 писал(а):поменьше суммарным кодом будет.
Абсолютно неактуально! 8кб на программку управления насосом?
Да можно даже подрубить float, и все переменные дщтп дщтп сделать)
Зачем тратить время на уменьшение кода и более компактнынй алгоритм, если там места и производительности дял этой задачи стократно больше чем потребуется? А время оно как говорится деньги)
BOB51 писал(а):Насчет прерываний... Все равно затем антидребезг потребуется
Я не знаю как написал прошивку ТС, ассемблер не хочу ковырять, но я использую прерывания по таймеру именно для опроса кнопок(сколько угодно сразу и независимо) и для подавления дребезга, "всё в одном".
Глупый не задает вопросы. Глупый и так все знает.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Контроль уровня воды в баке на Атмега8

Сообщение BOB51 »

По таймеру, а не по входным линиям (как у топикстартера в замысле).
:wink:
Ну и зачем цеплять избыточный МК там, где оный экономически не обоснован.
Другое дело - для удовольствия "на вырост" - но ... тогда заранее надо позаботится о минимальном использовании ресурсов, чтоб попозже при изменениях/дополнениях в программе не пришлось все заново переделывать.
8)
Ответить

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