Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Форум Picbasic.ru » Электроника » Проблемы » Просто на заметку (бился долго но нашел как решить проблему.)
Просто на заметку
tolyan249 Дата: Пт, 01.10.2010, 17:16  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 166
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Начнем сначала.
Сломалась стиральная машинка автомат,блок управления,решил сделать свой,решил и сделал на PIC16F877,управление двигателем через микросхему TDA1085C которая спецально для таких двигателей,управляеться она с пик контроллера через цап от 0..5в.все сделал блок заработал на столе бес проблем.
но еще ,на включение насоса,клапанов залива воды поставил реле 12в .Проблема возникла когда подключил к машинке все это хозяйства. при включении особбенно клапанов воды пик уходил на сброс,т.е не зависал а именно сбрасывался. понятно что при включении или отключении возникает индукция и эта помеха сбрасывала контроллер.
на питание контроллера поставил кучу фильтров от старых блоков питания от компьютеров,и емкостей кучу ни чего не помогало. Вот теперь пришли к самому главному. Проблему решил так схема прилагаеться. И все заработало,искрил перед контроллером рядом см 10-15,проблем не было со сбросом.
видать диод выпремляет помеху и получаеться там постоянка опять.

на вход MCLR через диод шотки и резистор запитал на питание +5в и поставил стабилитрон если помеха бедет больше 5в.

Просто может кому поможет. я бился 3-недели пока исправил это. а стирать то нужно,в ручную как то не годиться в наше время. Спасибо всем.

Прикрепления: 1058836.jpg(12Kb)


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Пт, 01.10.2010, 17:20
ЯНДЕКС Дата: 01.10.2010
demanik Дата: Пт, 01.10.2010, 17:29  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (tolyan249)
при включении особбенно клапанов воды пик уходил на сброс

Еще рекомендуют ставить кондер 10n с mclr на корпус.


Попробуй всё и вся... может быть пол...

tolyan249 Дата: Пт, 01.10.2010, 17:34  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 166
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Ставил толку не было ни какого.
Вот схема моей машинки.
а счас по барабану есть там емкость нету ее все ОК.
Прикрепления: 7775342.gif(101Kb) · 3747637.gif(14Kb)


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Пт, 01.10.2010, 17:46
ADMIN Дата: Пт, 01.10.2010, 18:46  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1110
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Толян! Давай пограмотней? Хорошо?
tolyan249 Дата: Пт, 01.10.2010, 19:04  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 166
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Ясно.

если знаешь,помоги.
retas Дата: Пт, 01.10.2010, 22:16  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 462
Репутация: 10   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Да, не позавидуешь хотя повезло в том что не пришлось переделывать плату. Интересно, при её
разводке вы обдумывали возможность пролезания помех по каким либо цепям?

Где то видел схему, которой питание подаётся через диод (вроде автор его поставил из за помех).
Если ваш МК запитать через диод (а не только MCLR), интересно, получится ли тот же положительный
эффект?

Есть возможность и на столе прикинуть возможности схемы противостоять помехам. Для этого один
провод вашего блока питания суётся в розетку а второй присоединяется к наждаку. Вторым проводом
с розетки водите по наждаку и получаете питание своей схемы букетом помех (ОСТОРОЖНО!!!!!!!!!!).


Новый подход к питанию потребителей переменного тока: http://ekolaif.ucoz.ru
tolyan249 Дата: Сб, 02.10.2010, 04:22  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 166
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

питание микроконтроллера стандартное, трансформатор, диодный мост,емкость 4700мкфх25в потом стабилизатор 15в,емкость 2200мкф,затем стабилизатор 12в,емкость 2200мкф,затем 5в стабилизатор,емкость 4700мкф. ну и 0,1мкф на сам контроллер, и так далее. Вся проблема была именно изза включении магнитного клапана. экспереметировал так стоит мой блок управления,включаю просто реле на 220в и давай его включать выключать чем чаще тем лучше все у меня,контроллер сбрасывался при первом включении или выключении реле на 220в,создаю искровой разряд или помеху. после переделки именно контроллнр сбрасывался,все как рукой сняло. все работает прекрасно. просто статей от защиты помех очень много,от переделки монтажа и разводки печатки до закрытия все в железный ящик и заземлить. но мне помогло это. вот вам и выложил тоже может поможет при работе с индуктивной нагрузкой на 220в.
Да еще забыл общий питания микроконтроллера и общий 0(ноль)-220 вместе т.е все общее и контроллер и 220.
в схеме которую привел на управление двигателем,стоит симистор BT139 ,не развязжешь его ни как. вот и появилось что 220 и питание блока общий вместе.


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Сб, 02.10.2010, 04:27
deskjet Дата: Сб, 02.10.2010, 07:29  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 151
Репутация: 5   ±
Замечания:   ±
На сайте с 20.06.2009

Статус: Offline

По моему стабилитрон лучше заменить на цепочку из последовательно соединенных диодов (штук 6-7) так как стабилитроны -
штука довольно медленная и высокочастотная составляющая помехи может все же пролезть.
А стандартные схемы сброса из даташита микрочипа на контроллер не помогли?


За 20 8 дней ни одного сгоревшего микроконтроллера.
PIC12, PIC16, PIC18, ATtiny, ATmega, STM8, STM32, MSP430
tolyan249 Дата: Вс, 03.10.2010, 10:14  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 166
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Нет,защита помогла только такая.

если знаешь,помоги.
retas Дата: Вс, 03.10.2010, 13:24  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 462
Репутация: 10   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

У вас, только, получается трансформатор лишьним ибо гальванически схема связанна с сетью.

Новый подход к питанию потребителей переменного тока: http://ekolaif.ucoz.ru
Andriy76 Дата: Вс, 03.10.2010, 15:45  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 239
Репутация: 10   ±
Замечания:   ±
На сайте с 06.04.2010

Статус: Offline

Практически во всех схемах сброс через резистор соеденяеться на + 5 в . А он у Вас висел в воздухе и возможно ловил помеху . По применению ТТЛ и КМОП логики рекомендовалось входа соеденять на плюс или минус . Не даром в разных шинах применяться подтягивающие резисторы .
tolyan249 Дата: Пн, 04.10.2010, 16:11  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 166
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

у меня сразу был резистор подтянут просто к +5в без диода,стандартная схема резистор и емкость 0,1мкф на землю.
вот с такой схемой,у меня и сбрасывался контроллер. но никак резистор не висел в воздухе. после того как собрал схему которая выше. Проблема исчезла сразу.

Да схема связана с сетью по нулю. ни как не переделаешь,смотрите схему управление двигателем. она выше.
я рад бы развязаться с сетью но ни как не получится.

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


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Пн, 04.10.2010, 16:18
mikhail09p Дата: Пн, 04.10.2010, 23:27  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 507
Репутация: 11   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Интересный проэкт. Хотелось бы посмотреть.
Dmitry Дата: Пн, 04.10.2010, 23:28  |                                                                                                                Сообщение # 14
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 161
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Quote (tolyan249)
Да схема связана с сетью по нулю. ни как не переделаешь,смотрите схему управление двигателем. она выше. я рад бы развязаться с сетью но ни как не получится.

А по моему никаких проблем. Оптопару на выход ШИМ ПИКа вместо резисторного ЦАПа, транзистор оптопары через RC будет формировать те же 0-5 В для подачи на TDA1085. С таходатчика в ПИК еще проще - просто оптопару. А то схема связана с нулем сети только пока TDA-шка цела. А стрельнет - здравствуй фаза. Кнопки-то хоть пластмассовые, а то помещение наверное, влажное все-таки...
tolyan249 Дата: Вт, 05.10.2010, 04:39  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 166
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

исходник на протоне.


Declare SHOW_SYSTEM_VARIABLES = OFF ' При симуляции в Proteus не показывать внутренние переменные
Declare FSR_CONTEXT_SAVE = OFF ' Не заботиться о сохранении содержимого регистра FSR
Declare Reminders = OFF ' Выключить напоминания компилятора
Declare Warnings = OFF ' Выключить предупреждения компилятора
'Declare OPTIMISER_LEVEL 4 ' Включить оптимизацию программы
'Declare BOOTLOADER = OFF ' Выключить загрузчик

;-------------------------- Общие настройки------------------------------------

Device = 16F877 ' Используемый микроконтроллер
Xtal = 4 ' Частота осциллятора 4 МГц

'-------------------------- Конфигурация программирования --------------------

;Config CP_OFF, DEBUG_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_OFF, WDT_OFF, XT_OSC

'-------------------------- Настройки портов ---------------------------------

Declare PortB_Pullups = OFF ' Включить подтягивающие резисторы на PORTB
Declare All_Digital = OFF ' Установить все порты цифровыми входами/выходами

'---Настройки подключения ЖКИ---

Declare LCD_Type ALPHA
Declare LCD_DTPin PORTB.4
Declare LCD_ENPin PORTB.3
Declare LCD_RSPin PORTB.2
Declare LCD_Interface 4
Declare LCD_CommandUs 2000
Declare LCD_DataUs 50
Declare LCD_Lines 2

;--Настройки АЦП--
Declare Adin_Res 10 ;Разрядность результата преобразования АЦП
Declare Adin_Tad FRC ;Источник тактирования АЦП
Declare Adin_Stime 100

'--Определение назначения каналов портов--

TRISA = %11111111 ' Сделать канал PORTA входом
TRISE = %00000111 ' Сделать канал porte входом для кнопок
TRISC = %00000000 ' Сделать каналы PORTС вЫходами
TRISD = %00000000 ' Сделать каналы PORTD вЫходами
TRISB = %00000010 ' Сделать каналы PORTВ вЫходами для LCD а PORTB.1-Входом для термодатчика

Dim tim2 As Word
Dim tim3 As Word
Dim tim4 As Word
Dim tim5 As Word
Dim tim6 As Word
Dim tim7 As Word
Dim tim8 As Word
Dim value As Word
Dim tim9 As Word
Dim tim10 As Word
Dim tim11 As Word
Dim tim12 As Word
Dim tim13 As Word
Dim tim14 As Word
Dim tim15 As Word

Dim r2 As Word
Dim r3 As Word
Dim r4 As Word
Dim r5 As Word
Dim r6 As Word
Dim r7 As Word
Dim r8 As Word
Dim r9 As Word
Dim r10 As Word
Dim r11 As Word
Dim r12 As Word
Dim r13 As Word
Dim r14 As Word
Dim skordvig As Word

'==========================================================

'========== ОПИСАНИЕ ПЕРЕМЕННЫХ ДЛЯ ТЕМПЕРАТУРЫ===============================
Dim temperature As Byte ' Температура на улице
Dim count_remain As Byte ' Остаток счета
Dim count_per_c As Byte ' Счет C
Dim TempC As Byte
Dim TemperC As Byte
Dim Temp_read As Word
Dim Sign As Word
Dim command As Word
DQ VAR PORTB.1 ' Подключение DS 1820

'=================Просто перемеррые============================================
'Dim value As Word
'D var Word
Dim B As Byte
Dim c As Byte
Dim A As Byte
Dim I As Byte
Dim J As Byte
Dim K As Byte
Dim ACP As Byte
Dim T1 As Byte
Dim dtk As Byte
Dim dtk1 As Byte
Dim e As Byte
Dim g As Byte
Dim l As Byte
Dim m As Byte
Dim prd As Byte
Dim flag1 As Byte
Dim time1 As Word
Dim time2 As Word
Dim temperatur1 As Word
Dim temperatur2 As Word
Dim rez As Word
Dim rez1 As Word
Dim rez2 As Word
Dim ttt As Word
Dim tm As Word
PORTC=0
PORTD=0
PORTB=0
skordvig=0'определение скорости двигателя
tim3=0
tim5=0
tim7=0
tim6=0
r2=0
rez=0
rez1=0
rez2=0
tm=40
;-----------------------------------------------------------

;GoSub termul
;GoSub termul

lcdout $fe,1
Print At 1 ,1,$A8,$70,$6F,$B2,$61,$20,$B8,$BD,$E3,$B8,$BA,$61,$BF,$6F,$70,$61
Print At 2 ,1,$31,$32,$33,$34,$35,$36,$37,$38,$39,$30
DelayMS 10000

;GoSub writeeeprom
GoSub readeeprom
If rez>5 Then rez=0
If rez1>4 Then rez1=0
If rez2>6 Then rez2=0
If tm>90 Then tm=0
r2=rez1
tim2=rez

lcdout $fe,1
Print At 1 ,1,Dec rez,"-",Dec rez1,"-",Dec rez2
Print $FE,$40,$06,$09,$09,$06,$00,$00,$00,$00 'записать символ градуса и показывать его когда вызываем цифру 8
DelayMS 5000
If rez=1 Then GoSub rezim1
If rez=2 Then GoSub rezim2
If rez=3 Then GoSub rezim3
If rez=4 Then GoSub rezim4
If rez=5 Then GoSub rezim5

If rez2=1 Then GoTo zalivvodi
If rez2=2 Then GoTo baraban1
If rez2=3 Then GoTo ctirka1
If rez2=4 Then GoTo slivvodi
If rez2=5 Then GoTo poloskanie
If rez2=6 Then GoTo otzim

'*******************************************************************************
' Основной цикл программы

'********************************************************************************
loop:
DelayMS 500
If PORTA.2=1 Then GoTo dverka
DelayMS 1000
GoTo rezimlcd
GoTo loop
'=================================================================================

primdvig:
GoSub stopdvig
PORTC.3=0'включить прямой ход двигателя
DelayMS 2000
PORTC.2=1'включить питание на двигатель
DelayMS 2000
PORTD=skordvig'управление скоростью вращения (10)
Return

reversdvig:
GoSub stopdvig
PORTC.3=1'включить реверс ход двигателя
DelayMS 2000
PORTC.2=1'включить питание на двигатель
DelayMS 2000
PORTD=skordvig'управление скоростью вращения
Return





stopdvig:
DelayMS 2000
PORTD=0 'управление скоростью=0
DelayMS 5000
PORTC.2=0'отключить питание двигателя
DelayMS 2000
PORTC.3=0'включить прямой ход двигателя
Return

klapanvodivkl:
PORTC.0=1 'включить клапан залива воды 1
Return


klapanvodiotkl:
PORTC.0=0 'выключить клапан залива воды 1
Return

klapanvodivkl2:
PORTC.1=1 'включить клапан залива воды 2
Return


klapanvodiotkl2:
PORTC.1=0 'выключить клапан залива воды 2
Return

dverka:
If PORTA.2=0 Then GoTo loop
GoSub dvlcd
DelayMS 500
GoTo dverka

dvlcd:
Print At 1 ,1,$E0,$42,$45,$50,$62,$20,$48,$45,$20,$A4,$41,$4B,$50,$AE,$54,$41
Print At 2 ,1,$A4,$41,$4B,$50,$4F,$A6,$54,$45,$20,$E0,$42,$45,$50,$4B,$A9
DelayMS 500
Return

rezimlcd:
lcdout $fe,1
Print At 1 ,1,$B3,$C3,$B2,$65,$70,$B8,$20,$70,$65,$B6,$B8,$BC
DelayMS 2000
tim2=1
GoTo viborrezim

;-------------------------------------------
writeeeprom:
EWrite 1,[rez,rez1,rez2,tm]
Return

readeeprom:
rez= ERead 1
rez1=ERead 3
rez2=ERead 5
tm=ERead 7
Return
;----------------------------------------------

Добавлено (05.10.2010, 04.35.23)
---------------------------------------------
viborrezim:;установка режима
If PORTE.2=0 Then usttemper
If PORTE.0=0 Then tim2=tim2+1
If tim2>5 Then tim2=1
If PORTE.1=0 Then tim2=tim2-1
If tim2<1 Then tim2=5
lcdout $fe,1
Print At 1 ,1,$50,$45,$A3,$A5,$4D,"-",Dec tim2
DelayMS 500
GoTo viborrezim

usttemper: ;установка температуры
If PORTE.0=0 Then tm=tm+10
If tm>90 Then tm=10
If PORTE.1=0 Then tm=tm-10
If tm<1 Then tm=90
lcdout $fe,1
Print At 1 ,1,$A9,$63,$BF,$61,$BD,$6F,$B3,$BA,$61
Print At 2 ,1,$BF,$65,$BC,$BE,$65,$70,$61,$BF,$79,$70,$C3," +",Dec tm
DelayMS 500
If PORTE.2=0 Then vipolrezim
GoTo usttemper

vipolrezim:
If tim2=1 Then GoTo rezim1
If tim2=2 Then GoTo rezim2
If tim2=3 Then GoTo rezim3
If tim2=4 Then GoTo rezim4
If tim2=5 Then GoTo rezim5
'If tim2=6 Then GoTo rezim6
'If tim2=7 Then GoTo rezim7
'If tim2=8 Then GoTo rezim8
'If tim2=9 Then GoTo rezim9
'If tim2=10 Then GoTo rezim10
GoTo vipolrezim
'==========================================================================================
'1-режим -сильно грязное белое белье ,предварительная стирка при 45 градусов,стирка при 90-165минут
'2-режим ------------------------------------------------------------------- стирка при 90-145минут
'3-режим ,стирка 60 градусов 130минут
'4-режим стирка 40 градусов 90 минут
'5-режим 60 100 минут
'6-режим 30 60
'7 -режим 30 30
'===================================================================================================

rezim1:
GoSub termul
GoSub termul
PORTC.6=1'заблокировать дверь
time1=60'время стирки в секундах
time2=30 'количество раз сделать процедуру
skordvig=45'скорость двигателя
PORTC.4=1'включить светодиод режима
If rez=0 Then GoTo zalivvodi
Return
'---------------------------------------------------------------------------------------------

rezim2:
GoSub termul
GoSub termul
PORTC.6=1'заблокировать дверь
time1=40'время стирки в секундах
time2=20 'количество раз сделать процедуру
skordvig=30
PORTC.4=1'включить светодиод режима
If rez=0 Then GoTo zalivvodi
Return

rezim3:
GoSub termul
GoSub termul
PORTC.6=1'заблокировать дверь
time1=20'время стирки в секундах
time2=20 'количество раз сделать процедуру
skordvig=25
PORTC.4=1'включить светодиод режима
If rez=0 Then GoTo zalivvodi
Return

rezim4:
GoSub termul
GoSub termul
PORTC.6=1'заблокировать дверь
time1=15'время стирки в секундах
time2=20 'количество раз сделать процедуру
skordvig=15
PORTC.4=1'включить светодиод режима
If rez=0 Then GoTo zalivvodi
Return

rezim5:
GoSub termul
DelayMS 1000
GoSub termul
PORTC.6=1'заблокировать дверь
time1=10'время стирки в секундах
time2=20 'количество раз сделать процедуру
skordvig=10
PORTC.4=1'включить светодиод режима
If rez=0 Then GoTo zalivvodi
Return

rezim6:
rezim7:
rezim8:
rezim9:
rezim10:
'====================================================================== ====================





zalivvodi:'процедура залива воды
rez=tim2
rez1=r2
rez2=1
GoSub writeeeprom
DelayMS 1000
If r2=0 Then GoSub klapanvodivkl
If r2=1 Then GoSub klapanvodivkl2
If r2=2 Then GoSub klapanvodivkl
lcdout $fe,1
If PORTA.0=1 Then Print At 1 ,1,$A4,$61,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3," ",Dec tim3
If PORTA.0=1 Then tim3=tim3+1
If tim3>59 Then GoTo netzalivvodi'если по истечении 3-минут нет уровня воды уходим на процедуру тамер времини ожидания для повтора

If PORTA.0=0 Then
If r2=0 Then GoSub klapanvodiotkl
If r2=1 Then GoSub klapanvodiotkl2
If r2=2 Then GoSub klapanvodiotkl
GoTo baraban1
EndIf
GoTo zalivvodi


netzalivvodi: 'процедура ждем время 5-минут и отправляемся на новую попытку залить воды
DelayMS 1000
tim4=tim4+1
If r2=0 Then GoSub klapanvodiotkl
If r2=1 Then GoSub klapanvodiotkl2
If r2=2 Then GoSub klapanvodiotkl
GoSub oshibka_uroven_vodi
Print At 2 ,1,$A3,$E0,$45,$4D,$20,$42,$4F,$E0,$A9,$20," ",Dec tim4
If tim4=300 Then
tim3=0
tim4=0
GoTo zalivvodi
EndIf
GoTo netzalivvodi




Добавлено (05.10.2010, 04.37.27)
---------------------------------------------
baraban1:'процедура предварительная стирка,полоскание с доливом воды
rez=tim2
rez1=r2
rez2=2
GoSub writeeeprom
DelayMS 1000
tim5=tim5+1
r3=r3+1
lcdout $fe,1
If r2=0 Then
Print At 1 ,1,$A8,$70,$65,$E3,$B3,$61,$70,$B8,$BF,$65,$BB,$C4,$BD,$61,$C7
Print At 2 ,1,$63,$BF,$B8,$70,$BA,$61,"-1=",Dec r3," ",Sign,Dec temperature 'Придварительная стирка 1
EndIf

If r2=1 Then
Print At 1 ,1,$A8,$70,$65,$E3,$B3,$61,$70,$B8,$BF,$65,$BB,$C4,$BD,$61,$C7
Print At 2 ,1,$63,$BF,$B8,$70,$BA,$61,"-2=",Dec r3," ",Sign,Dec temperature 'Прндварительная стирка 2
EndIf

If r2=2 Then
Print At 1 ,1,$A8,$70,$65,$E3,$B3,$61,$70,$B8,$BF,$65,$BB,$C4,$BD,$6F,$65
Print At 2 ,1,$BE,$6F,$BB,$6F,$63,$BA,$61,$BD,$B8,$65,"-1=",Dec r3 'Предварительное полоскание 1
EndIf

If r2=3 Then
Print At 1 ,1,$A8,$70,$65,$E3,$B3,$61,$70,$B8,$BF,$65,$BB,$C4,$BD,$6F,$65
Print At 2 ,1,$BE,$6F,$BB,$6F,$63,$BA,$61,$BD,$B8,$65,"-2=",Dec r3 'Предварительное полоскание 2
EndIf

If tim5=1 Then GoSub primdvig
If tim5=time1 Then GoSub reversdvig

If PORTA.0=1 Then PORTC.0=1'если датчик уровня воды не включен включить клапан заливы воды клапан воды
If PORTA.0=0 Then PORTC.0=0 'если датчик уровня воды включен значит уровень воды в норме отключить клапан залива воды

If r2=0 Or r2=1 And tim5=1 And PORTA.0=0 Then PORTC.7=1'включение тены
GoSub termul
If temperature>(tm /2) And Sign="+" Then PORTC.7=0 'отключение тены по температуре
If r2=2 Or r2=3 Then PORTC.7=0

If tim5=(time1*2) Then
tim6=tim6+1
If tim6=time2 Then 'tim6 время предварительной стирки,полоскания
tim6=0
tim5=0
r3=0
GoSub stopdvig 'остановка двигателя
If PORTA.0=1 Then
GoSub oshibka_uroven_vodi
GoSub zalivvodi
EndIf
If r2=0 Then GoTo ctirka1
If r2=1 Then GoTo ctirka1
If r2=2 Then GoTo poloskanie
If r2=3 Then GoTo poloskanie
EndIf
tim5=0
EndIf
GoTo baraban1



ctirka1: 'основная стирка 1
rez=tim2
rez1=r2
rez2=3
GoSub writeeeprom
DelayMS 1000
tim8=tim8+1
lcdout $fe,1
If r2=0 Then Print At 1 ,1,$63,$BF,$B8,$70,$BA,$61,"-1=",Dec r4," ",Sign,Dec temperature
If r2=1 Then Print At 1 ,1,$63,$BF,$B8,$70,$BA,$61,"-2=",Dec r4," ",Sign,Dec temperature

If tim8=1 Then GoSub primdvig
If tim8=time1 Then GoSub reversdvig

If r2=0 Or r2=1 And tim5=1 And PORTA.0=0 Then PORTC.7=1'включение тены
GoSub termul
If temperature>tm And Sign="+" Then PORTC.7=0 'отключение тены по температуре
If r2=2 Or r2=3 Then PORTC.7=0

r4=r4+1
If tim8=(time1*2) Then
tim9=tim9+1
If tim9=time2 Then 'если вышло время закончить стирку и уйти на слив воды
tim9=0
tim8=0
r4=0
GoSub stopdvig 'остановка двигателя
GoTo slivvodi 'слив воды
EndIf
tim8=0
EndIf
GoTo ctirka1




slivvodi: ' процедура слива воды
rez=tim2
rez1=r2
rez2=4
GoSub writeeeprom
PORTC.7=0
DelayMS 1000
tim10=tim10+1
lcdout $fe,1
If r2=0 Then
Print At 1 ,1,$63,$BF,$B8,$70,$BA,$61,"-1"
Print At 2 ,1,$43,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3,"=",Dec tim10 'Стирка 1
EndIf

If r2=1 Then
Print At 1 ,1,$63,$BF,$B8,$70,$BA,$61,"-2"
Print At 2 ,1,$43,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3,"=",Dec tim10 'Стирка 2

EndIf

If r2=2 Then
Print At 1 ,1,$A8,$6F,$BB,$6F,$63,$BA,$61,$BD,$B8,$65,"-1"
Print At 2 ,1,$63,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3,"=",Dec tim10 'Полоскание 1

EndIf

If r2=3 Then
Print At 1 ,1,$A8,$6F,$BB,$6F,$63,$BA,$61,$BD,$B8,$65,"-2"
Print At 2 ,1,$63,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3,"=",Dec tim10 'Полоскание 2
EndIf

If tim10=1 Then
GoSub primdvig
PORTC.5=1'включить насос
DelayMS 1000
EndIf
'---------------увелечение скорости барабана------------------
If tim10=10 Then PORTD=15
If tim10=20 Then PORTD=30
If tim10=30 Then PORTD=50
If tim10=40 Then PORTD=100
'-------------------уменьшение скорости барабана----------------
If tim10=60 Then PORTD=50
If tim10=70 Then PORTD=30
If tim10=80 Then PORTD=15
If tim10=90 Then PORTD=10
'---------------------------------------------------------------

If tim10=120 Then
GoSub stopdvig
r2=r2+1
tim10=0
PORTC.5=0'выключить насос
If r2=1 Then GoTo zalivvodi
If r2=2 Then GoTo zalivvodi
If r2=3 Then GoTo zalivvodi
If r2=4 Then GoTo otzim
EndIf
GoTo slivvodi

Добавлено (05.10.2010, 04.39.02)
---------------------------------------------
slivvodi: ' процедура слива воды
rez=tim2
rez1=r2
rez2=4
GoSub writeeeprom
PORTC.7=0
DelayMS 1000
tim10=tim10+1
lcdout $fe,1
If r2=0 Then
Print At 1 ,1,$63,$BF,$B8,$70,$BA,$61,"-1"
Print At 2 ,1,$43,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3,"=",Dec tim10 'Стирка 1
EndIf

If r2=1 Then
Print At 1 ,1,$63,$BF,$B8,$70,$BA,$61,"-2"
Print At 2 ,1,$43,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3,"=",Dec tim10 'Стирка 2

EndIf

If r2=2 Then
Print At 1 ,1,$A8,$6F,$BB,$6F,$63,$BA,$61,$BD,$B8,$65,"-1"
Print At 2 ,1,$63,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3,"=",Dec tim10 'Полоскание 1

EndIf

If r2=3 Then
Print At 1 ,1,$A8,$6F,$BB,$6F,$63,$BA,$61,$BD,$B8,$65,"-2"
Print At 2 ,1,$63,$BB,$B8,$B3,$20,$B3,$6F,$E3,$C3,"=",Dec tim10 'Полоскание 2
EndIf

If tim10=1 Then
GoSub primdvig
PORTC.5=1'включить насос
DelayMS 1000
EndIf
'---------------увелечение скорости барабана------------------
If tim10=10 Then PORTD=15
If tim10=20 Then PORTD=30
If tim10=30 Then PORTD=50
If tim10=40 Then PORTD=100
'-------------------уменьшение скорости барабана----------------
If tim10=60 Then PORTD=50
If tim10=70 Then PORTD=30
If tim10=80 Then PORTD=15
If tim10=90 Then PORTD=10
'---------------------------------------------------------------

If tim10=120 Then
GoSub stopdvig
r2=r2+1
tim10=0
PORTC.5=0'выключить насос
If r2=1 Then GoTo zalivvodi
If r2=2 Then GoTo zalivvodi
If r2=3 Then GoTo zalivvodi
If r2=4 Then GoTo otzim
EndIf
GoTo slivvodi

poloskanie:'процедура полоскания
rez=tim2
rez1=r2
rez2=5
GoSub writeeeprom
lcdout $fe,1
If r2=2 Then Print At 1 ,1,$A8,$6F,$BB,$6F,$63,$BA,$61,$BD,$B8,$65,"-1=",Dec r5 'Полоскание 1
If r2=3 Then Print At 1 ,1,$A8,$6F,$BB,$6F,$63,$BA,$61,$BD,$B8,$65,"-2=",Dec r5 'Полоскание 2


DelayMS 1000
tim11=tim11+1
r5=r5+1
skordvig=25;скорость двигателя
If tim11=1 Then GoSub primdvig
If tim11=time1 Then GoSub reversdvig

If tim11=(time1*2) Then
tim12=tim12+1
GoSub stopdvig
If tim12=time2 Then
r5=0
tim11=0
tim12=0
GoTo slivvodi'если вышло время 5-минут уйти на слив воды
EndIf
tim11=0
EndIf
GoTo poloskanie

otzim: ;процедура отжима
rez=tim2
rez1=r2
rez2=6
GoSub writeeeprom
DelayMS 1000
lcdout $fe,1
Print At 1 ,1,$4F,$BF,$B6,$B8,$BC," ",Dec r6
tim13=tim13+1
r6=r6+1

If tim13=1 Then
skordvig=0;скорость двигателя
GoSub primdvig
PORTC.5=1'включить насос
EndIf

If tim13=1 Then PORTD=10
If tim13=5 Then PORTD=15
If tim13=10 Then PORTD=25
If tim13=15 Then PORTD=35
If tim13=20 Then PORTD=45
If tim13=30 Then PORTD=50
If tim13=60 Then PORTD=100

If PORTA.3=1 Then
If tim13=90 Then PORTD=120
If tim13=120 Then PORTD=160
If tim13=140 Then PORTD=180
If tim13=160 Then PORTD=200
EndIf

If PORTA.3=1 Then
If tim13=240 Then PORTD=180
If tim13=260 Then PORTD=160
If tim13=280 Then PORTD=140
If tim13=300 Then PORTD=120
If tim13=320 Then PORTD=100
If tim13=340 Then PORTD=50
If tim13=360 Then PORTD=25
If tim13=380 Then PORTD=10
Else
If tim13=80 Then PORTD=80
If tim13=100 Then PORTD=60
If tim13=120 Then PORTD=40
If tim13=140 Then PORTD=30
If tim13=160 Then PORTD=20
If tim13=180 Then PORTD=10
EndIf

If PORTA.3=1 Then
ttt=440
Else
ttt=210
EndIf

If tim13=ttt Then
tim13=5
tim14=tim14+1
If tim14=tim2 Then
tim14=0
tim13=0
GoSub stopdvig
PORTC=0
rez=0
rez1=0
rez2=0
GoSub writeeeprom
GoTo konecrezima
EndIf
EndIf
GoTo otzim

konecrezima:
Clear
PORTC.4=0
lcdout $fe,1
Print At 1 ,1,$43,$BF,$B8,$70,$BA,$61,$20,$B7,$61,$BA,$6F,$BD,$C0,$65,$BD,$61
Print At 2 ,1,$BE,$6F,$BB,$BD,$6F,$63,$BF,$C4,$C6
DelayMS 500
PORTC.4=1
DelayMS 500
GoTo konecrezima






'======================Вывод на дисплей данных ошибок=======================================
oshibka_uroven_vodi:
Print At 1 ,1,$4F,$AC,$A5,$A0,$4B,$41,$20,$48,$45,$54,$20,$42,$4F,$E0,$AE
Return





'============================================================================================




'====================Вывод температуры на LCD=======================================
temperatura:
'lcdout $FE,$40,$0C,$12,$12,$0C,$00,$00,$00,$00 ' записать в ОЗУ LCD символ с кодом 0 - градус
lcdout $fe,1
lcdout 1,$48,$41,$20,$A9,$A7,$A5,$E1,$45,$3A,$20,Sign, Dec temperature
'lcdout $fe,$C0
'lcdout 1,$E0,$42,$A5,$A1,$41,$54,$45,$A7,$62,$3A,Sign1, Dec temperature1
Return

'*********************************************************************************
' * измерение температуры на улице *
'*********************************************************************************

termul:
GoSub init1820 ' Init the DS1820
command = $cc ' Issue Skip ROM command
GoSub write1820
command = $44 ' Start temperature conversion
GoSub write1820
DelayUS 10 ' Wait 2 seconds for conversion to complete
GoSub init1820 ' Do another init
command = $cc ' Issue Skip ROM command
GoSub write1820
command = $be ' Read the temperature
GoSub write1820
DelayMS 10
GoSub read1820
GoSub Temp_calc ' Йдемо рахувати температуру
Return

Temp_calc: 'Процедура перетворення температури
'******************************************************************************************************
If Temp_read.11 = 1 Then 'Температура мінусова
Sign = "-"
Temp_read = ~Temp_read + 1
Else
Sign = "+"
EndIf
temperature = (Temp_read & $0FF0) >> 4
Return

'=======================================================================
' Обробка Температури
'=======================================================================

' Initialize DS1820 and check for presence
init1820:

Low dq ' Set the data pin low to init
DelayUS 500 ' Wait > 480us
Input dq ' Release data pin (set to input for high)
DelayUS 100 ' Wait > 60us
If dq = 1 Then

DelayMS 500

Return ' Try again
EndIf
DelayUS 400 ' Wait for end of presence pulse

Return

' Write "command" byte to the DS1820
write1820:

For I = 1 To 8 ' 8 bits to a byte
If command.0 = 0 Then
GoSub write0 ' Write a 0 bit
Else
GoSub write1 ' Write a 1 bit
EndIf
command = command >> 1 ' Shift to next bit
Next I

Return

' Write a 0 bit to the DS1820
write0:
Low dq
DelayUS 60 ' Low for > 60us for 0
Input dq ' Release data pin (set to input for high)
Return

' Write a 1 bit to the DS1820
write1:
Low dq ' Low for < 15us for 1
@ nop ' Delay 1us at 4MHz
Input dq ' Release data pin (set to input for high)
DelayUS 60 ' Use up rest of time slot
Return

' Read temperature from the DS1820
read1820:


For I = 1 To 16 ' 16 bits to a word
Temp_read = Temp_read >> 1 ' Shift down bits
GoSub readbit ' Get the bit to the top of temp
Next I

Return

' Read a bit from the DS1820
readbit:
Temp_read.15 = 1 ' Preset read bit to 1
Low dq ' Start the time slot
@ nop ' Delay 1us at 4MHz
Input dq ' Release data pin (set to input for high)
If dq = 0 Then
Temp_read.15 = 0 ' Set bit to 0
EndIf
DelayUS 60 ' Wait out rest of time slot
Return
'===================================================================================================

End


если знаешь,помоги.
Форум Picbasic.ru » Электроника » Проблемы » Просто на заметку (бился долго но нашел как решить проблему.)
Страница 1 из 212»
Поиск: