Обсуждаем контроллеры компании Atmel.
Ответить

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

Пт ноя 29, 2019 11:30:06

Вы объявили режим CTC, а ждете прерывание по переполнению, которое никогда не запустится, т.к. счетчик не доходит до MAX.
Код:
Enable OC1     'Timer1

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

Пт ноя 29, 2019 20:43:01

Я подозревал, что тут дело в неправильной организации таймера. У меня в этом деле мало опыта. Подскажите, как правильно запустить таймер1 по переполнению. Мне это пригодится в будущем.

Добавлено after 44 minutes 9 seconds:
С таймером разобрался - нашел пример в инете. ШД включается и останавливается через 3 сек, как мне и надо. Осталось только понять, почему МК вновь не просыпается при срабатывании геркона.

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

Пт ноя 29, 2019 21:22:46

Код:
Config Int0 = Falling

У вас прерывание происходит по спаду сигнала, т. е. при переходе c высокого уровня на низкий. В программе подтяжки нет. Как подключен геркон?

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

Сб ноя 30, 2019 07:42:35

Геркон подтянут к плюсу через R=10к. Не стал возиться со схемой, т.к. она очень простая. Переделал нижнюю часть кода. Теперь команда Спать - внутри цикла Do-Loop. Но все равно МК не просыпается от геркона. Пока не могу понять причину. Вот основная часть кода:
Код:
Do
If F = 1 Then                                               'ñðàáîòàë ãåðêîí
   Led = 1                                                  'çàãîðåëñÿ ñâåòîäèîä
   Decr S
   If S = 0 Then                                            'ðàññ÷åò íîìåðîâ îáìîòîê ØÄ
    S = 8
   End If

   Select Case S

   Case 1 : Portb = &B00000001
   Case 2 : Portb = &B00000011
   Case 3 : Portb = &B00000010
   Case 4 : Portb = &B00000110
   Case 5 : Portb = &B00000100
   Case 6 : Portb = &B00001100
   Case 7 : Portb = &B00001000
   Case 8 : Portb = &B00001001

   End Select

   Waitus 1000

End If

If A = 5 Then                                               'A=5 - ïðîøëî 5 ñåêóíä
   Stop Timer1
   Led = 0 : F = 0 : A = 0
   Powerdown                                                'ÌÊ óñíóë
End If

Loop

End

Pusk:                                                       'íàæàòà êíîïêà ïóñêà
Start Timer1
F = 1
Return

Timecount:                                                  'ïîäñ÷åò âðåìåíè
Incr A
Return


Добавлено after 31 minute 40 seconds:
Заменил Powerdown на Idle. МК засыпает и нормально просыпается при срабатывании геркона. НО! Померил потребление в разных режимах. В режиме сна потребление-260ма, в режиме вращения ШД - 120ма. Т.е. в режиме сна схема кушает в 2 раза больше. Почему - не могу понять. Не сталкивался с этим раньше. Хотя, конечно, практической пользы для меня от засыпания МК нет, т.к. питание будет от сети. Но все равно что-то здесь неправильно, учитывая то, что МК будет спать по 12 часов и включаться на 3-5 сек.

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

Сб ноя 30, 2019 20:24:57

В хелпе Баскома указано "When an END statement is encountered, all interrupts are disabled and a never-ending loop is generated".
У Вас имеется комбинация
Ex:
Stop Timer1
Led = 0 : F = 0 : A = 0
Powerdown
End - не в этом ли дело?

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

Сб ноя 30, 2019 23:02:18

Код:
Config Int0 = Falling
Думаю, дело в этой строке. Т.к. INT0 выводит камень из POWER DOWN только по низкому уровню, а по спаду нет. Студия 3.21 дизассемблирует .hex и, при прогоне в симуляторе, не даёт завестись камню. Закомментировал эту строку и становится что-то похожее на правду.

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

Вс дек 01, 2019 08:52:50

Ну вреде бы со всем почти разобрался. Избавился от безусловного перехода на метку Ex, теперь все работает в цикле Do-Loop. Вместо команды Powerdown сделал Idle- МК просыпается нормально. Но самое главное - сделал подачу питания не ULN2003 через герконовое реле, используя еще один порт. Так что ШД теперь вообще не греется.
Остался один непонятный момент. Я решил добавить в схему реверс ШД, используя Config Int1=Low_level. Написано вроде, что прерывание в таком случае генерируется, пока держится низкий уровень. Добавил еще одну кнопку для реверса. Я рассчитывал, что ШД будет работать, пока нажата кнопка реверса, а при отпускании должен остановиться. Но ШД почему-то не хочет останавливаться при отпускании кнопки. Может быть, все это должно работать как-то по другому? В принципе, это не смертельно, в крайнем случае буду использовать Timer1. Просто непонятно.

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

Чт дек 05, 2019 07:33:18

Всем привет, есть задача.
На вход АЦП подключен переменный резистор, при вращении от начальной до конечной меняется значение АЦП от значения 1 до 10, то есть в минимальном положении 1, в середину крутнули 5, в крайнее положение - 10

Необходимо:
Допустим, крутанули резистор так, что значение АЦП у нас 4, выключили питание, включили.

Как задать как бы гистерезис +/-2, то есть, ключили питание, значение АЦП у нас 4, крутим резистор, пока значение АЦП не вышло за пределы 2 или 6 то светодиодом мы не светим.

То же самое если например было значение АЦП 5, включаем питание, при вращении резистора пока значение АЦП не будет 3 или 7 светодиод не включаем.

Получается, надо при включении питания к текущему значению АЦП применить условие сравнения, что ли
типа считали АЦП, оно = 5,
Тогда если оно не выходит за пределы <3 and >7 then
ничего не делаем
else
включаем диод.

НО, не распишешь же такое условия для каждого значения АЦП от 1 до 10,

помогите плз.

Добавлено after 1 minute 8 seconds:
то есть, считал значение ацп, и добавляешь к нему гистерезис, плюс минус 2 вольта к примеру, если через какое то время это значенеи вышло за пределы - включаем диод, если покрутили резистор к примеру.

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

Чт дек 05, 2019 08:04:46

Считываем АЦП, две переменные min_ и max_. К одной +2, к другой -2. И сравнение значения с этими переменными.

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

Чт дек 05, 2019 08:08:23

Хорошо,а как реализовать именно этот участок кода, где идет сравнение? Если кто согласен помочь, напишите почту, могу благодарность на телефон кинуть, понимаю, что благотворительностью не все хотят заниматься)

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

Чт дек 05, 2019 16:53:17

Хорошо,а как реализовать именно этот участок кода, где идет сравнение?


Исходя из описания, как-то, видимо, так.
Код:

...
OnStartADVar = GetADC(0);
OnStartMax = OnStartADVar + 2
OnStartMin = OnStartADVar – 2

Do

CurADVar = GetADC(0)
If CurADVar => OnStartMin AND CurADVar <= OnStartMax Then
'do something
Esle
'do something else
End If

Loop
...



Или мимо?

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

Пт дек 06, 2019 12:59:22

Код:

...
OnStartADVar = GetADC(0);
OnStartMax = OnStartADVar + 2
OnStartMin = OnStartADVar – 2

Do

CurADVar = GetADC(0)
If CurADVar => OnStartMin AND CurADVar <= OnStartMax Then
'do something
Esle
'do something else
End If

Loop
...




Вроде то, что надо. За наводку спасибо, буду колдовать. О результатах сообщу.

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

Пн дек 16, 2019 14:47:11

Здравствуйте. Не натыкался кто на библиотеку для работы с дисплеем на контроллере - st7586?

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

Вс янв 12, 2020 19:32:43

Странный глюк штатного прошивальщика в BascomAvr 2.0.7.1
Захотел прошить Attiny2313A. В исходнике указал
$regfile = "ATtiny2313A.DAT"
Вставляю Attiny2313A в USBASP, жму F4 - идентификация. Он ругается, что найденная 2313 не соответствует указанной 2313A
Если указываю
$regfile = "ATtiny2313.DAT", то не ругается, заявляет, что нашел 2313A и дальше прошивается нормально.
Пока баг вылечил просто тем, что переименовал рег.файл 2313 в 2313A.
Может, я что-то не так делаю?

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

Чт янв 16, 2020 00:19:24

Вопрос.
Если мне нужно выбрать из общего потока цифробуквенных данных только цифры от 0 до 9, то писать
If I >= 0 And I <= 9 Then
или есть более правильные варианты?

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

Чт янв 16, 2020 00:26:26

I это string*1?
Если да то

If ASC(I) >= 30 And ASC(I) <= 39 Then


https://avrhelp.mcselec.com/index.html?asc.htm

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

Чт янв 16, 2020 00:34:05

I это string*1?
Если да то
If ASC(I) >= 30 And ASC(I) <= 39 Then
https://avrhelp.mcselec.com/index.html?asc.htm

Byte, просто я предполагал, что вместо >= AND <= есть другие варианты. Кстати, я сначала вообще думал >= Or <= но оно не работало!

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

Чт янв 16, 2020 00:35:52

Откуда в Byte - буквы? Это 8 битовая переменная. Там может быть только 0-255

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

Чт янв 16, 2020 00:59:56

Откуда в Byte - буквы? Это 8 битовая переменная. Там может быть только 0-255

В потоке данных там и буквы и цифры в коде ASCII. Вот мне и надо взять из потока только цифры.
то есть это соответственно
If I >= 48 And I <= 57 Then (если в коде ASCII)

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

Чт янв 16, 2020 16:02:23

goldskif писал(а):Вставляю Attiny2313A в USBASP, жму F4 - идентификация. Он ругается, что найденная 2313 не соответствует указанной 2313A
МК куплены в Китае?
Может перемаркировка?
Ответить