BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
Привет, котятки! Кто-нибудь знает как подключить простой ЖК индикатор (без контроллера на плате) к МК? И как вообще с ним работать? Хотя бы ссылку киньте... 
Цапу крутить надо!!! Ку или не ку?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Привет. Да чего уж далеко ходить-то: Управление ЖКИ без контроллера: цифровой термометр, цифровой дисплей. 
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
vanyap1 писал(а):Подскажите пожалуйста как записать в микросхему бит по шине i2c? К примеру в микросхеме РТК включить или выключить будильник. По адресу H07 можно записать 8 бит для разных функций, а мне надо записать - 00001000, тоесть только 1 на том месте и не тронуть соседние. Все вместе я могу записать без труда, к примеру так -Код: Выделить всё
I2cstart
I2cwbyte &HA2 'Адрес микросхемы
I2cwbyte &H07 'Куда записать
I2cwbyte &H08 'Что записать
I2cstop
То что до и после этого бита трогать нельзя.
Может как то по маске его можно изменить, или читать этот байт, проверять и менять в зависимости что там еще записано.
Присоединяюсь к вопросу. Нужно и считать и записать седьмой бит нулевого байта в DS1307. Никак не въеду, как.
С уважением,
Алексей.
Алексей.
Re: BASCOM AVR в вопросах и ответах
Считали нулевой байт, допустим в переменную Byte. Потом установили седьмой бит и записали обратно в DS1307.Gordon Shumway писал(а): Нужно и считать и записать седьмой бит нулевого байта в DS1307.
Код: Выделить всё
Byte.7 = 1Re: BASCOM AVR в вопросах и ответах
Михаил, спасибо за ссылку, только вот там на СИ исходник, а у меня с СИ как то дружба не получается (пока). Так уж вышло.edm2007 писал(а):Привет. Да чего уж далеко ходить-то: Управление ЖКИ без контроллера: цифровой термометр, цифровой дисплей.
Единственно полезное во всем тексте (для меня лично) это: То есть, я так понимаю, надо в прерывании таймера (например Timer0 или Timer2) использовать процедуру Pulseout или Shiftout, так?...Процедура вывода представляет собой инвертирование портов, подключенных к ЖКИ, в теле прерывания по переполнению таймера с частотой около 100Гц. Визуально я не увидел разницы между частотами от 50 до 400Гц, ну а поскольку рекомендаций производителя для этих ЖКИ я не знаю, остановился на 100...
Цапу крутить надо!!! Ку или не ку?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Там исходник чудесно прокомментирован. Про Pulseout или Shiftout не совсем понял, это как бы разные команды... Индикатор через регистры подключается?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Мурик писал(а):Считали нулевой байт, допустим в переменную Byte. Потом установили седьмой бит и записали обратно в DS1307.Gordon Shumway писал(а): Нужно и считать и записать седьмой бит нулевого байта в DS1307.Код: Выделить всё
Byte.7 = 1
Спасибо ! Понял, разобрался !
С уважением,
Алексей.
Алексей.
Re: BASCOM AVR в вопросах и ответах
Ну понятно, что через регистры, а то так много ног МК задействовать надо... Тогда, все же, по-видимому Shiftout? Только вот выводы сегментов и общие надо подключать в противофазе. Это как в Баскоме осуществить? Кусочек кода можно?edm2007 писал(а):Там исходник чудесно прокомментирован. Про Pulseout или Shiftout не совсем понял, это как бы разные команды... Индикатор через регистры подключается?
Цапу крутить надо!!! Ку или не ку?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Ну так мне-то не понятно, в статье как пример без регистров.
Я еще раз говорю, Pulseout и Shiftout это в принципе разные команды. Shiftout например, раскладывает число на битовые составляющие, и последовательно выдает его на указанный пин. А Puleout выдает импульс заданной длительности. Потому вопрос совсем непонятен. Если же речь идет о работе с регистрами, то там используются команды Pulseout И Shiftout.
А в прерывании мы постоянно инвертируем данные вместе с общим электродом, и загружаем их в регистры.
А в прерывании мы постоянно инвертируем данные вместе с общим электродом, и загружаем их в регистры.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
Объясню по-другому. Имеется 6-разрядный ЖКИ с мультиплексом 1:3. То есть на каждый вывод COMi приходится три вывода SEGi. Чтобы не городить частокол из ножек МК (и даже в этом случае (для Меги16, например) их не хватит) и не использовать отдельный драйвер, типа HT1621 (Holtek), хочу применить регистры. Как записать информацию в регистры, а затем вывести ее на выходы - понятно. Непонятно как сделать так, чтобы на выводы SEGi сигнал шел в положительной полярности, а на выводы COMi - в отрицательной, т.е. - в противофазе. Т.к., если сигналы будут синфазными, то ничего светиться не будет.
Цапу крутить надо!!! Ку или не ку?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Так я и говорю, кто мешает инвертировать данные-то?
Код: Выделить всё
Dig1 = &B01010101 ' было 01010101
Dig1 = Not Dig1 ' стало 10101010
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
И то правда, чего-то я тормознул!
Спасибо, буду разбираться. 

Цапу крутить надо!!! Ку или не ку?
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Gordon Shumway писал(а):Мурик писал(а):Считали нулевой байт, допустим в переменную Byte. Потом установили седьмой бит и записали обратно в DS1307.Gordon Shumway писал(а): Нужно и считать и записать седьмой бит нулевого байта в DS1307.Код: Выделить всё
Byte.7 = 1
Спасибо ! Понял, разобрался !
Byte.7 это есть переменная типа Byte, с указанным после точки номером бита? И можно ли приравнять Byte.7 к переменной типа Bit?
И еще по поводу этого, если мне нужно записать трехбитовое число в конец этого байта или начало, или где угодно, то как это сделать?
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
vanyap1 писал(а):Byte.7 это есть переменная типа Byte, с указанным после точки номером бита? И можно ли приравнять Byte.7 к переменной типа Bit?
Именно так.
Код: Выделить всё
Dim secu as byte
Dim bit7 as bit
I2cstart
I2cwbyte Ds1307w
I2cwbyte &H00
I2cstart
I2cwbyte Ds1307r
I2crbyte Secu , Nack
I2cstop
Bit7 = Secu.7У меня так все как надо заработало.
С уважением,
Алексей.
Алексей.
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Доброго времени суток !
Вот тут уважаемый MrShilov выложил библиотеку для работы с монохромными дисплеями от аппаратов Nokia (1100, 1101, 1200 и т.д.) в Bascom AVR, за что ему огромное спасибо ! Библиотека с подробным описанием, схемами включения дисплеев и примером.
От себя добавлю, что все работает, но компилируется без ошибок только в свежей версии Bascom 2050 (в 1.11.9.8 лезут ошибки).
Для проверки и для того, чтобы понять, как работать с дисплеем и библиотекой, набросал часики (да, опять часы !
) на Меге8 и DS1307, использовал дисплей от нокии 1100 (китайский). Обязательно нужно использовать резисторные делители и стабилизатор 3.3 вольта для питания дисплея, так как вся схема питается от 5 вольт (от 3 вольт DS1307 не стартует), см. схему включения дисплея у MrShilov.

Так же нашел модель для протеуса для некоторых дисплеев, в том числе и для дисплея от нокии 1100. Модель тоже работает, но при использовании этой библиотеки избражение выводится зеркально и перевернуто по вертикали (на реальном дисплее все ок.)
Вот тут уважаемый MrShilov выложил библиотеку для работы с монохромными дисплеями от аппаратов Nokia (1100, 1101, 1200 и т.д.) в Bascom AVR, за что ему огромное спасибо ! Библиотека с подробным описанием, схемами включения дисплеев и примером.
От себя добавлю, что все работает, но компилируется без ошибок только в свежей версии Bascom 2050 (в 1.11.9.8 лезут ошибки).
Для проверки и для того, чтобы понять, как работать с дисплеем и библиотекой, набросал часики (да, опять часы !
Так же нашел модель для протеуса для некоторых дисплеев, в том числе и для дисплея от нокии 1100. Модель тоже работает, но при использовании этой библиотеки избражение выводится зеркально и перевернуто по вертикали (на реальном дисплее все ок.)
- Вложения
-
- Clock_Nokia1100_ds1307_Mega8.rar
- Пример часов - все необходимые файлы и hex
- (44 КБ) 326 скачиваний
-
- Nokia_LCDs___Proteus_VSM_Models.zip
- Модель для Протеуса
- (303.51 КБ) 270 скачиваний
-
- NOKIA_1100_library.zip
- Библиотрека для Bascom AVR
- (11.74 КБ) 298 скачиваний
-
- 1100.jpg
- Фото дисплея
- (128.34 КБ) 4970 скачиваний
С уважением,
Алексей.
Алексей.
Re: BASCOM AVR в вопросах и ответах
Добрый день всем котам и котяткам.
Я котенок с недельным стажем по программированию. Что то туго дается БАСКОМ.
Начал читать этот форум с первой страницы, за несколько дней дошел до 48 стр. прочту весь конечно. У меня большая просьба к опытным. Покажите, как сделать простенькую прогу для атмеги8 на 1мгц. Двумя кнопками изменять частоту выходного сигнала. При нажатии первой кнопки частота увеличивается на 1 гц, а при нажатии второй кнопки частота уменьшается на 1 гц.
Заранее спасибо.
Я котенок с недельным стажем по программированию. Что то туго дается БАСКОМ.
Начал читать этот форум с первой страницы, за несколько дней дошел до 48 стр. прочту весь конечно. У меня большая просьба к опытным. Покажите, как сделать простенькую прогу для атмеги8 на 1мгц. Двумя кнопками изменять частоту выходного сигнала. При нажатии первой кнопки частота увеличивается на 1 гц, а при нажатии второй кнопки частота уменьшается на 1 гц.
Заранее спасибо.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Добрый.
Самым простым и точным способом является использование таймера. В элементарном случае код будет представлять всего несколько строк:
Собственно, всё. Таймер настраивается в режим СТС (сброс по совпадению с регистром сравнения).
В двух словах: Таймер Т1 считает от 0 и до значения, расположеного в регистре OCR1A (COMPARE1A). После чего на выводе 15 (OC1A) МК Atmega8 уровень меняется на противоположный. Затем счет начинается с нуля, и все повторяется снова. Таким образом, изменяя значение в регистре OCR1A мы изменяем частоту сигнала на выходе.
COMPARE1A = &H3D09:

COMPARE1A = &H061A:
Такой метод хорош тем, что генерация импульсов будет стабильной, независимо от того, что мы делаем в основном цикле. Ну а кнопки прикрутить дело не хитрое...
Впрочем, Вы говорили о семи каналах. Тут уже сложнее, если на таймере делать. Но тоже возможно.
Самым простым и точным способом является использование таймера. В элементарном случае код будет представлять всего несколько строк:
Код: Выделить всё
'**********[Псевдокоманды управления]**************
$regfile = "m8def.dat" ' тип МК
$crystal = 1000000 ' выбор кристала
'**********[Инициализация прерываний]**************
Config Timer1 = Timer , Prescale = 64 , Compare A = Toggle , Clear Timer = 1
COMPARE1A = &H3D09
'**********[Начало основной программы]**************
Do ' пустой цикл
Loop
Собственно, всё. Таймер настраивается в режим СТС (сброс по совпадению с регистром сравнения).
В двух словах: Таймер Т1 считает от 0 и до значения, расположеного в регистре OCR1A (COMPARE1A). После чего на выводе 15 (OC1A) МК Atmega8 уровень меняется на противоположный. Затем счет начинается с нуля, и все повторяется снова. Таким образом, изменяя значение в регистре OCR1A мы изменяем частоту сигнала на выходе.
COMPARE1A = &H3D09:

COMPARE1A = &H061A:
Такой метод хорош тем, что генерация импульсов будет стабильной, независимо от того, что мы делаем в основном цикле. Ну а кнопки прикрутить дело не хитрое...
Впрочем, Вы говорили о семи каналах. Тут уже сложнее, если на таймере делать. Но тоже возможно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
edm2007 спасибо за помощь, попробую разобраться что к чему.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Пожалуйста. Как разберетесь с принципом работы таймера, его режимами / настройками и расчетами, запросто сможете написать дерганье ногами на нужное количество каналов.
Вот книжка полезная Микроконтроллеры AVR семейства Mega А.В.Евстифеев. По сути своей, сборный даташит на русском для всего семейства.
Это та же история, но для Attiny (на всякий случай) Микроконтроллеры AVR семейства Tiny. Руководство пользователя.
Ну и небольшой но полезный калькулятор для расчета таймеров, UART и прочего (но для начала лучше разобраться и посчитать самому). AVRcalc.
Код: Выделить всё
.............................
Freq(1) = 10
Freq(2) = 50
Freq(3) = 100
Freq(4) = 150
.............................
Вот книжка полезная Микроконтроллеры AVR семейства Mega А.В.Евстифеев. По сути своей, сборный даташит на русском для всего семейства.
Это та же история, но для Attiny (на всякий случай) Микроконтроллеры AVR семейства Tiny. Руководство пользователя.
Ну и небольшой но полезный калькулятор для расчета таймеров, UART и прочего (но для начала лучше разобраться и посчитать самому). AVRcalc.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Добрый день всем.
Помогите мне пожалуйста разобраться с микросхемой. http://www.nxp.com/documents/data_sheet/PCA9632.pdf
Собственно что я понял из даташита -
К микросхеме обращаться по адресу - (для записи) &HC4 и (для чтения) &HC5
Первые два байта оставить без изменения - &H00 и &H01.
А в &H02, &H03, &H04, &H05 записать 8-битные значения рабочего цикла для каждого канала.
В &H06 можно записать групповой рабочий цикл.
Но оно у меня почему то отказывается работать. Если запишу во все регистры значения "от балды" то иногда можно что то регулировать.
Вот кусок кода -
Помогите мне пожалуйста разобраться с микросхемой. http://www.nxp.com/documents/data_sheet/PCA9632.pdf
Собственно что я понял из даташита -
К микросхеме обращаться по адресу - (для записи) &HC4 и (для чтения) &HC5
Первые два байта оставить без изменения - &H00 и &H01.
А в &H02, &H03, &H04, &H05 записать 8-битные значения рабочего цикла для каждого канала.
В &H06 можно записать групповой рабочий цикл.
Но оно у меня почему то отказывается работать. Если запишу во все регистры значения "от балды" то иногда можно что то регулировать.
Вот кусок кода -
Код: Выделить всё
Config Sda = Portd.1 : Config Scl = Portd.0
Const Pca96w = &HC4
Const Pca96r = &HC5
Dim Command As Byte , Address As Byte
Cursor Off
Cls
Do
Locate 1 , 1 : Lcd "ad=" ; Address ; " com=" ; Command ; " "
If Plus = 1 Then : Waitms 200 : Incr Command : End If
If Minus = 1 Then : Waitms 200 : Decr Command : End If
If Plus = 1 And Minus = 1 Then : Waitms 400 : Incr Address : End If
I2cstart
I2cwbyte Pca96w
I2cwbyte &H02
I2cwbyte Command
I2cwbyte Command
I2cwbyte Command
I2cwbyte Command
I2cstop
Loop