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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Не умеет. Исполняемый оператор в строке может быть только один. Мне тоже жаль. :cry:
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

У меня вопрос по дисплеям нокиа 3310 и 5110-может кто решил
Как рисовать линии?бывает ли такая библиотека?или лучше создавать буфер на 504 ячейки,складывать рисунок туда и потом все передавать в жки как картинку?
Аватара пользователя
andrusha152
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

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

Сообщение andrusha152 »

[uquote="Novice user",url="/forum/viewtopic.php?p=3286638#p3286638"]вопрос по I2C
Одно устройство подключено по I2C к одним портам(Config Scl = Portc.5,Config Sda = Portc.4),второе к другим(Config Scl = Portc.0,Config Sda = Portc.1),как переназначать программно порты?[/uquote]
Удалось решить этот вопрос? Если нет, вот пример с сайта Баскома, случайно нашел.
Спойлер

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

 'name                     : I2C-multibus.bas
'copyright                : (c) 1995-2016, MCS Electronics
'purpose                  : demonstrates I2C multibus library
'micro                    : Mega88
'suited for demo          : no, lib not included in demo
'commercial addon needed  : no
'----------
$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 24
$framesize = 24

Config I2cbus = 0 , Scl = Portc.0 , Sda = Portc.1           'each bus requires a configuration of the SCL and SDA pins
Config I2cbus = 1 , Scl = Portc.2 , Sda = Portc.3           'this sample creates 4 busses
Config I2cbus = 2 , Scl = Portd.2 , Sda = Portd.3
Config I2cbus = 3 , Scl = Portd.4 , Sda = Portd.5

Dim J As Byte

For J = 0 To 3                                              'the first bus is 0 !!!
 I2cbus = J                                                 'select the BUS
I2cinit                                                     'init the pins and state
Next

Do
For J = 0 To 3
   I2cbus = J                                               'select the bus
  I2csend &H40 , &B01010101                                 'send some data
Next
Waitms 100
Loop

End
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

о,спасибо,попробую!
Аватара пользователя
nik_81
Родился
Сообщения: 3
Зарегистрирован: Пт июн 20, 2014 09:15:16
Откуда: Россия, Пенза.

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

Сообщение nik_81 »

Изображение
Накидайте пожалуйста простую программу. Аттини 2313. Пусть на порт PB3 будет повешена кнопка, а на порт PB2 светодиод. кнопка подтянута на плюс внешним резистором 10Ком. Надо чтобы светодиод вспыхивал каждое 3-е нажатие кнопки например на 100милисекунд.
то есть жмём кнопку 1-2-3 (вспышка) 4-5-6 (вспышка) 7-8-9 (вспышка)
Да, антидребезг нужен.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

[uquote="nik_81",url="/forum/viewtopic.php?p=3389902#p3389902"]Накидайте пожалуйста простую программу....[/uquote]
там делов то,можно и самому сладить...
Аватара пользователя
nik_81
Родился
Сообщения: 3
Зарегистрирован: Пт июн 20, 2014 09:15:16
Откуда: Россия, Пенза.

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

Сообщение nik_81 »

4-й день бьюсь. Уже надоело. Без антидребезга у меня то на 2-е, то на 4-е нажатие срабатывает. А как всё это написать через прерывания я не осиляю. Готового примера в сети тоже не нашёл.
Аватара пользователя
Adagumer
Поставщик валерьянки для Кота
Сообщения: 2283
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

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

Сообщение Adagumer »

nik_81 писал(а):Готового примера в сети тоже не нашёл.



A:
If Pind.2 = 0 Then 'при нажатии кнопки
Waitms 50 'антидребезг
Bitwait Pind.2 , Set 'ждём отпускания кнопки

Else
Goto A
End If
Аватара пользователя
nik_81
Родился
Сообщения: 3
Зарегистрирован: Пт июн 20, 2014 09:15:16
Откуда: Россия, Пенза.

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

Сообщение nik_81 »

Спасибо за помощь. Получилось следующее. Всё работает в протеусе, но почему то моргает не 0,1 Сек а где-то 1-1,5Сек, как будто код выполняется очень медленно или это просто глюк протеуса? И ещё вопрос почему при объявлении переменной для Аттини 13 протеус выдаёт ошибку, а для 2313 всё нормально. Не ужели не хватает памяти ? использую протеус версии 8,6 sp2

$regfile = "attiny2313.dat"
$crystal = 8000000
Config Portb.3 = Input 'настройка пина b3 на вход(S1)
Config Portb.2 = Output 'настройка пина b2 на выход(LED1)
Dim N As Byte ' Объявляем переменную N как байт
Do 'начало цикла
If Pinb.3 = 0 Then 'опрос кнопки и присвоение переменной N соответствующего значения
Waitms 10 ' задержка антидребезга
Bitwait Pinb.3 , Set 'ждём отпускания кнопки
N = N + 1 'с каждым нажатием увеличиваем N на 1
End If
If N = 3 Then Portb.2 = 1 Else Portb.2 = 0 ' 0 /@
If N = 3 Then waitms 100 ' Если светит, ждём 0,1С (моргаем)
If N = 3 Then N = 0 'N равен 3, то обнуляем
Loop 'конец цикла

End
Аватара пользователя
andrusha152
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

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

Сообщение andrusha152 »

Немного причешу ваш код

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

$regfile = "attiny2313.dat"
$crystal = 8000000
Config Pinb.3 = Input                                       'настройка пина b3 на вход(S1)
Config Portb.2 = Output                                     'настройка пина b2 на выход(LED1)
Dim N As Byte                                               ' Объявляем переменную N как байт
Config Debounce = 150                                   ' антидребезг
Reset Portb.2
N = 0
Do
If Pinb.3 = 0 Then
Bitwait Pinb.3 , Set
Incr N
If N = 3 Then
 Set Portb.2
 Waitms 100
 Reset Portb.2
 N = 0
End If
End If
Loop                                                        'конец цикла
End

Чтобы в Протеусе показывало правильно уберите галочку с фьюза CKDIV8.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

Не могу понять в чем дело-по прерыванию INT0 аттини2313а не просыпается,может еще чего не хватает?
Спойлер$Regfile = "attiny2313a.dat"
$Crystal = 4000000
Config PORTB.2 = Output
Config Int0 = Low Level
On Int0 Button:
Enable Interrupts
Enable Int0
Do
Set PORTB.2
Wait 1
Reset PORTB.2
Powerdown
Loop
Button:
'Gifr = 64 'Wait 1
Return
End
Аватара пользователя
Microtech
Поставщик валерьянки для Кота
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва
Контактная информация:

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

Сообщение Microtech »

У меня работает Ваш код.
Спойлер$Regfile = "attiny2313a.dat"
$crystal = 4000000
Config PORTB.2 = Output
Config Int0 = Low Level
Set Portd.2
On Int0 Button
Enable Interrupts
Enable Int0
Do
Set PORTB.2
Wait 1
Reset PORTB.2
Powerdown
Loop
Button:
'Gifr = 64 'Wait 1
Return
End

Убрал двоеточие после "On Int0 Button" (не влияет ни на что) и добавил "Set Portd.2", чтобы не паять резистор к плюсу.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

У меня резистор к плюсу,в Powerdown не просыпался никак,в idle все норм но потребление около 1 ма-так и оставил
Аватара пользователя
Microtech
Поставщик валерьянки для Кота
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва
Контактная информация:

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

Сообщение Microtech »

Я запускал такты от внутреннего генератора на 8 МГц. Возможно, причина в настройках fuse бит, нужно включить задержку запуска?
domrustika
Грызет канифоль
Сообщения: 257
Зарегистрирован: Чт мар 22, 2007 13:50:33
Откуда: казань
Контактная информация:

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

Сообщение domrustika »

ребят нужна помощь. есть код такой
Спойлер

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

Do
          1wreset
          If Err = 1 Then
          Cls
          Lcd "Err"
Do
Loop
Else
            1wwrite &HCC
            1wwrite &H44
            Waitms 750
            1wreset
            1wwrite &HCC
            1wwrite &HBE
            A = 1wread()
            B = 1wread()
            If A > 248 Then
            A = &HFF - A
            B = &HFF - B
            E = 2
Else
            E = 1
            End If
            C = A / 16
            D = B * 16
            C = C + D
            If E = 2 Then C = C + 1
            If E = 1 And C = 0 Then E = 0
            Cls
            Lcd "V O D A= "
            If E = 0 Then Lcd " " ; C ; "'" ; "C"
            If E = 1 Then Lcd "+" ; C ; "'" ; "C"
            If E = 2 Then Lcd "-" ; C ; "'" ; "C"
End If

         If C <= 27 Then       ' разМЫКАЕТ 2 И 3 контакт сверху реле     . зеленый диод на реле ГОРИТ.              это для ВыкЛЮЧЕНИЯ вентиляторов.

          Reset Out_1
          Locate 2 , 1
           Lcd "C O O L E R  O F F"
          End If


           If C > 27 Then            ' в ином случае Замыкает 2 и 3 контакт сверху реле . зеленый диод на реле НЕ горит.   это для ВКЛЮЧЕНИЯ вентиляторов.
          Set Out_1
           Locate 2 , 1
           Lcd "C O O L E R  O N"

            End If

код работает так. при T более 27 градусов реле включает нагрузку- вентиляторы. соответственно менее 27 реле не включается. НО
при таком коде считывается данные термодатчика каждую секунду, из за чего постоянно включается \выключается реле.
подскажите как изменить код так, что бы работало след образом -
1. измерял температуру не каждую секунду, а раз в 10 минут.
2. прошло 10 минут - измерил, если более 27 включил реле, снизил до 27 и выключился.
помогите пожалуйста!
Аватара пользователя
andrusha152
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

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

Сообщение andrusha152 »

[uquote="domrustika",url="/forum/viewtopic.php?p=3436182#p3436182"]снизил до 27 и выключился.[/uquote]
Так не получится. Измерение раз в 10 минут. За это время температура может снизиться и до 20 градусов и ниже. Отсчет времени лучше всего делать по прерыванию таймера. Берете переменную, в обработчике прерывания таймера инкременируете ее. Когда она достигает определенного значения, меряете температуру, переменную сбрасываете в ноль. Включаете вентилятор. Но вентилятор будет крутить до следующего измерения.
domrustika
Грызет канифоль
Сообщения: 257
Зарегистрирован: Чт мар 22, 2007 13:50:33
Откуда: казань
Контактная информация:

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

Сообщение domrustika »

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

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

Сообщение vanyap1 »

Этот код вообще не должен работать

Do
1wreset
If Err = 1 Then
Cls
Lcd "Err"
Do <<<<<<<<<
Loop <<<<<<<<<< Шта энто? как отсюда выбраться?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Так, видимо, и не планировалось оттуда выбираться. Если датчика нет, то усё, приехали. :tea:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Kotэ
Родился
Сообщения: 5
Зарегистрирован: Пт май 13, 2011 18:45:36

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

Сообщение Kotэ »

BASCOM-AVR 2.0.8.1 и BASCOM-8051 2.0.16.0 http://rutracker.org/forum/viewtopic.php?t=5607303
Ответить

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