Обсуждаем контроллеры компании Atmel.
Ответить

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

Пн мар 06, 2017 15:54:35

Два поплавка в баке, первый - бак пуст, второй - полон и два в колодце, первый - колодец пуст, второй колодец полон. Если в колодце кончается вода, то насос прекращает качать, как набирается, опять включается и качает пока не отработает датчик - бак полон или пока не опустошится колодец.
В протеус все работает, а когда выставляю во фьюзах внешний генератор на 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

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

Пн мар 06, 2017 16:42:04

У Вас устройство "в железе" есть?
Полную схему можно увидеть?
По представленному протеусному уродству я для начала не вижу, где тот самый "внешний генератор", тактирование от которого Вы выставляете фьюзами.

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

Пн мар 06, 2017 16:49:12

igor741986 писал(а):Подскажите пожалуйста, что ему не хватает?
Мне кажется что наоборот - МК здесь лишний, тем более Mega8. :roll: :oops: :facepalm:

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

Пн мар 06, 2017 16:59:09

korob писал(а):Мне кажется что наоборот - МК здесь лишний

В принципе да. Схему с такой логикой можно на нескольких релюшках сделать.
А хочется на МК - на ATtiny2313 можно две такие (работающие независимо друг от друга) схемы сделать плюс управление RGB-светодиодной лентой и еще половина памяти программ останется свободной.

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

Пн мар 06, 2017 17:21:56

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

нарисуйте таблицу истинности и используйте реле. Реле у вас будут в любом случае.

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

Пн мар 06, 2017 18:12:23

Alkul писал(а):У Вас устройство "в железе" есть?
Полную схему можно увидеть?
По представленному протеусному уродству я для начала не вижу, где тот самый "внешний генератор", тактирование от которого Вы выставляете фьюзами.


Схема тактируется внутренним генератором на 8 мгц, с ноги PD0 сигнал идет на релюху через оптопару, с релюхи на насос, все. Если все ноги с PB0 до PB3 свободны, то насос не должен работать, но он работает. Вообще реакции ноль, хоть что с ногами делай, насос качает. Походу с кодом что то не то. Видимо какую то мелочь я упускаю. Может с PD0 не постоянный ток идет, а с частотой из за кода, может в протеусе гасится этот дребезг, а здесь он приводит к тому что питание на релюху идет. Тяжело без осциллографа и опыта в програмировании).

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

Пн мар 06, 2017 18:29:26

Подтяжка входов на "+" включена?

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

Пн мар 06, 2017 18:34:56

AndTer писал(а):Подтяжка входов на "+" включена?

Да. Умеете пугать).

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

Пн мар 06, 2017 18:35:56

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 раз.

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

Пн мар 06, 2017 19:06:00

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
По логике все очень просто и должно работать. Я могу конечно нарисовать схему, но на ней все можно отбросить, Останется один контроллер с ключами на входах и диодом(или вольтметром) на выходе, и это не поменяет картины, диод будет постоянно гореть, не реагируя на сигналы на входе.

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

Пн мар 06, 2017 19:36:40

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

Вот честно - копаться в Вашем коде совершенно нет желания, разбираться, чем "start" отличается от "star" и т.д.
Напишите свою программу вот в таком стиле:

и Вам самому станет понятно, что и как делается в Вашей программе.

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

Вт мар 07, 2017 20:22:00

Спасибо всем тем, кто еще остался человеком и помогает. А кто не хочет помогать, а хочет порисоваться или выдать свою оценку, то мне не понятна ваша мотивация. Не мешайте мне, отвлекая от дела.
Изображение Изображение
Изображение
Изображение
Изображение
Изображение
На входах герконы, еще не подцепил.

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

Ср мар 08, 2017 14:07:44

У меня тут родилась идея сделать это все на одном прерывании и кодовой маске. А то подумаете, что я все бросил и сдался).

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

Чт мар 09, 2017 08:38:14

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

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

Чт мар 09, 2017 10:12:25

BOB51 писал(а):Относительно программы...
Там только прерываний и не хватало!
:)))
Неуж-то стандартный программный опрос раз в 0,01 секунду по быстродействию не устраивает? (и это тоже еще в какой степени заторможено программой делать надо).
:tea:

Меня бы все устраивало), но стандартный опрос не опрашивает или как то некорректно опрашивает, слишком быстро или ему еще какие то условия надо(поэтому я и никогда не понимал электронику, ты не видишь, что там внутри происходит, в данный момент), вот с прерыванием все четко работает. Сигнал1 пришел, на выходе четко сигнал, сигнал2 пришел, на выходе четко сигнала нет. Только надо 4 контакта на прерывания в идеале, это самое простое решение. Атмега2560 в этом плане лучше, да и в ней всего больше мне, как раз на все хватит. А то я хотел Атмеги 8 между собой согласовывать.

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

Чт мар 09, 2017 11:43:20

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

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

Чт мар 09, 2017 12:47:25

BOB51 писал(а):Процедура фильтрации обязательна.
Прерывание в данном случае еще больше проблем вызывать будет.

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

BOB51 писал(а):А для Вашей задачки

Ну чел делает на том что у него есть. Что тини что мега, сути не меняет и никак ни на код ни на устройство не влияет.
Только корпус и цена.

Разбираться в коде не стану. Я ассемблер учил давно) Ещё на КР580 компы были)
Успел забыть и вспоминать не хочу)
На си, такая программа пишется быстро и просто.

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

Чт мар 09, 2017 13:03:59

Да и на ассемблере весьма простой вариант - возможно и поменьше суммарным кодом будет.
Только алгоритм правильный нужен.
Насчет прерываний... Все равно затем антидребезг потребуется - смысл усложнять программу с учетом возможных повторных вызовов прерывания сразу по его исполнению?
:dont_know:

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

Чт мар 09, 2017 14:27:19

BOB51 писал(а):поменьше суммарным кодом будет.

Абсолютно неактуально! 8кб на программку управления насосом?
Да можно даже подрубить float, и все переменные дщтп дщтп сделать)
Зачем тратить время на уменьшение кода и более компактнынй алгоритм, если там места и производительности дял этой задачи стократно больше чем потребуется? А время оно как говорится деньги)

BOB51 писал(а):Насчет прерываний... Все равно затем антидребезг потребуется

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

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

Чт мар 09, 2017 14:35:48

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