Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Готовые конструкции » Басятская чае-кофе наливалка )


Басятская чае-кофе наливалка )

Сообщений 1 страница 12 из 12

1

Вообщем решил я изучать МК и всё остальное + баском путём придумывания чего нибудь и разумеется результат обучения можно будет пощупать и даже попользоваться ). Месяц ушло, долго мучался с деталями, собирал из всего, полевые транзисторы из материнок, релюшки, экранчик еле раздобыл, atmega8 уже была. Вообщем встречайте видео №1, как всё начиналось

После уже проверялось:

И наконец завершалось:

К сожалению в помещении был потом и вся электроника окислилась, сахар с кофе задубел... (((
На всякий случай типа вот такая схема (правда отличается от оригинала, но код я выложил тоже, если кто захочет воплотить это безумие:
http://cs306713.vk.me/v306713961/768c/ngra2fzudH0.jpg

BASCOM код:

Код:
'$regfile = "m8def.dat"
'$crystal = 8000000
'$hwstack = 40
'$swstack = 16
'$framesize = 32



'======Автор: Мишин Евгений Алексеевич, г.Кстово, Нижегородская обл.
'========= RADIOKSTOVO.RU ========
'========= vk.com/ev3658 skype: ev3658 mail: ev3658@yandex.ru
'========ПРИЯТНО ЧАЕКОФЕПИТЬЯ  )))))


$regfile = "m8def.dat"
$crystal = 8000000

$hwstack = 16
$swstack = 64
$framesize = 32





Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb = Output
Config Portd = Output
Config Portc = Input
Config Portb.5 = Input
Config Portb.4 = Input
'Config Portb.3 = Input


'=======================================    ДЛЯ ДИСПЛЕЯ (НЕ ТРОГАТЬ)    ===================================
Declare Sub Nokia_init()
Declare Sub Nokia_clear()
Declare Sub Nokia_text(byval Nokia_x As Byte , Byval Nokia_y As Byte , Byval Nokia_text As String , Byval Nokia_inversion As Byte)

'========= Конфигурация портов дисплея
Nokia_spi_data Alias Portd.2                                'MOSI       - можно задать любую ножку
Nokia_spi_clock Alias Portd.3                               'SCK        - можно задать любую ножку
Nokia_cs Alias Portd.1                                      'CS         - можно задать любую ножку
Display_reset Alias Portd.0                                 'LCD_RESET  - можно задать любую ножку
Display_reset = 1
Nokia_cs = 1

Dim W As Iram Word At 8 Overlay
Dim Nokia_data_9 As Integer

'ницилизация дисплея
Call Nokia_init()





'=======================================  ПЕРЕМЕННЫE ДЛЯ ПРОГРАММЫ ============================
Dim Text As String * 16
Dim Tempr2 As Integer
Dim Tempr3 As Single                                        '-Переменная с температурой в цельсия
Dim Tempr4 As Single                                        '-переменная охлаждения воды (указанное значеие автоматически досигается и наливается)
Dim Davlenie As Integer

Dim Kn As Byte                                              'При нажатии на кнопку, значение 1,2,3,4 и 0, постоянно обнуляется в начале цикла программы
Dim O As Integer                                            ' переменная для циклов for-next и т.п. одноразовая
Dim P As Byte                                               ' рабоая переменая от 0 до 255
Dim M As Byte                                               'хранит номер меню в котором находится.


Dim Doza As Integer                                         'Доза напитка (регулирует задержку в Waitms микросекундах)
Dim Napitok As Byte                                         'Номер напитка 1,2,3 - сбрасывается в 0 при приготовлении (1-сахар,2-кофе,3-чай)
Dim Kran As Byte                                            ' управление краном, 1 - открыть, 2-открыт, 3 - закрыть, 0 - закрыт
Dim Banka As Byte                                           ' Уровень банки
Dim Bankaup As Byte                                         ' Уровень предела низкого уровня банки
Dim Vskipel As Byte                                         'Хранит Информацию "Кипячённая вода или нет, сбрасывается при наливе."
Dim Gogo As Bit

Banka = 23                                                  'МАКСИМАЛЬНЫЙ УРОВЕНЬ БАНКИ
Bankaup = 9                                                 'МИНИМАЛЬНЫЙ УРОВЕНЬ БАНКИ

M = 1
Kn = 0

Call Nokia_clear()
'Waitms 10
Goto Xpom1                                                  ' Отправляемся на программу


$include "Nokia-1100 Library.inc"




'======================================================================================
'=========================================== ТУТ ПОДПРОГРАММЫ ========================
'====== незнаю почему, но в этом компиляторе они не глючат когда пишутся в начале =====
'======================================================================================


'================= СИГНАЛ =======
Signal:
For O = 350 To 950 Step 10                                  'выдааём противный звук  какой нибудь
      If Kn = 0 Then Sound , Portd.4 , 5 , O Else Sound , Portd.4 , Kn , O
   Next O
   Return


'================== НАГРЕВ БАНКИ =====================
Nagrev:
If Tempr4 = 0 Then
   If Kran = 0 Then
      If Davlenie >= Banka Then
         If Tempr3 < 80 Then                                ' ждём или проверям минимальную температуру
         Portd.6 = 1                                        ' ВКЛЮЧАЕМ НАГРЕВАТЕЛЬ
         End If
      End If
   End If
   'If Davlenie >= 18 And Vskipel = 0 Then Portd.6 = 1 'для проверок


End If
If Tempr3 >= 95 And Vskipel = 1 Then                        'Режим подогрева. Отключаем нагрев при достижении температуры кипения
   Portd.6 = 0
End If

'======== КИПЯЧЕНИЕ БАНКИ
If Davlenie <= Bankaup Then Portd.6 = 0                     'Если урвоень воды маленький, выключить нагреватель.
'If Tempr3 = 100 Then Vskipel = 1                           'Тупое включение ВСКИПЕЛ - если заебёт.
If Tempr3 >= 102 And Vskipel = 0 Then                       'Режим кипичения. Отключаем нагрев при достижении температуры кипения
   Portd.6 = 0
   Vskipel = 1
End If


'If Vskipel = 0 And Tempr3 >= 95 Then Vskipel = 1            ' когда заебёт от скачков не наливать )
Return


'=================  Обслуживание БАНКИ!!! ===============
Obsluzhivanie:



'If Kran = 0 Then                                            '

'   If Davlenie <= 10 Then
'      Bankaup = Davlenie
'         Else
'      Bankaup = Davlenie - 5
'   End If
  'If Davlenie = 14 Then Bankaup = 7                         'расчёт кружки (недаёт перелить если в банке больше положенного)
  'If Davlenie >= 12 And Davlenie < 18 Then Bankaup = 7      ' расчёт предела кружки (недаёт перелить от положенного уровня банки)
'End If


If Kran = 2 And Davlenie <= Bankaup Then
   Portd.6 = 0                                              ' ОТКЛЮЧАЕМ НАГРЕВАТЕЛЬ
   Kran = 3
   Gosub Naliv
   Portb.3 = 1                                              'Звонок включить
   Waitms 300
   Portb.3 = 0                                              'Звонок отключить
End If
'If M < 5 Then                                               'долив банки
'   If Davlenie <= 2 Then Portb.1 = 1
'   If Davlenie >= Banka Then Portb.1 = 0
'End If

'========================== ПОМПА ==========================================

                                              'воду доливаем только в первом меню
If Davlenie <= Bankaup Then                                 'доливаем банку
   If Kran = 2 Then
      Kran = 3                                              'закрываем кра
      Gosub Naliv                                           'закрываем кра
      M = 1                                                 'уходим в главное меню
   End If
   Portb.1 = 1                                              ' порт Б №1 помпа
   Vskipel = 3                                              ' указваем, что вода сырая
End If

If M = 1 Then                                               'доливаем банку если мало в первом меню и при включении
   If Davlenie < Banka And Vskipel = 1 Then
      If Kran = 2 Then
         Kran = 3
         Gosub Naliv
      End If
      Portb.1 = 1                                           ' порт Б №1 помпа
      Vskipel = 3
   End If
End If

If Davlenie >= Banka And Vskipel = 3 Then                   ' предельный уровень банки
   Portd.6 = 1                                              ' ВКЛЮЧАЕМ НАГРЕВАТЕЛЬ
   Portb.1 = 0                                              ' отлючаем помпу
   Vskipel = 0
End If

If M <> 1 Then Portb.1 = 0                                  ' порт Б №1 помпа
Return


'================================== ОХЛАЖДЕНИЕ БАНКИ ====================
Ohladit:
If Vskipel = 1 Then
   Portb.2 = 1
     If Tempr4 > 1 And Tempr3 <= Tempr4 Then
      Gosub Signal
      Gosub Naliv
         Portb.3 = 1                                        'Звонок включить
         Waitms 800
         Portb.3 = 0                                        'Звонок отключить
         Tempr4 = 0
      If Pinb.5 = 1 Then Kran = 1
         Gogo = 1

   End If
End If

If Tempr4 = 0 Then Portb.2 = 0
Return


'===================== ПРИГОТОВЛЕНИЕ - НАСЫПАНИЕ ==================
Gotovka:

If Napitok = 1 Then
   Portd.5 = 1                                              'порт дозатора сахара
   Waitms Doza                                              ' длительность насыпания сахара
   Portd.5 = 0                                              'порт дозатора сахара
End If

If Napitok = 2 Then
   Portb.6 = 1                                              'порт дозатора кофе
   Waitms Doza                                              ' длительность насыпания кофе
   Portb.6 = 0                                              'порт дозатора кофе
End If

If Napitok = 3 Then
   Portb.7 = 1                                              'порт дозатора чая
   Waitms Doza                                              ' длительность насыпания чая
   Portb.7 = 0                                              'порт дозатора чая
End If

Kn = 0                                                      ' сброс кнопок в ноль
Napitok = 0                                                 'сброс напитка в ноль
Doza = 0                                                    'сброс дозы в ноль
Return

'======================================= ОПРОС КНОПОК ==============================
'порты кнопок указал в этой подпрограмме, алиасы в среде Bascom иногда глючат.

Knopki:
Kn = 0

If Pinc.4 = 1 Then Kn = 1
If Pinc.3 = 1 Then Kn = 2
If Pinc.2 = 1 Then Kn = 3
If Pinc.1 = 1 Then Kn = 4

If Kn <> 0 Then
   Gosub Signal
   Call Nokia_clear()                                       'очищаем дисплей
   Waitms 300                                               'задержка
End If

Return


Naliv:
'======================= КРАН =======================
If Vskipel = 0 And Kran => 1 Then                           'Не даём открыть кран, пока вода не вскипела
   Kran = 3
   Gogo = 0
   Gosub Signal
End If
If Pinb.4 = 1 And Gogo = 1 Then                             ' Автоналитие (если сработала лягушка на порте Б №4
   If Davlenie > Bankaup And Vskipel = 1 Then
      Kran = 1
   End If
   Gogo = 0
End If


If Kran = 2 Then                                            ' озвучка крана
   P = Davlenie * 10                                        'расчёт частоты звучание, зависит от уровня в банке
   Sound , Portd.4 , 15 , P
End If


If Kran = 3 Then                                            'закрывает кран
      Portd.7 = 0
      Portb.0 = 1
   Waitms 1200
      Portd.7 = 0
      Portb.0 = 0
      Kran = 0
   Waitms 700
End If

If Kran = 1 Then                                            'Открываем кран, управление происходит думя портами
      Portd.6 = 0                                           'отключаем нагреватель   / один порт включает общее питание мотора
      Portd.7 = 1                                           ' второй реверсирует сменой полярности одним реле,
      Portb.0 = 1                                           ' тоесть если реле не включено, кран закроется,
   Waitms 1700                                              ' если реле включено, откроется, но при условии,
      Portd.7 = 0                                           'что другой порт включил питание мотора.
      Portb.0 = 0
      Kran = 2
End If
' можно отключить при надёжном редуктре на кране, алгоритм толча закрытия крана.


'If Kran = 0 And Pinb.5 = 1 Then                             'если не закрылся кран!!!!!!!!!!!!!!! концевик на порте Б №5
'   Portd.7 = 1
'   Portb.0 = 1
'   Waitms 100
'   Portd.7 = 0
'   Portb.0 = 1
'   Waitms 300
'   Kran = 0
'   End If
Kn = 0
Return



'====================================================================================================
'======================================= МЕНЮ в виде ПОДПРОГРАММЫ ===================================
'====================================================================================================




'======================================= МЕНЮ1 ГЛАВНОЕ==============================
Menu1:


Call Nokia_text(1 , 1 , "ВЫБЕРИТЕ НАПИТОК" , 0)
Call Nokia_text(1 , 3 , "1.Чай с сахаром" , 0)
Call Nokia_text(1 , 4 , "2.Чай без сахара" , 0)
Call Nokia_text(1 , 5 , "3.Кофе" , 0)
Call Nokia_text(1 , 6 , "4.Дополнителньо" , 0)
Gosub Knopki
   If Kn = 1 Then
      Napitok = 1                                           ' напиток сахар
      Doza = 2500                                           ' доза 1500 милисек.
      Gosub Gotovka
      Napitok = 3                                           ' напиток чай
      Doza = 1500                                           ' доза 1500 милисек.
      Gosub Gotovka
      M = 4
      Gogo = 1
      End If
   If Kn = 2 Then
      Napitok = 3                                           ' напиток чай
      Doza = 1500                                           ' доза 1500 милисек.
      Gosub Gotovka
      M = 4
      Gogo = 1
      End If
   If Kn = 3 Then
      Napitok = 2                                           ' напиток кофе
      Doza = 1500                                           ' доза 1500 милисек.
      Gosub Gotovka
      Napitok = 1                                           ' напиток сахар
      Doza = 2500                                           ' доза 1500 милисек.
      Gosub Gotovka
      Gogo = 1
      M = 4
      End If
   If Kn = 4 Then
      M = 2
      End If
Kn = 0
'=======================================
Return


Menu2:
'======================================= МЕНЮ 2 Дополнительно ==============================
Call Nokia_text(1 , 1 , "=ДОПОЛНИТЕЛЬНО=" , 0)

Call Nokia_text(1 , 3 , "1.Добавка" , 0)
Call Nokia_text(1 , 4 , "2.Кипяток" , 0)
Call Nokia_text(1 , 5 , "3.Подогрев" , 0)
Call Nokia_text(1 , 6 , "4.Отмена" , 0)

Gosub Knopki
   If Kn = 1 Then
      M = 3
   End If

   If Kn = 2 Then
      M = 4
   End If

   If Kn = 3 Then
      If Tempr3 <= 99 And Davlenie => 5 Then
         Portd.6 = 1
      End If
   End If

   If Kn = 4 Then
      M = 1
   End If
Kn = 0

Return


'======================================= МЕНЮ3 ДОБАВКА=============================
Menu3:


Call Nokia_text(1 , 1 , "====ДОБАВКА!====" , 0)
Call Nokia_text(1 , 3 , "1.+Сахару" , 0)
Call Nokia_text(1 , 4 , "2.+Кофе" , 0)
Call Nokia_text(1 , 5 , "3.+Чай" , 0)
Call Nokia_text(1 , 6 , "4.Назад" , 0)
Gosub Knopki

   If Kn = 1 Then
      Napitok = 1                                           ' напиток сахар
      Doza = 1000                                           ' доза 1500 милисек.
      Gosub Gotovka
      End If
   If Kn = 2 Then
      Napitok = 2                                           ' напиток чай
      Doza = 1000                                           ' доза 1500 милисек.
      Gosub Gotovka
      End If
   If Kn = 3 Then
      Napitok = 3                                           ' напиток кофе
      Doza = 1000                                           ' доза 1500 милисек.
      Gosub Gotovka
      End If
   If Kn = 4 Then
      M = 2
      End If
Kn = 0
'=======================================
Return

'======================================= МЕНЮ 4 НАЛИВ ВОДЫ ==============================
Menu4:


Call Nokia_text(1 , 1 , "=ПРИГОТОВЛЕНИЕ!=" , 0)
If Kran = 2 Then Call Nokia_text(1 , 3 , "1.ЗАКРЫТЬ КРАН!" , 0)
If Kran = 0 Then Call Nokia_text(1 , 3 , "1.НАЛИТЬ КРУЖКУ" , 0)
   P = 0
   If Tempr4 = 60 Then P = 1
   Call Nokia_text(1 , 4 , "2.Охладить до 60" , P)
   Call Nokia_text(1 , 5 , "3.Добавки" , 0)
   Call Nokia_text(1 , 6 , "4.Выход" , 0)
Gosub Knopki
If Gogo = 1 Then Gosub Naliv
   If Kn = 1 And Kran = 0 Then
      Kran = 1
      Gogo = 0
      Tempr4 = 0
      Gosub Naliv
   End If

   If Kn = 1 And Kran = 2 Then
      Kran = 3
      Gosub Naliv
   End If

   If Kn = 2 Then
      If Tempr4 = 60 Then
         Tempr4 = 0
            Else
            Tempr4 = 60
      End If
   End If


   If Kn = 3 Then
      M = 3
      If Kran = 1 Then
         Kran = 1
         Gosub Naliv
         Tempr4 = 0
      End If
   End If

   If Kn = 4 Then
      M = 1
      Tempr4 = 0
      Gogo = 0
      Kran = 3
      Gosub Naliv
   End If
'      Portb.1 = 0
Gosub Ohladit:
If Kran > 0 Then
   Gosub Naliv
   Gosub Obsluzhivanie
End If

 Kn = 0
Return






'================================ ВЫВОД ИНФОРМАЦИИ НА ДИСПЛЕЙ ============================
Informacia:

Call Nokia_text(1 , 2 , "----------------" , 1)

'Вывод информации о воде
If Vskipel = 0 Then Call Nokia_text(1 , 7 , "---не вскипел---" , 1)
If Vskipel => 1 Then Call Nokia_text(1 , 7 , "---кипяточек!---" , 1)

'=========== ОПРОС АЦП №5 ТЕМПЕРАТУРА =========
Disable Interrupts                                          'на всякий отключаем прерывания, это то, что может затормозить программу если не отключить и опросить АЦП
Start Adc                                                   'запуск опроса АЦП
   Tempr2 = Getadc(5)                                       ' чтение в переменну значение АЦП 5
Waitms 20                                                   'будет глючить, ставьте задержку
Stop Adc
Disable Interrupts
'=========== ОПРОС АЦП №0 УРОВЕНЬ ВОДЫ ==============================
Start Adc                                                   'запуск опроса АЦП
   Davlenie = Getadc(0)                                     ' чтение в переменну значение АЦП 0
Waitms 20                                                   'будет глючить, ставьте задержку
Stop Adc

'расчёт температуры
Tempr2 = Tempr2 - 947                                       ' тупое вычесление, высчитывал сам, для каждого датчика по особому.
Tempr3 = 2.5 * Tempr2                                       ' тупое вычесление, высчитывал сам, для каждого датчика по особому.
Tempr3 = Tempr3 - 10                                        ' тупое вычесление, высчитывал сам, для каждого датчика по особому.
Text = "T=" + Str(tempr3)                                   'при настройке вместо tempr3 можно указать tempr2 и убрать все расчёты, замерить лёд и кипяток, после ввести расчёт из показаний с АЦП

'расчёт уровня воды
Text = Text + "г. У="
Text = Text + Str(davlenie)
Text = Text + " "

Call Nokia_text(2 , 8 , Text , 0)                           'вывод в низу температуры и давления
Return




'=========================================================================================
'========================================== Тело Программы ===============================
'=========================================================================================

Xpom1:


'Waitms 10                                                   'общая задержка программы - ВНИМАНИЕ!!!!!!!!!!!!!!!!!!!!!!!!
'If M = 5 Then Gosub Menu5
If M = 4 Then Gosub Menu4
If M = 3 Then Gosub Menu3
If M = 2 Then Gosub Menu2
If M = 1 Then Gosub Menu1

'=======================================
Gosub Informacia
Gosub Obsluzhivanie                                         ' обслуживание
Gosub Nagrev                                                ' Нагрев банки


'=======================================
Goto Xpom1
End
                                             'end program

Библиотеку брал у вас в файловой свалке,  убрал из неё отображение картинок и файл шрифта вроде от сюда брал, только из другой библиотеки этого экрана (как-то глючело в начале, не помню)
А да, по любому первый вопрос будет: ЧСБ )

Отредактировано Ev3658 (2013-05-15 20:47:09)

+1

2

Круто! Наверное самый оригинальный проект, который я видел за последние годы.

0

3

Это шедевр!
У америкосов цикл видео есть, как собирают и реставрируют старьё, а затем продают на "блошином" рынке.
Так вот, им за нашими талантами далеко.

0

4

Самый прикол ещё в том, что я только начал изучать BASCOM ), знания Basic DeltaC-48k и в школе на 486 ПК Qbasic очень пригодились, пол месяца не мог понять, почему программа сама живёт, а после вычитал, что вот так нельзя:
IF P=1 Then F=0: P=0: R=1
Привычки ещё расчёта переменной в одной строке долго держали, еле привык к одной вычислительной операции в одной строке.
А да, память МК 8кб. убил всю впритык.
Смог реализовать возможности:
-Автоналив в кружку (концевик наличия кружки, после охлаждения или насыпания)
-Механический дзынь (готово)
-Подогрев и кипячение разделил
-Аналоговый датчик уровня воды
Алгоритмы защиты:
-Не включать кипятильник при малом уровне воды
-Не включать кипятильник при доливе в банку
-Не наливать пока не вскипит
По идее если доработать, то сделать может каждый, на самом деле механика оказалась сложнее электроники и программной части. Я теперь жить без строительного фена не могу ( пользовался по соседству в обувной мастерской, а большой наждак вообще жизненно важная штука оказалась! )

0

5

А как в банке отверстия сверлили?

0

6

radan написал(а):

А как в банке отверстия сверлили?

  :crazy:  (ЧСБ - чем сверлил банку)  :crazyfun:
Правда сам пытался, не получилось, пробовал стеклорезом нацарапать, песком обложить и оловом нагретым залить - много банок покинули наш мир. Сходил в стекольную мастерскую, у них были круглые коронки, там дрелью просверлили (водой поливали), в принципе если есть в магазине нужного диаметра алмазная коронка и быстрая дрель, можно и дома просверлить.  Но когда увидели кран и термодатчик, просверлили бесплатно и попросили показать, что получится )
https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRUUunoivQPzk8oOs9N7WLYRqbz63Lb74ng-4WHnteezEK2klBgtQ

Банка правда резкие смены температуры не выдерживала, но нагрев с водой без проблем и долив холодной воды при уровне банки 1/4 тоже выдерживала. Шайбы/гайки пришлось на наждаке полукругом делать.

0

7

(ЧСБ - чем сверлил банку)
А я думал ЧСБ- Чай Сладкий Был?

0

8

Вот же извращенец ))) Чувак, твою бы энергию, да в мирное русло )))))
Молодчага!

0

9

Вообще я как-то поиздевался над супругой и сделал даже картинку )))
http://radiokstovo.ru/images/logo.jpg
создавалась она в моём бардаке )
http://cs402826.userapi.com/v402826961/5f1a/ilyZe1S4yp8.jpg
Проблемы были с кипятильником, не смог найти без накипи, а через неделю цвет банки тускнел из-за осадка водопроводной воды.
http://cs416721.vk.me/v416721419/4036/9eUN7x0J-bw.jpghttp://cs416721.vk.me/v416721419/4040/S1uBviZRA0U.jpg
Оргстекло гнул строительным феном, обрезки (остатки) бесплатно предоставила стекольная мастерская.
http://cs416721.userapi.com/v416721419/3b3b/HAdMl7KVc9c.jpg
Движок на кране долго не проработал, температура была большая, редуктор свернуло быстро.
http://cs416721.userapi.com/v416721419/3b65/WqY4S7O0NlY.jpg
Всё собиралось на Atmrga8 и Nokia LCD 1110
Вся механика в основе выкидного механизма привода CD-DVD,
http://cs418430.userapi.com/v418430419/2376/5iEtapjfi8o.jpg

0

10

Это бардак да ??? Тогда у меня энтропия.....

+1

11

Вещь!!! А я вот часы старые нашел. Хочу робокукушку.

0

12

Круто! ничего подобного я в жизни не видел!!!! Автор Молодец!

0


Вы здесь » Программирование ATMEL в BASCOM. » Готовые конструкции » Басятская чае-кофе наливалка )