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

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

Сообщение vem566 »

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

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

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

Сообщение 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
Мудрый кот
Сообщения: 1710
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

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

Сообщение nik_81 »

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

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

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

Сообщение nik_81 »

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

Сообщение Adagumer »

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

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

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

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

Сообщение 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.
Мудрый кот
Сообщения: 1710
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Сообщение 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
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва

Сообщение 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", чтобы не паять резистор к плюсу.
Контактная информация:
Мудрый кот
Сообщения: 1710
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

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

Сообщение Microtech »

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

Сообщение 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 и выключился.
помогите пожалуйста!
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

Сообщение andrusha152 »

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

Сообщение domrustika »

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

Сообщение vanyap1 »

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

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

Сообщение edm2007 »

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

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

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

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