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

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

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

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

amv2000 писал(а):
Gordon Shumway писал(а):Для чего введена переменная "Z_cross_f" ?
3. Для чего сконфигурирован timer0 ? Не нашел, где он используется...

Здесь очевидно прерывание занимается тем, чем и должно. В частности устанавливает флаг Z_cross_f (это же кусок из программы вероятно далее, где то используется)


Да, видимо так. И, похоже, с timer0 та же ситуация. Остается вопрос с частотой.
С уважением,
Алексей.
Реклама
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

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

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

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

zero648 писал(а):Частота МК должна быть 8Мгц при таких параметрах таймера 1


Да, спасибо, так заработало.

Подскажите, плз, как правильно сделать защиту от дребезга кнопки ? Раньше вставлял waitms 250 - работало, но здесь почему-то при вставке waitms 250 лампа вообще перестает гореть. Вроде-ж waitms не отменяет работу прерываний ?

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

$regfile = "attiny2313.dat"
$crystal = 8000000

Config Portb.1 = Output
Config Pinb.0 = Input

Dim Level_dimmer As Byte
Dim Dimmer_on As Bit
Dim Dimmer_delay_w As Word



Dimmer_out Alias Portb.1                                    ' нога   - выход, к оптосимистору на симистор
Key Alias Pinb.0


Config Int0 = Change                                        ' Установка прерывания INT0 на изменение сигнала
On Int0 Z_cross_int
                                                 ' Прерывание на вход датчика перехода синусоиды через ноль

Config Timer1 = Timer , Prescale = 8                        ' конфигурируем таймер 1

On Ovf1 Ovf1_my Nosave : Enable Ovf1

Enable Interrupts
Enable Int0
Enable Timer1
Start Timer1


Do

While Key = 1
Wend

'WAITMS 250  <----тут пробовал

Incr Level_dimmer
If Level_dimmer = 0 Then Level_dimmer = 1
If Level_dimmer = 8 Then Level_dimmer = 1





'----------
Dimmer_modul:                                               ' ---------- УПРАВЛЕНИЕ ДИММЕРОМ ----------

   If Level_dimmer = 0 Then
      Dimmer_on = 0
      Disable Ovf1
     Else
      Dimmer_on = 1
      If Level_dimmer < 8 Then Enable Ovf1
   End If

   If Level_dimmer > 7 Then
     ' Dimmer_delay_w = &HFFFC ' Ярко горит - 230v
     Disable Ovf1
     Dimmer_out = 1
     Level_dimmer = 8                                       ' <<<<<<<<<<<<<<<<<<<<<<<< ограничитель
   End If
   If Level_dimmer = 1 Then Dimmer_delay_w = 57900          ' Тускло горит - 25v
   If Level_dimmer = 2 Then Dimmer_delay_w = 58300          ' 51v
   If Level_dimmer = 3 Then Dimmer_delay_w = 58700          ' 78v
   If Level_dimmer = 4 Then Dimmer_delay_w = 59000          ' 85v
   If Level_dimmer = 5 Then Dimmer_delay_w = 59400          ' 149v
   If Level_dimmer = 6 Then Dimmer_delay_w = 59900          ' 175v
   If Level_dimmer = 7 Then Dimmer_delay_w = 61100          ' 189v
   Waitus 950

'WAITMS 250  <---- и тут пробовал

Loop



''===============
Ovf1_my:
   If Dimmer_on = 1 Then
     Dimmer_out = 1
     Waitus 90
     Dimmer_out = 0
   Else
     Dimmer_out = 0
   End If
Return


' =============== Обработка прерывания по изменению на INT 0 ==================
Z_cross_int:
   Timer1 = Dimmer_delay_w
Return
С уважением,
Алексей.
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

А что делает этот цикл?

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

While Key = 1
Wend
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

По-моему где-то в этом месте косяк:

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

Do

While Key = 1
Wend

'WAITMS 250  <----тут пробовал

Incr Level_dimmer
If Level_dimmer = 0 Then Level_dimmer = 1
If Level_dimmer = 8 Then Level_dimmer = 1


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

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

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

zero648 писал(а):По-моему где-то в этом месте косяк:

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

Do

While Key = 1
Wend

'WAITMS 250  <----тут пробовал

Incr Level_dimmer
If Level_dimmer = 0 Then Level_dimmer = 1
If Level_dimmer = 8 Then Level_dimmer = 1


PINB.0 куда подтянут к плюсу или минусу? Может надо проверять на ноль когда кнопка нажата? Может в этом месте прога и зацикливается, считая не нажатую кнопку нажатой.
Да и Level_dimmer вроде как постоянно циклично инкременируется?


Pinb.0 подтянут к плюсу, кнопка на минус. Пока pinb.0 =1, крутимся в while-wend.
Иначе - инкремируем level_dimmer и обрабатываем получившееся.
С уважением,
Алексей.
Реклама
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

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

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

Do
Nachalo:
If Key = 1
Incr Level_dimmer
If Level_dimmer = 0 Then Level_dimmer = 1
If Level_dimmer = 8 Then Level_dimmer = 1
Else
If Key = 0 Then Nachalo
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

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

amv2000 писал(а):А не лучше вместо цикла использовать If, циклы отнимают больше драгоценной памяти...

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

Do
Nachalo:
If Key = 1
Incr Level_dimmer
If Level_dimmer = 0 Then Level_dimmer = 1
If Level_dimmer = 8 Then Level_dimmer = 1
Else
If Key = 0 Then Nachalo


Мне кажется, что еще более запутаннее получается. А места в тиньке2313 еще 69 процентов свободно.

Я про антидребезг спрашивал...
С уважением,
Алексей.
SAU
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Вс сен 10, 2006 00:04:03

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

Сообщение SAU »

Привет всем!)
А кто-нибудь работал с дисплеем Nokia 3310 в Баскоме?
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

SAU писал(а):А кто-нибудь работал с дисплеем Nokia 3310 в Баскоме?

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

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

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

SAU писал(а):Привет всем!)
А кто-нибудь работал с дисплеем Nokia 3310 в Баскоме?


Мой проект "Мегатермо", работа с дисплеем nokia3310, кириллица для дисплея nokia3310, продолжение.
С уважением,
Алексей.
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

Gordon Shumway писал(а):Я про антидребезг спрашивал...

Попробуйте сначала подтяните вход:

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

Config Pinb.0 = Input
Set Portb.0
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

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

amv2000 писал(а):
Gordon Shumway писал(а):Я про антидребезг спрашивал...

Попробуйте сначала подтяните вход:

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

Config Pinb.0 = Input
Set Portb.0


Так у меня ж сопртивление на плюс стоит.
С уважением,
Алексей.
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

Gordon Shumway писал(а):Так у меня ж сопртивление на плюс стоит.

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

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

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

amv2000 писал(а):
Gordon Shumway писал(а):Так у меня ж сопртивление на плюс стоит.

Ясно, а в каком месте у Вас кнопка обрабатывается?


В цикле DO. Key - это кнопка. Пока на ней 1 - крутимся в while-wend. Иначе - инкремент и обработка...

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


Config Pinb.0 = Input
key alias pinb.0   

Do

While Key = 1
Wend

'WAITMS 250  <----тут пробовал

Incr Level_dimmer
If Level_dimmer = 0 Then Level_dimmer = 1
If Level_dimmer = 8 Then Level_dimmer = 1





'----------
Dimmer_modul:                                               ' ---------- УПРАВЛЕНИЕ ДИММЕРОМ ----------

   If Level_dimmer = 0 Then
      Dimmer_on = 0
      Disable Ovf1
     Else
      Dimmer_on = 1
      If Level_dimmer < 8 Then Enable Ovf1
   End If

   If Level_dimmer > 7 Then
     ' Dimmer_delay_w = &HFFFC ' Ярко горит - 230v
     Disable Ovf1
     Dimmer_out = 1
     Level_dimmer = 8                                       ' <<<<<<<<<<<<<<<<<<<<<<<< ограничитель
   End If
   If Level_dimmer = 1 Then Dimmer_delay_w = 57900          ' Тускло горит - 25v
   If Level_dimmer = 2 Then Dimmer_delay_w = 58300          ' 51v
   If Level_dimmer = 3 Then Dimmer_delay_w = 58700          ' 78v
   If Level_dimmer = 4 Then Dimmer_delay_w = 59000          ' 85v
   If Level_dimmer = 5 Then Dimmer_delay_w = 59400          ' 149v
   If Level_dimmer = 6 Then Dimmer_delay_w = 59900          ' 175v
   If Level_dimmer = 7 Then Dimmer_delay_w = 61100          ' 189v
   Waitus 950

'WAITMS 250  <---- и тут пробовал

Loop
С уважением,
Алексей.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Сообщение Секретный кот »

Gordon Shumway писал(а):А как в Баскоме можно менять задержку в waitus ? В хелпе написано, что это константа...

Действительно, константа. Хотя компилятор и не ругается на код вида

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

x=100
waitus x

на практике оно не работает! Нужно делать например так:

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

x=100
for i=1 to x
waitus 1
next i
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

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

Секретный кот писал(а):
Gordon Shumway писал(а):А как в Баскоме можно менять задержку в waitus ? В хелпе написано, что это константа...

Действительно, константа. Хотя компилятор и не ругается на код вида

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

x=100
waitus x

на практике оно не работает! Нужно делать например так:

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

x=100
for i=1 to x
waitus 1
next i


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

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

Сообщение Igor_67 »

Секретный кот писал(а):
Gordon Shumway писал(а):А как в Баскоме можно менять задержку в waitus ? В хелпе написано, что это константа...

Действительно, константа. Хотя компилятор и не ругается на код вида

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

x=100
waitus x

на практике оно не работает! Нужно делать например так:

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

x=100
for i=1 to x
waitus 1
next i

Ну вот, неправда Ваша! Вот неправда! Как-то очень давно писал прогу для бегущих огней. Так там для автоматического изменения скорости бегущего огня, как раз и использовал переменную для Waitms. А для генератора - переменную для Waitus. И все работает по сей день. О как бывает!!! Кстати, вот выдержка из "Хэлпа":
Action

Suspends program execution for a given time in uS.





Syntax

WAITUS uS







Remarks

US
The number of microseconds to wait. (1-65535)



This must be a constant. Not a variable!

In version 1.12.x.x and higher you can use a variable as well.



Да, она вроде бы и константа, но начиная с версии 1.12.х.х - можно и как переменную!
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Сообщение Секретный кот »

Igor_67 писал(а):Ну вот, неправда Ваша! Вот неправда! Как-то очень давно писал прогу для бегущих огней. Так там для автоматического изменения скорости бегущего огня, как раз и использовал переменную для Waitms. А для генератора - переменную для Waitus. И все работает по сей день.

Поменьше эмоций :))
А я пытался сделать генератор переменной частоты, и не работало ни хрена. Частота следования импульсов с паузой waitus t никак не хотела меняться. Причём я долго не мог найти причину, пока не догадался на пробу заменить переменную константой.

Igor_67 писал(а):Кстати, вот выдержка из "Хэлпа":

This must be a constant. Not a variable!

Вот именно! Чёрным по английскому, как говорится :)))


Igor_67 писал(а):In version 1.12.x.x and higher you can use a variable as well.

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

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

Сообщение Igor_67 »

Ну так и вот... :)) Я таки был прав, т.к я использую версию 2.0.7.1! :))
Цапу крутить надо!!! Ку или не ку?
Ответить

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