Страница 240 из 304
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт дек 31, 2015 10:56:15
_Vasilij_
не, мне не фонты нужны, а библиотека по их математическому увеличению...ибо большой фонт жрет чрезмерно много памяти, нужно чтоб сам микроконтроллер растягивал шрифт, как для 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 килобайта

, уж пусть лучше некрасиво...или память внешнюю цеплять, или камень пожирней, но это как из пушки по воробьям.
Да, тот код смотрел и переделывал под себя - но он открытый, а тут штатный (кракозябры какие-то, шифрованный похоже).
Я уже сделал поточечный вывод (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
работает как положено. Это именно у той сторонней библиотеки своя конфигурация. Вообще ради интереса можете поглядеть, что та библиотека содержит, и для чего ее вообще можно подключать.

Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт янв 14, 2016 17:50:08
serg_svd
max50 писал(а):
То есть не использую ds1307clock.lib.
Да вот именно в ней и все дело.
Спасибо Михаил подсказал. Убрал эту библиотеку и все заработало.
Вычистил код, пока часики устанавливаются нормально и тикают. Проверку на високосный год тоже сделал при установке даты. Пример определения високосного года нашел там же в справке баскома. Заодно и ограничиваю день по месяцам (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 в основном цикле, в обработчике кнопки так же увеличиваем переменную и выводим на дисплей... Это как вариант, чтобы начинающему с прерываниями не возиться. Хоть свои попытки в виде кода покажите, а то так дело не пойдет. Напишут готовый вариант Вам запросто, и не один, только это ли Вам нужно...

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 перед началом цикла. правильно?