Страница 240 из 304

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 31, 2015 10:56:15
_Vasilij_
Sergik07 писал(а):
_Vasilij_ писал(а):Вот здесь не смотрели? http://bart-projects.cba.pl/font.html
не, мне не фонты нужны, а библиотека по их математическому увеличению...ибо большой фонт жрет чрезмерно много памяти, нужно чтоб сам микроконтроллер растягивал шрифт, как для nokia 1100.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 31, 2015 15:04:27
Jack_A
Если механически увеличивать размер символа, может получиться некрасивый рисунок. Сравните :
Изображение

PS Программа масштабирования тоже занимает место в памяти. :(
PPS Вы разбирали код МК Нокии 1100 и точно уверенны, что там не набор фонтов, а программное масштабирование ?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 31, 2015 18:55:37
_Vasilij_
Jack_A писал(а):PS Программа масштабирования тоже занимает место в памяти. :(
PPS Вы разбирали код МК Нокии 1100 и точно уверенны, что там не набор фонтов, а программное масштабирование ?
насчет памяти, допустим символ 48x64 ( в полэкрана) это 3072бит=384 байта на 1 циферь, только от 0 до 9 уже почти 4 килобайта :shock: , уж пусть лучше некрасиво...или память внешнюю цеплять, или камень пожирней, но это как из пушки по воробьям.

Да, тот код смотрел и переделывал под себя - но он открытый, а тут штатный (кракозябры какие-то, шифрованный похоже).
Я уже сделал поточечный вывод (pset ) , но это медленно, а команду чтоб задвигать в дисплей сразу по 8 бит(как в 1100) тут не знаю...это надо даташит изучать, и свою библиотеку писать...лень, поэтому и спрашиваю, мож кто проходил уже этот путь по увеличению.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Сб янв 02, 2016 15:52:57
kip96
Sergik07 писал(а):
_Vasilij_ писал(а):Есть ли какие-то готовые библиотеки для масштабирования шрифтов или хотя бы просто цифр ?
Вот здесь не смотрели? http://bart-projects.cba.pl/font.html
Интересную программу на сайте увидел, " nosave" . Но не ссылок на неё, не зарегиться не смог. Кто нибудь знает как её раздобыть?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вт янв 05, 2016 14:59:40
_Vasilij_
Всех с наступившим !
Столкнулся с неясностями в шрифтах,пытаюсь создать цветной 12x16, а оно через команду LCDAT на экране ересь выдает. Любое кратное 8 - пожалуйста, все нормально, а другое не выводит...с ч/б таких проблем не было Модуль pcf8833, библиотека стандартная, Вопрос - шрифт для цветных экранов впринципе не может быть некратным 8 ? или библиотеку искать ?

Еще вдогонку, есть ли команда поворота текста ? ну в смысле повернуть дисплей на 90 градусов ?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 00:41:56
serg_svd
Играюсь с DS1307 и выводом на символьный жк индикатор и столкнулся с непонятным глюком.
Использую встроенную библиотеку работы с DS1307 ds1307clock.lib.
Но почему-то не работает конфигурация
Config Date = Dmy , Separator = .
Хочу, чтобы дата выводилась в формате DD.MM.YY.
Но после компиляции индикатор упорно показывает в формате MM/DD/YY.
Версия баскома 1.11.9.8. Уж не знаю, может в версии все дело?
переустановил на версию 1.11.9.8 тоже не помогло.
В личку подскажите где версию поновее найти? а то на сайте баскома в хелпе разделители заменили словами. то есть вместо . надо писать DOT. Но это в последней официальной версии

Нашел версию 2.0.7.8.
Но не работает строка Config Date = Dmy , Separator = DOT хоть расшибись. И в чем глюк непонятно.
Полная настройка DS1307 (выкопировка из программы)
Спойлер'configure the scl and sda pins
Config I2cdelay = 5
Config Sda = Portc.4
Config Scl = Portc.5

'address of ds1307
Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1

Config Clock = User
Config Date = Dmy , Separator = Dot

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 13:25:35
Sergik07
serg_svd писал(а): Config Date = Dmy , Separator = .
Возможно эти команды для софтовых часов.

Вот так делал чтение из 1307 в переменные

Код: Выделить всё

Const Ds1307w = &HD0                                        ' запись
Const Ds1307r = &HD1                                        ' чтение

        I2cstart                                            ' старт
        I2cwbyte Ds1307w                                    
        I2cwbyte &H00                                       ' адрес откуда начинаем читать данные
        I2cstart                                            '  старт
        I2cwbyte Ds1307r                                   
        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)

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 14:01:54
serg_svd
Дело в том, что я пользуюсь встроеными функциями баскома, раз они уж там есть.
А там есть приятная штука
Config Clock = User
После применения она автоматически организует переменные _sec, _min, _hour, _day, _month, _year (то есть их не нужно объявлять самому).
И, соответственно, из библиотеки баскома берется код работы с шиной I2C для часов на DS1307
Спойлер'called from ds1307clock.lib
Getdatetime:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307

I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte _sec , Ack
I2crbyte _min , Ack ' MINUTES
I2crbyte _hour , Ack ' Hours
I2crbyte Weekday , Ack ' Day of Week
I2crbyte _day , Ack ' Day of Month
I2crbyte _month , Ack ' Month of Year
I2crbyte _year , Nack ' Year
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte _day ' Send Data to SECONDS
I2cwbyte _month ' MINUTES
I2cwbyte _year ' Hours
I2cstop
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' starting address in 1307
I2cwbyte _sec ' Send Data to SECONDS
I2cwbyte _min ' MINUTES
I2cwbyte _hour ' Hours
I2cstop
Return
Тут уже все переменные забиты какими их и формирует Config Clock/

Далее для вывода на жк достаточно воспользоваться стандартными функциями, которые даже нули подставляет самостоятельно и данные выводятся корректно.
Time$ для вывода времени в формате "hh:mm:ss", что меня вполне устраивает. (Пример: Lcd Time$)
Date$ для вывода даты в формате "MM/DD/YY". Так вот это перевернутое отображение даты меня совсем не устраиает. И в справке программы везде в коде реализации часов значится
Config Date = Dmy , Separator = ., или в новой версии программы Config Date = Dmy , Separator = Dot, где мало того, что меняется разделитель, так еще и порядок следования дня, месяца и года. Но почему-то в реальном коде таких изменений нет. Вот это я и пытаюсьь разобраться.

PS, и еще, подскажите!
DS1307 сама выдает количество дней в Феврале в зависимости от того високосный год или нет? Или надо в программе проверять? Ну и опять же, при установке даты это ведь надо проверять или микросхема сама исправит и выставит, к примеру 28 февраля, если при установке день будет выставлен >28? Никак не пойму этого по даташиту

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 14:39:14
edm2007
Проверять дату февраля не нужно, она сама рассчитывается в зависимости от года. А вот ввести неправильную дату можно легко, никакой проверки при записи нет. То бишь можно выставить 31 февраля, и RTC спокойно это проглотит...

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 17:23:20
max50
Я для DS1307 и DS3231 делаю так:

Код: Выделить всё

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. "                                              'Воскр.
То есть не использую ds1307clock.lib.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 17:48:13
edm2007
max50 писал(а):То есть не использую ds1307clock.lib.
А ее и так подключать в коде не нужно, тогда конфигурация строковой переменной $Date

Код: Выделить всё

Config Date = Dmy , Separator = .
работает как положено. Это именно у той сторонней библиотеки своя конфигурация. Вообще ради интереса можете поглядеть, что та библиотека содержит, и для чего ее вообще можно подключать. :tea:

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 17:50:08
serg_svd
max50 писал(а): То есть не использую ds1307clock.lib.
Да вот именно в ней и все дело. :kill:
Спасибо Михаил подсказал. Убрал эту библиотеку и все заработало.

Вычистил код, пока часики устанавливаются нормально и тикают. Проверку на високосный год тоже сделал при установке даты. Пример определения високосного года нашел там же в справке баскома. Заодно и ограничиваю день по месяцам (30 или 31).

Осталась предпоследняя запара. Нужно реализовать несколько мигающих знакомест на индикаторе HD44780. Пока думаю как это сделать.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 18:17:33
max50
serg_svd писал(а):Проверку на високосный год тоже сделал при установке даты. Пример определения високосного года нашел там же в справке баскома. Заодно и ограничиваю день по месяцам (30 или 31).
В моем коде так и сделано. Только в начале устанавливаю год, потом месяц и затем день.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 14, 2016 18:56:56
serg_svd
max50 писал(а):Только в начале устанавливаю год, потом месяц и затем день.
Аналогично сделал :).
Правда после любых других часов немного непривычна такая установка даты. Но ничего страшного нет. Один раз установить и все

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вс янв 17, 2016 10:59:47
Адвансед
Здравствйте, помогите пожалуйста кодом, который считает нажатие кнопок и выводит знаяения на жк дисплей (1602)
мне не понятен сам алгоритм подсчета количества нажатий,
--

нужно просто читать нажатия кнопки, нажал 5 раз, на дисплее цифра 5, нажал 30 - на дисплее 30, и так далее...

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вс янв 17, 2016 11:15:41
vem566
Что то совсем плохо.
Кнопку на прерывание, переменная которую увеличивают на 1 в каждом прерывании, вывод на экран.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вс янв 17, 2016 11:37:31
edm2007
Либо Debounce в основном цикле, в обработчике кнопки так же увеличиваем переменную и выводим на дисплей... Это как вариант, чтобы начинающему с прерываниями не возиться. Хоть свои попытки в виде кода покажите, а то так дело не пойдет. Напишут готовый вариант Вам запросто, и не один, только это ли Вам нужно... :tea:

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 21, 2016 13:33:29
6П3С
Приветствую коты )) Вот и мне пришлось заняться мк, блин как их не обходил стороной всё одно - оказалось надо. вопрос вот в чём - пытаюсь подключить к меге8, 7-и сегм. индикатор через регистр сдвига, в целях экономии ног, так как схема планируется большая. Пока балуюсь-просто чтобы считал от 0-до 9, подскажите где ошибка в коде? в пристёгнутые ссылки - баском код и схемка протеус 8.
https://yadi.sk/d/D3MnizkVnVADe
https://yadi.sk/i/cQrJh7hBnVAYh
Спасибо заранее.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 21, 2016 13:58:58
edm2007
Здравствуйте.

Протеуса 8 нету, а по коду:

1. Забираете код цифры в переменную Vreg, а отправляете в регистр все равно Led (который равен 0).
2. Переменная Led нигде не инкрементируется, оставаясь всегда 0.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт янв 21, 2016 14:14:00
6П3С
ага, с 1. я заметил сам, уже после того как сообщение первое написал, а по 2. я понимаю надо дописать Incr Led перед началом цикла. правильно?