Часы, Вольтметр, "бакометр"

23-02-2014, 11:33 От: admin Посмотрели: 1097
Здравствуйте дорогие форумчане. Хочу сделать часы, вольтметр, индикатор уровня топлива в одном флаконе на Atmega8.

Вообщем есть у меня код на вольтметр, "бакометр", и часов. Только умею я выводить на дисплей с контроллером HD44780!

а сейчас нужно вывести на 4-x разрядный семисегментный индикатор. Но я всё перечитал пересмотрел и ничего не понял. Принцип работы то знаю но как организовать хз. Нашел код сделал на нем часы но в этом коде нет таймера. т.е. значения считываются раз в 20мс. поэтому бакометр и вольтметр не работают.

Не могли бы вы мне в этом помочь собрать весь этот код и вывести на семисегментный индикатор?



Код бакометра.


Config Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Inercia As Byte
Dim Inercia_eep As Eram Byte

Dim Flag_acp As Bit

Declare Sub Sens_fuel
Dim Litr As Byte
Dim Adc_litr(70) As Integer
Dim Adc_litr_eep(70) As Eram Integer

Dim Fuel_adc As Integer
Dim Fuel_adc_array(10) As Integer
Dim Fuel As Byte

Inercia = Inercia_eep
If Inercia = 255 Then Inercia = 2

For Fuel = 1 To 70 'считываем из еепром в массив
Adc_litr(fuel) = Adc_litr_eep(fuel)
Next
Do
'для данного алгоритма необходимо организовать опрос ацп 1 раз в секунду. в данном случае я использовал четность/нечетность секунд времени:
If Seco.0 = 0 And Flag_acp = 0 Then 'заходим на АЦП один раз в секунду
Flag_acp = 1
Gosub Acp
Elseif Seco.0 = 1 And Flag_acp = 1 Then
Flag_acp = 0
Gosub Acp
End If
......................
For Fuel = 1 To 70 'определение остатка топлива на основе калибровочных данных
If Adc_litr(fuel) <= Fuel_adc And Fuel_adc < Adc_litr(fuel + 1) Or Adc_litr(fuel + 1) = -1 Then
Fuel = Fuel - 1
Exit For
End If
Next
......................
Lcd Fuel
Loop

Acp:
Start Adc
U = Getadc(0) 'напряжение борт сети
U_sin = U
U_sin = U_sin / 50
'U_str = Fusing(u_sin , "00.0")
For Y = Inercia To 2 Step -1
Fuel_adc_array(y) = Fuel_adc_array(y - 1) 'сдвиг элементов массива вправо
Next
Fuel_adc_array(1) = Getadc(1) 'в 1-ый элемент массива записываем значение АЦП в данный момент
Stop Adc
Fuel_adc = 0
For Z = 1 To Inercia
Fuel_adc = Fuel_adc + Fuel_adc_array(z)
Next
Fuel_adc = Fuel_adc / Inercia
Fuel_adc = 1023 - Fuel_adc 'для датчиков "ПОЛНЫЙ БАК - 0 Ом"
Return

'============================SENS_FUEL==========================================
Sub Sens_fuel
Cls
'Waitms 500
Local B As Integer
Local Fuel_adc_str As String * 4
Local B_str As String * 4
Do
Start Adc
Fuel_adc = Getadc(1)
Stop Adc
Fuel_adc = 1023 - Fuel_adc 'для датчиков "ПОЛНЫЙ БАК - 0 Ом"
If Up = 0 Then
Call Zvuk
Incr Litr
Waitms 200
End If
If Litr > 70 Then Litr = 0
If Down = 0 Then
Call Zvuk
Decr Litr
Waitms 200
End If
If Litr = 255 Then Litr = 70
If Ok = 0 Then
Call Zvuk
Adc_litr_eep(litr + 1) = Fuel_adc
Locate 1 , 15
Lcd "Ok"
Waitms 1000
End If
If Esc = 0 Then
Call Zvuk
Cls
Waitms 300
Exit Do
End If
B = Adc_litr_eep(litr + 1)
Home
Lcd "Calibr.litres " ;
If Litr < 10 Then
Lcd " " ; Litr
Else
Lcd Litr
End If
Lowerline
Fuel_adc_str = Str(fuel_adc)
Lcd "ADC=" ; Format(fuel_adc_str , "0000") ; " "
Locate 2 , 13
B_str = Str(B)
If B > -1 Then
Lcd Format(b_str , "0000")
Else
Lcd "----"
End If
Loop
End Sub



Вольтметр:

Sub Voltmeter()
Start Adc
Readadc1 = Getadc(1)
Voltage = Readadc1 / 1023
Voltage = Voltage * 30
Locate 2 , 1
Lcd Chr(4) ; Fusing(voltage , "##.#") ; "B"
Stop Adc
End Sub



часы:


Sub Getds1307()
I2cstart
I2cwbyte &HD0
I2cwbyte &H00
I2cstart
I2cwbyte &HD1
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Ack
I2crbyte Day , Ack
I2crbyte Dat , Ack
I2crbyte Month , Ack
I2crbyte Year , Nack
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)
Day = Makedec(day)
Dat = Makedec(dat)
Month = Makedec(month)
Year = Makedec(year)
End Sub
'-------------------------------------время------------------------------------'
Sub Getclock()
Call Getds1307()
Locate 1 , 1
Lcd Chr(1)
Locate 1 , 5
If Mine > 9 Then
Lcd Mine
Else
Lcd "0" ; Mine
End If
Locate 1 , 4
Lcd ":"
Locate 1 , 2
If Hour > 9 Then
Lcd Hour
Else
Lcd "0" ; Hour
End If
End Sub

Раздел: AVR

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Часы, Вольтметр, "бакометр" все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба

Добавление комментария

Ваше имя:*
E-Mail:*
Текст:
Вопрос:
Решите уравнения x+2x=789
Ответ:*
Введите два слова, показанных на изображении:



Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Календарь новостей
«    Апрель 2024    »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930