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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Привет, котятки! Кто-нибудь знает как подключить простой ЖК индикатор (без контроллера на плате) к МК? И как вообще с ним работать? Хотя бы ссылку киньте... :))
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

vanyap1 писал(а):Подскажите пожалуйста как записать в микросхему бит по шине i2c? К примеру в микросхеме РТК включить или выключить будильник. По адресу H07 можно записать 8 бит для разных функций, а мне надо записать - 00001000, тоесть только 1 на том месте и не тронуть соседние. Все вместе я могу записать без труда, к примеру так -

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

I2cstart
I2cwbyte &HA2    'Адрес микросхемы
I2cwbyte &H07    'Куда записать
I2cwbyte &H08    'Что записать
I2cstop


То что до и после этого бита трогать нельзя.
Может как то по маске его можно изменить, или читать этот байт, проверять и менять в зависимости что там еще записано.


Присоединяюсь к вопросу. Нужно и считать и записать седьмой бит нулевого байта в DS1307. Никак не въеду, как.
С уважением,
Алексей.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

Gordon Shumway писал(а): Нужно и считать и записать седьмой бит нулевого байта в DS1307.
Считали нулевой байт, допустим в переменную Byte. Потом установили седьмой бит и записали обратно в DS1307.

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

Byte.7 = 1
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

edm2007 писал(а):Привет. Да чего уж далеко ходить-то: Управление ЖКИ без контроллера: цифровой термометр, цифровой дисплей. :wink:
Михаил, спасибо за ссылку, только вот там на СИ исходник, а у меня с СИ как то дружба не получается (пока). Так уж вышло. :dont_know: Единственно полезное во всем тексте (для меня лично) это:
...Процедура вывода представляет собой инвертирование портов, подключенных к ЖКИ, в теле прерывания по переполнению таймера с частотой около 100Гц. Визуально я не увидел разницы между частотами от 50 до 400Гц, ну а поскольку рекомендаций производителя для этих ЖКИ я не знаю, остановился на 100...
То есть, я так понимаю, надо в прерывании таймера (например Timer0 или Timer2) использовать процедуру Pulseout или Shiftout, так?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Там исходник чудесно прокомментирован. Про Pulseout или Shiftout не совсем понял, это как бы разные команды... Индикатор через регистры подключается?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

Мурик писал(а):
Gordon Shumway писал(а): Нужно и считать и записать седьмой бит нулевого байта в DS1307.
Считали нулевой байт, допустим в переменную Byte. Потом установили седьмой бит и записали обратно в DS1307.

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

Byte.7 = 1


Спасибо ! Понял, разобрался ! :)
С уважением,
Алексей.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

edm2007 писал(а):Там исходник чудесно прокомментирован. Про Pulseout или Shiftout не совсем понял, это как бы разные команды... Индикатор через регистры подключается?
Ну понятно, что через регистры, а то так много ног МК задействовать надо... Тогда, все же, по-видимому Shiftout? Только вот выводы сегментов и общие надо подключать в противофазе. Это как в Баскоме осуществить? Кусочек кода можно?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Ну так мне-то не понятно, в статье как пример без регистров. :) Я еще раз говорю, Pulseout и Shiftout это в принципе разные команды. Shiftout например, раскладывает число на битовые составляющие, и последовательно выдает его на указанный пин. А Puleout выдает импульс заданной длительности. Потому вопрос совсем непонятен. Если же речь идет о работе с регистрами, то там используются команды Pulseout И Shiftout.

А в прерывании мы постоянно инвертируем данные вместе с общим электродом, и загружаем их в регистры.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Объясню по-другому. Имеется 6-разрядный ЖКИ с мультиплексом 1:3. То есть на каждый вывод COMi приходится три вывода SEGi. Чтобы не городить частокол из ножек МК (и даже в этом случае (для Меги16, например) их не хватит) и не использовать отдельный драйвер, типа HT1621 (Holtek), хочу применить регистры. Как записать информацию в регистры, а затем вывести ее на выходы - понятно. Непонятно как сделать так, чтобы на выводы SEGi сигнал шел в положительной полярности, а на выводы COMi - в отрицательной, т.е. - в противофазе. Т.к., если сигналы будут синфазными, то ничего светиться не будет.
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Так я и говорю, кто мешает инвертировать данные-то?

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

Dig1 = &B01010101   ' было 01010101 
Dig1 = Not Dig1         ' стало 10101010
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

И то правда, чего-то я тормознул! :)) Спасибо, буду разбираться. :solder:
Цапу крутить надо!!! Ку или не ку?
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

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

Сообщение vanyap1 »

Gordon Shumway писал(а):
Мурик писал(а):
Gordon Shumway писал(а): Нужно и считать и записать седьмой бит нулевого байта в DS1307.
Считали нулевой байт, допустим в переменную Byte. Потом установили седьмой бит и записали обратно в DS1307.

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

Byte.7 = 1


Спасибо ! Понял, разобрался ! :)


Byte.7 это есть переменная типа Byte, с указанным после точки номером бита? И можно ли приравнять Byte.7 к переменной типа Bit?

И еще по поводу этого, если мне нужно записать трехбитовое число в конец этого байта или начало, или где угодно, то как это сделать?
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

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 в вопросах и ответах

Сообщение Gordon Shumway »

Доброго времени суток !

Вот тут уважаемый MrShilov выложил библиотеку для работы с монохромными дисплеями от аппаратов Nokia (1100, 1101, 1200 и т.д.) в Bascom AVR, за что ему огромное спасибо ! Библиотека с подробным описанием, схемами включения дисплеев и примером.

От себя добавлю, что все работает, но компилируется без ошибок только в свежей версии Bascom 2050 (в 1.11.9.8 лезут ошибки).
Для проверки и для того, чтобы понять, как работать с дисплеем и библиотекой, набросал часики (да, опять часы ! :) ) на Меге8 и DS1307, использовал дисплей от нокии 1100 (китайский). Обязательно нужно использовать резисторные делители и стабилизатор 3.3 вольта для питания дисплея, так как вся схема питается от 5 вольт (от 3 вольт DS1307 не стартует), см. схему включения дисплея у MrShilov.

Изображение

Так же нашел модель для протеуса для некоторых дисплеев, в том числе и для дисплея от нокии 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 скачиваний
С уважением,
Алексей.
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

Добрый день всем котам и котяткам.
Я котенок с недельным стажем по программированию. Что то туго дается БАСКОМ.
Начал читать этот форум с первой страницы, за несколько дней дошел до 48 стр. прочту весь конечно. У меня большая просьба к опытным. Покажите, как сделать простенькую прогу для атмеги8 на 1мгц. Двумя кнопками изменять частоту выходного сигнала. При нажатии первой кнопки частота увеличивается на 1 гц, а при нажатии второй кнопки частота уменьшается на 1 гц.
Заранее спасибо.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Добрый.

Самым простым и точным способом является использование таймера. В элементарном случае код будет представлять всего несколько строк:

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

'**********[Псевдокоманды управления]**************

$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:

Изображение

Такой метод хорош тем, что генерация импульсов будет стабильной, независимо от того, что мы делаем в основном цикле. Ну а кнопки прикрутить дело не хитрое...

Впрочем, Вы говорили о семи каналах. Тут уже сложнее, если на таймере делать. Но тоже возможно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

edm2007 спасибо за помощь, попробую разобраться что к чему.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Пожалуйста. Как разберетесь с принципом работы таймера, его режимами / настройками и расчетами, запросто сможете написать дерганье ногами на нужное количество каналов.

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

.............................
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 в вопросах и ответах

Сообщение vanyap1 »

Добрый день всем.

Помогите мне пожалуйста разобраться с микросхемой. 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
Ответить

Вернуться в «AVR»