... U = 0.00488755 ... Button: Incr U Waitms Debouncetime Gifr = 64 Return 'подпрограмма 1 установка 50в
Sub Limit1 If U > 0.00488755 Then Portd.0 = 0 'выключаем реле 1 делителя Portd.1 = 1 'включаем реле 2 делителя U = 0.04887585 'устанавливаем коэф.для измерения A = 50 'устанавливаем предел на индикацию C = 49.95 'устанавливаем предел для защиты End If ...
Вы же, уважаемый, свой расчетный коэффициент U увеличиваете на 1(целочисленная единица) функцией Incr, чтож вы еще ожидали... Выбор пределов измерения можно делать по принципу выбора пункта меню (функция Case). Подумайте над этим...
_________________ Извращение это: программатор - AVR910 by Prottoss, прошивка - Doper, драйвер - Osamu Tamura, называется - STK500!
Да я сначало так и пробовал,чегото тоже не пошло.Пишет ошибку 3 parameters expected и ещё IF THEN expected , end select expected.И ссылается на строки Case 0 и 1 ,а если после If D > 2 Then D = 0 закрыть иф тоже даёт ошибку IF THEN expected.Вроде всё закрываю и IF THEN и end select всёравно ошибка и что это за ошибка 3 parameters expected чего там 3 параметра ожидают в строке case.
Config Lcd = 16 * 2 'используем дисплей на 2 строчки по 16 знакомест в каждой
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'конфигурация АЦП
Config Portd = &B1101111
Config Pind.2 = Input
Config Pinc.0 = Input
'объявляем переменные Dim W As Word Dim U As Single Dim Ulcd As Single Dim A As Word Dim B As Word Dim C As Single Dim D As Word Declare Sub Alarm On Int0 Button 'обзываем прерывание button Config Int0 = Rising 'конфигурируем прерывание по фронту сигнала Config Debounce = 50 Const Debouncetime = 75 Enable Interrupts 'разрешаем прерывание и в частности INT0 Enable Int0
'----------
'главный цикл программы
Portd.0 = 1 U = 0.00488755 'устанавливаем коэф.для 5 в A = 5 C = 4.95 D = 0 Start Adc 'запускаем аналого-цифровое преобразование
Do
If D > 2 Then D = 0
Select Case D Case 0 : U = 0.00488755 : A = 5 : C = 4.95 : Portd.0 = 1 : Portd.3 = 0 Case 1 : U = 0.04887585 : A = 50 : C = 49.95 : Portd.1 = 1 : Portd.0 = 0 Case 2 : U = 0.09775171 : A = 100 : C = 99.95 : Portd.3 = 1 : Portd.1 = 0 End Select
W = Getadc(0) ' измеряем напряжение по входу 0 (РС.0)
Ulcd = U * W ' умножаем что получилось на коэфициент
Ну для начала многим твоим переменным можно присвоить и байтовое значение, чтобы не перегружать программу, особенно в случе D больше двух он не примет. А что касается выбора пункта, его надо декларировать:
Код:
Declare Sub D
_________________ Извращение это: программатор - AVR910 by Prottoss, прошивка - Doper, драйвер - Osamu Tamura, называется - STK500!
Подправил но всё равно выдаёт ошибку 3 parameters expected настроки Case.Чего не так я с этими строками делаю,раньше с ними не работал срисовал с примера.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Доброго всем ЗДОРОВИЯ.Кто нибуть может состряпать програмку для нокиа 3310 чтоб можно было нарисовать большие цифры ну хотябы 16x8.
Писали по поваду LCD A55,A52-Siemens,Я взял библиотеку от 3410 изменил контрастность на максимум FF и он заработал только шрифт мелкий я не спец в этом, а вы доведёте может до ума мне он нравится стоит копейки и паять можно.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Всем привет! Ребята, имеется код собственной разработки. Нужна помощь, чтобы довести до ума. В частности - температура почему-то показывает по нулям , потом надо расставить по индикатору точки (не соображу как). Когда-то делал, а теперь что-то подзабыл... (только не надо шуток по поводу того, что "не знал, да еще забыл") - знал, просто старые проекты все потерялись и все наработки тоже. Данное и так по памяти написано! И еще правильно организовать цикл в прерывании TIMER1 (обработчик называется Vr), чтобы 10 секунд показывало время, 3 секунды-первый датчик, 3 секунды-второй датчик. Вот собственно код:
Код:
$regfile = "m48def.dat" $crystal = 8000000 $lib "ds1307clock.lib" '---------- Config 1wire = Portd.4 Config Sda = Portc.4 Config Scl = Portc.5 Config Clock = User Config Portc.0 = Output , Portc.1 = Output , Portc.2 = Output , Portc.3 = Output Config Portd.0 = Output , Portd.1 = Output Config Portb = Output Config Timer0 = Timer , Prescale = 8 'таймер индикации Config Timer1 = Timer , Prescale = 1024 Config Watchdog = 2048 '---------- Declare Sub Ds18b20() Const Ds1307w = &HD0 Const Ds1307r = &HD1 '************************************** Time$ = "12:00:00" Date$ = "01/01/11" 'метка подпрограммы индикации Razr1 Alias Portc.0 : Razr2 Alias Portc.1 : Razr3 Alias Portc.2 Razr4 Alias Portc.3 : Razr5 Alias Portd.0 : Razr6 Alias Portd.1 '************************************** Dim Chas As Byte , Minut As Byte , Sekund As Byte Dim I1 As Integer Dim I2 As Integer Dim Dsid1(8) As Byte Dim Dsid2(8) As Byte Dim B As Byte Dim Weekday As Byte Dim Flag As Bit Dim X As Byte , Count As Byte , I As Byte Dim Number(6) As Byte Dim Ttt As Byte '************************************** For X = 1 To 2 Portb = &HFF Reset Razr1 : Reset Razr2 Reset Razr3 : Reset Razr4 Reset Razr5 : Reset Razr6 Waitms 500 Set Razr1 : Set Razr2 Set Razr3 : Set Razr4 Set Razr5 : Set Razr6 Waitms 500 Next X Portb = &B01000000 Reset Razr1 : Reset Razr3 : Reset Razr5 Reset Razr2 : Reset Razr4 : Reset Razr6 Wait 1 Set Razr2 : Set Razr4 : Set Razr6 Set Razr1 : Set Razr3 : Set Razr5 Dsid1(1) = 1wsearchfirst() Dsid2(1) = 1wsearchnext() '************************************** On Ovf0 Refresh On Ovf1 Vr On Int0 But1 Nosave On Int1 But2 Nosave Enable Interrupts Enable Int0 Enable Int1 Enable Ovf0 Enable Ovf1 '************************************** Main: Do Gosub Getdatetime Number(1) = _hour / 10 Number(2) = _hour Mod 10 Number(3) = _min / 10 Number(4) = _min Mod 10 Number(5) = _sec / 10 Number(6) = _sec Mod 10 Wait 1 Loop Until Ttt >= 10 Do For I = 1 To 6 Number(i) = 10 Next I Call Ds18b20() Reset Watchdog Number(2) = I1 / 10 : Number(3) = I1 Mod 10 : Number(4) = I1 Mod 100 Number(1) = 11 : Number(5) = 12 : Number(6) = 13 Reset Watchdog Wait 3 For I = 1 To 6 Number(i) = 10 Next I Number(2) = I2 / 10 : Number(3) = I2 Mod 10 : Number(4) = I2 Mod 100 Number(1) = 11 : Number(5) = 12 : Number(6) = 13 Reset Watchdog Wait 3 For I = 1 To 6 Number(i) = 10 Next I Loop Until Ttt >= 6 Goto Main End
'************************[Процедуры обработки подпрограмм и прерываний]************************
Refresh: ' прерывание таймера Т0 (индикация)
Set Razr1 : Set Razr2 : Set Razr3 ' гасим индикатор Set Razr4 : Set Razr5 : Set Razr6
Incr Count : If Count > 6 Then Count = 1 ' выбираем разряд для загрузки
Portb = Lookup(number(count) , Digits) ' закидываем в порт код цифры
Select Case Count ' и включаем соответствующий разряд индикатора Case 1 : Reset Razr1 Case 2 : Reset Razr2 Case 3 : Reset Razr3 Case 4 : Reset Razr4 Case 5 : Reset Razr5 Case 6 : Reset Razr6 End Select Return ' выход из обработчика прерывания
Vr: Incr Ttt Return
But1: Waitms 100 Gosub Getdatetime Sekund = _sec Minut = _min Chas = _hour Incr Chas If Chas > 23 Then Chas = 0 _hour = Chas _min = Minut _sec = Sekund Gosub Settime Return
But2: Waitms 100 Gosub Getdatetime Sekund = _sec Minut = _min Chas = _hour Incr Minut If Minut > 59 Then Minut = 0 _hour = Chas _min = Minut _sec = Sekund Gosub Settime Return
Привет. Ну правильно, и не будет работать... Проект жеж на LCD и PCF8583...
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Number(2) = 256/10 = 25 целых. И что он должен закинуть в порт, по указателю 25 ? Ну и дальше все пошагало не туда, естественно.
Но даже если исправить то все равно работать не будет. Ведь переменные Number и I1 должны быть одного типа ! Только тогда будут работать все эти деления и остатки...
И самое главное, на время отправки команд сброса линии / запуска измерения / чтения все прерывания должны быть запрещены. Иначе начитаемся мусора...
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Да не за что. Если исправить то все работает. Правда без точек. Но и это не проблема. Но пилить до ума еще много...
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Кто подскажет как реализован расчёт дня недели в софтовых часах. Не хочу завязываться на софтовые. А если не запускать софтовые, то команда Target = DayOfWeek() не работает.
Target A Byte – variable, that is assigned with the day of the week
BDayMonthYear A Byte – variable, which holds the Day-value followed by Month(Byte) and Year (Byte)
StrDate A String, which holds a Date-String in the format specified in the
CONFIG DATE statement
WSysDay A Word – variable, which holds the System Day (SysDay)
LSysSec A Long – variable, which holds the System Second (SysSec)
The Function can be used with five different kind of Input:
1. Without any parameter. The internal Date-values of SOFTCLOCK (_day, _month, _year) are used.
2. With a user defined date array. It must be arranged in same way (Day, Month, Year) as the internal SOFTCLOCK date. The first Byte (Day) is the input by this kind of usage. So the Day of the Week can be calculated of every date.
3. With a Date-String. The date-string must be in the Format specified in the Config Date Statement
4. With a System Day – Number.
5. With a System Second - Number
The Return-Value is in the range of 0 to 6, Monday starts with 0.
The Function is valid in the 21th century (from 2000-01-01 to 2099-12-31).
See Also
Date and Time routines , CONFIG DATE , CONFIG CLOCK, SYSDAY, SYSSEC
Example
'----------
'name : datetime_test1,bas
'copyright : (c) 1995-2005, MCS Electronics
'purpose : show how to use the Date-Time routines from the DateTime.Lib
'micro : Mega103
'suited for demo : no
'commercial addon needed : no
'----------
$regfile = "m103def.dat" ' specify the used micro
$crystal = 4000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Const Clockmode = 1
'use i2c for the clock
#if Clockmode = 1
Config Clock = Soft ' we use build in clock
Disable Interrupts
#else
Config Clock = User ' we use I2C for the clock
'configure the scl and sda pins
Config Sda = Portd.6
Config Scl = Portd.5
'address of ds1307
Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
#endif
'configure the date format
Config Date = Ymd , Separator = - ' ANSI-Format
'This sample does not have the clock started so interrupts are not enabled
' Enable Interrupts
'dim the used variables
Dim Lvar1 As Long
Dim Mday As Byte
Dim Bweekday As Byte , Strweekday As String * 10
Dim Strdate As String * 8
Dim Strtime As String * 8
Dim Bsec As Byte , Bmin As Byte , Bhour As Byte
Dim Bday As Byte , Bmonth As Byte , Byear As Byte
Dim Lsecofday As Long
Dim Wsysday As Word
Dim Lsyssec As Long
Dim Wdayofyear As Word
' =================== DayOfWeek =========
' Example 1 with internal RTC-Clock
_day = 4 : _month = 11 : _year = 2 ' Load RTC-Clock for example - testing
Bweekday = Dayofweek()
Strweekday = Lookupstr(bweekday , Weekdays)
Print "Weekday-Number of " ; Date$ ; " is " ; Bweekday ; " = " ; Strweekday
' Example 2 with defined Clock - Bytes (Day / Month / Year)
Declare Sub Month_disp 'подпрограмма перевода цифровых значений месяца в названия месяца
Dim Daysmonth As Byte 'переменная дней в месяце Dim Month_disp As String * 8 'переменная месяца, выводимая на дисплей Dim Weekday_disp As String * 7 'переменная дня недели, выводимая на дисплей Dim Weekday_read As Byte 'переменная номера дня недели, считываемая из DS1307 Dim Weekday As Byte 'переменная номера дня недели
Do 'начало основного цикла
Call Month_disp 'вызываем подпрограмму перевода цифровых значений месяца в названия месяца
Locate 1 , 1 'задаем позицию курсора Lcd Time$ 'выводим на ЖКИ время, вызывая подпрограмму чтения времени из DS1307 Locate 2 , 1 'задаем позицию курсора Lcd _day ; " " ; Month_disp 'выводим на ЖКИ значение переменной _day, пробел, значение переменной Month_disp If _year < 10 Then 'если значение переменной _year < 10 то, Lcd " 200" ; _year ; " " 'выводим на ЖКИ, пробел, 200, значение переменной _year, 4 пробела Else 'иначе Lcd " 20" ; _year ; " " 'выводим на ЖКИ, пробел, 20, значение переменной _year, 4 пробела End If 'конец если
Weekday_read = Dayofweek() 'считываем номер дня недели из DS1307 Weekday_disp = Lookupstr(weekday_read , Weekdays) 'преобразовываем номер дня недели в название дня недели Locate 1 , 10 'задаем позицию курсора Lcd Weekday_disp 'выводим на ЖКИ значение переменной Weekday_disp
Loop 'конец основного цикла
End
Sub Month_disp 'подпрограмма перевода цифровых значений месяца в названия месяца '******************************************************************************* Select Case _month
Case 1 : Month_disp = "ЗЅіapЗ" 'января Daysmonth = 31 Case 2 : Month_disp = "дeіpa»З" 'февраля Daysmonth = _year And &H03 'проверяем на високосный год If Daysmonth = 0 Then 'если год високосный (переменная Daysmonth = 0) Daysmonth = 29 'то переменная Daysmonth = 29 Else 'иначе Daysmonth = 28 'переменная Daysmonth = 28 End If Case 3 : Month_disp = "јapїa" 'марта Daysmonth = 31 Case 4 : Month_disp = "aѕpe»З" 'апреля Daysmonth = 30 Case 5 : Month_disp = "јaЗ" 'мая Daysmonth = 31 Case 6 : Month_disp = "ёЖЅЗ" 'июня Daysmonth = 30 Case 7 : Month_disp = "ёЖ»З" 'июля Daysmonth = 31 Case 8 : Month_disp = "aіґycїa" 'августа Daysmonth = 31 Case 9 : Month_disp = "ceЅїЗІpЗ" 'сентября Daysmonth = 30 Case 10 : Month_disp = "oєїЗІpЗ" 'октября Daysmonth = 31 Case 11 : Month_disp = "ЅoЗІpЗ" 'ноября Daysmonth = 30 Case 12 : Month_disp = "гeєaІpЗ" 'декабря Daysmonth = 31
End Select End Sub
Getdatetime: 'подпрограмма чтения данных из DS1307 '******************************************************************************* I2cstart ' I2C START I2cwbyte Ds1307w ' константа адрес записи DS1307 I2cwbyte 0 ' начальный адрес в DS1307
I2cstart ' I2C START I2cwbyte Ds1307r ' константа адрес чтения DS1307 I2crbyte _sec , Ack ' чтение значения СЕКУНД I2crbyte _min , Ack ' чтение значения МИНУТ I2crbyte _hour , Ack ' чтение значения ЧАСА I2crbyte Weekday , Ack ' чтение значения НЕДЕЛИ I2crbyte _day , Ack ' чтение значения ДНЯ I2crbyte _month , Ack ' чтение значения МЕСЯЦА I2crbyte _year , Nack ' чтение значения ГОДА I2cstop 'I2C STOP _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) 'преобразуем все переменные в десятичный вид _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year) 'преобразуем все переменные в десятичный вид Return 'возврат из подпрогрммы
Setdate: 'подпрограмма записи даты в DS1307 '******************************************************************************* _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year) 'преобразуем все переменные в двоичный вид I2cstart ' I2C START I2cwbyte Ds1307w ' константа адрес записи DS1307 I2cwbyte 4 ' начальный адрес в DS1307 I2cwbyte _day ' запись ДЕНЬ I2cwbyte _month ' запись МЕСЯЦ I2cwbyte _year ' запись ГОД I2cstop 'I2C STOP Return 'возврат из подпрогрммы
Settime: 'подпрограмма записи времени в DS1307 '******************************************************************************* _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) 'преобразуем все переменные в двоичный вид I2cstart ' I2C START I2cwbyte Ds1307w ' константа адрес записи DS1307 I2cwbyte 0 ' начальный адрес в DS1307 I2cwbyte _sec ' запись СЕКУНД I2cwbyte _min ' запись МИНУТ I2cwbyte _hour ' запись ЧАСА I2cstop 'I2C STOP Return 'возврат из подпрогрммы
Weekdays: '******************************************************************************* Data "ЁoЅeг. " 'Понед. Data "BїopЅёє" 'Вторник Data "Cpeгa " 'Среда Data "«eїіepґ" 'Четверг Data "ЁЗїЅёеa" 'Пятница Data "CyІІoїa" 'Суббота Data "Bocєp. " 'Воскр.
_________________ Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
max50 так мы запускаем софтовые, либо внутренние на основе таймера 2 либо внешние на ds при этом мы используем стандартные команды по работе с часами, в том числе и вычисление дня недели. Я смотрел код из хелпа и пробовал если не конфигурировать часы как софтовые, то и на командах по работе с часами баском выдаёт ошибки. Вот и заинтересовался как делает баском при вычислении дня недели, чтоб написать свой кусок кода по аналогии.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения