Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
BASCOM AVR в вопросах и ответах
я зашел, думал тут АСМ, а тут БАСМ,
посмотри как таймер настроен на 272 стр. этого же форума 5е сообщение снизу (от КОТика) сразу под заголовком "настройка шим" настраивется таймер (правда 0й) попробуй по аналогии
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Реклама
Как пример, для AT2313:
Код: Выделить всё
Config Timer1 = Timer , Prescale = 256 , Clear Timer = 1 ' 1/8000000 = 0,125мкс * 256 * 31250 = 1 cек
Compare1a = &H7A12 ' конфигурация регистра сравнения, для отсчета 1 секунды
On Oc1a 1_sec ' вектор прерывания совпадения Т1
Enable Interrupts ' разрешаем прерывания
Enable Oc1a ' по совпадению в том числе
'-----------------------------------------------------------------------------------------------------------
Do
Loop
'-----------------------------------------------------------------------------------------------------------
1_sec: ' обработка прерывания отсчета 1 секунды
...
Return
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
[uquote="OLEGKARAS",url="/forum/viewtopic.php?p=3140129#p3140129"]Как настроить прерывание по таймеру чтобы счетчик считал секунды ? Камень ATMEGA32 , внутренний кварц 8 МГц.[/uquote]
Зачем же такие сложности творить ? В Баскоме на эту тему уже за нас все придумали. Называется Асинхронный режим работы таймера.
Достаточно двух строк
и кварца 32768гц (часовой) на ногах TOSC, и у вас готовые секунды в реальном времени, причем отсчет не зависит от самой программы.
После этих строк у вас появляются автоматически сконфигугрированными переменные _sec, _min, _hour, и автоматом начинает считаться время.
Если вам нужны только секунды, то используете только _sec (именно так, с подчеркиванием).
То есть ваша основная программа работает на вашей внутренней частоте 8мгц, а таймер, считающий секунды, от кварца 32768.
Пример:
Дополнительно ничего под этот режим конфигурировать не нужно, в Баскоме уже все за нас сделали.
Отмечу, что с этим асинхронным режимом отлично работает режим сна powersave. В это режиме мк просыпается раз в секунду чтобы прибавить ее и снова засыпает.
Пример:
Как-то так...
Зачем же такие сложности творить ? В Баскоме на эту тему уже за нас все придумали. Называется Асинхронный режим работы таймера.
Достаточно двух строк
Код: Выделить всё
Config Clock = Soft
enable interruptsПосле этих строк у вас появляются автоматически сконфигугрированными переменные _sec, _min, _hour, и автоматом начинает считаться время.
Если вам нужны только секунды, то используете только _sec (именно так, с подчеркиванием).
То есть ваша основная программа работает на вашей внутренней частоте 8мгц, а таймер, считающий секунды, от кварца 32768.
Пример:
Код: Выделить всё
$regfile = "m32def.dat"
$crystal = 8000000
config clock = soft
enable interrupts
do
'ваша программа с анализом переменной _sec
'что-то типа
if _sec = 0 then моргнуть светодиодом
loop
Отмечу, что с этим асинхронным режимом отлично работает режим сна powersave. В это режиме мк просыпается раз в секунду чтобы прибавить ее и снова засыпает.
Пример:
Код: Выделить всё
$regfile = "m32def.dat"
$crystal = 8000000
config clock = soft
enable interrupts
do
'ваша программа с анализом переменной _sec
'что-то типа
if _sec = 0 then моргнуть светодиодом
powersave
loop
Как-то так...
С уважением,
Алексей.
Алексей.
- Сообщения: 122
- Зарегистрирован: Ср фев 01, 2017 17:57:15
Gordon Shumway а эти переменные считаются как? ну т.е. sec идет от 1 до 60 потом прибавляется min (от 1 до 60) и так по кругу?
[uquote="IDok",url="/forum/viewtopic.php?p=3140331#p3140331"]Gordon Shumway а эти переменные считаются как?[/uquote]
Как в часах, ничего проверять не нужно. То есть изначально все по нулям, секунды до 59 - прибавляется минута, секунды в ноль. Минуты до 59 - прибавляется час, минуты в ноль.
23:59:59 - 00:00:00
Проверять эти переменные нужно только когда вы вручную задаете их, например, в самодельных часах. Нажата кнопка - секунды увеличиваются. И тут нужно вставить проверку чтобы больше 59 не увеличились.
Как в часах, ничего проверять не нужно. То есть изначально все по нулям, секунды до 59 - прибавляется минута, секунды в ноль. Минуты до 59 - прибавляется час, минуты в ноль.
23:59:59 - 00:00:00
Проверять эти переменные нужно только когда вы вручную задаете их, например, в самодельных часах. Нажата кнопка - секунды увеличиваются. И тут нужно вставить проверку чтобы больше 59 не увеличились.
С уважением,
Алексей.
Алексей.
- Реклама
Ну как настраивать таймер тоже знать нужно. Например, в AT2313 нет асинхронного режима у таймеров. 
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
[uquote="edm2007",url="/forum/viewtopic.php?p=3140371#p3140371"]Ну как настраивать таймер тоже знать нужно. Например, в AT2313 нет асинхронного режима у таймеров.
[/uquote]
Ну, это да ! Ваше решение как всегда просто, лаконично, универсально, и обычно сразу работает.
У автора вопроса вроде Мега32 была, там есть этот режим, а я как раз на эту же тему развлекаюсь в данный момент.
Ну, это да ! Ваше решение как всегда просто, лаконично, универсально, и обычно сразу работает.
У автора вопроса вроде Мега32 была, там есть этот режим, а я как раз на эту же тему развлекаюсь в данный момент.
С уважением,
Алексей.
Алексей.
А, это без вопросов тогда.Gordon Shumway писал(а):а я как раз на эту же тему развлекаюсь в данный момент
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
[uquote="edm2007",url="/forum/viewtopic.php?p=3140483#p3140483"]Асинхронный таймер - шикарная штука, согласен. Да еще и в баскоме реализованы хардварно все эти переменные.[/uquote]
А еще независимость от основной программы: что бы там не делалось в основной программе или в основном цикле - секунда щелкнет всегда и вовремя. Да и Powersave радует - обычные таймерные прерывания только из Idle могут разбудить мк, а в Idle мк кушает сильно больше. У меня получилось в Powersave сделать ток 0,025мА. И в асинхронном режиме таймер отлично "щелкает".
А еще независимость от основной программы: что бы там не делалось в основной программе или в основном цикле - секунда щелкнет всегда и вовремя. Да и Powersave радует - обычные таймерные прерывания только из Idle могут разбудить мк, а в Idle мк кушает сильно больше. У меня получилось в Powersave сделать ток 0,025мА. И в асинхронном режиме таймер отлично "щелкает".
С уважением,
Алексей.
Алексей.
Да, в режиме powersave можно разбудиться только асинхронно. И выбор невелик - асинхронный таймер, прерывание по низкому уровню, сторожевой пес да хард ресет. И в этом плане асинхронный таймер это просто находка, уснуть и просыпаться раз в секунду на батарейном питании - дорогого стоит. Это здорово экономит батарейные ресурсы.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
[uquote="edm2007",url="/forum/viewtopic.php?p=3140559#p3140559"]И в этом плане асинхронный таймер это просто находка, уснуть и просыпаться раз в секунду на батарейном питании - дорогого стоит. Это здорово экономит батарейные ресурсы.[/uquote]
Это точно ! У меня сейчас проходит обкатку "Мегатермо-3", сделал именно на асинхроне. 0,15мА, но там же еще и дисплей, который показывает даже во сне. И там я еще дальше пошел в плане сбережения питания. 0,15мА для CR2032 в круглосуточном девайсе - это все-таки многовато. Но значительно лучше, чем было в двух первых Мегатермо.
Испытания пройдут - выложу. Тут уже просто интересно было чего можно достичь c хитрым питанием.
Это точно ! У меня сейчас проходит обкатку "Мегатермо-3", сделал именно на асинхроне. 0,15мА, но там же еще и дисплей, который показывает даже во сне. И там я еще дальше пошел в плане сбережения питания. 0,15мА для CR2032 в круглосуточном девайсе - это все-таки многовато. Но значительно лучше, чем было в двух первых Мегатермо.
Испытания пройдут - выложу. Тут уже просто интересно было чего можно достичь c хитрым питанием.
С уважением,
Алексей.
Алексей.
- Сообщения: 97
- Зарегистрирован: Ср июл 10, 2013 21:30:16
Добрый день.
Вот исходник взятый из интернета, в нем уже используется память EEPROM , как мне в этом исходнике использовать память для записи еще своих уставок ?
Вот исходник взятый из интернета, в нем уже используется память EEPROM , как мне в этом исходнике использовать память для записи еще своих уставок ?
- Вложения
-
- izmer128_PowerMeter14.rar
- (3.41 КБ) 304 скачивания
- Сообщения: 97
- Зарегистрирован: Ср июл 10, 2013 21:30:16
Вот посмотрите , файл 12202_32 , в нем строчка 123 чтение из памяти , 561 запись в память , но почему то в эту ячейку или не записывается или не читается , хотя если эти строки поместить в новый файл все пишется и читается.
- Вложения
-
- форум.7z
- (144.2 КБ) 283 скачивания
Если я не пропустил, то описание переменных в EEPROM начинаются с 61 строки. Все переменные в этой строке занимают 11 байт, с 0 по 10. Следующая переменная EEPROM I_set, в строке 65 типа Word и занимает 2 байта с 11 по 12-ый.
В строке 123 считывается значение в переменную U_min не из 11-ой ячейки, а с 11-го байта. Длина её тоже 2 байта, как и у переменной I_set. Так что считывается как раз I_set в переменную U_min.
Не проще считывать имя переменной из памяти, а не мучиться с адресами? Для работы с прямой адресацией памяти нужен опыт и отличное понимание что, где и в какой момент работы программы находится в памяти.
В строке 123 считывается значение в переменную U_min не из 11-ой ячейки, а с 11-го байта. Длина её тоже 2 байта, как и у переменной I_set. Так что считывается как раз I_set в переменную U_min.
Не проще считывать имя переменной из памяти, а не мучиться с адресами? Для работы с прямой адресацией памяти нужен опыт и отличное понимание что, где и в какой момент работы программы находится в памяти.
- Сообщения: 97
- Зарегистрирован: Ср июл 10, 2013 21:30:16
Как все сложно в этом баском , если считывать имя переменной из памяти проще то покажите как это делается , мне лично все равно каким образом работать с памятью , главное что бы это было по проще и работало.
Так пишите на том, на чем проще. Делов-то. Конечно сложно, тут Вам не Ассемблер какой-нибудь, тут бейсик знать нужно.OLEGKARAS писал(а):Как все сложно в этом баском
Последний раз редактировалось edm2007 Ср июл 12, 2017 17:11:24, всего редактировалось 1 раз.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Сообщения: 97
- Зарегистрирован: Ср июл 10, 2013 21:30:16
Дело в том что исходник этот уже написан в баском , а на том чем проще я такое не напишу.
Напишите в строчке 67
Dim U_min_e As Eram Word
И пользуйтесь переменной в памяти с именем U_min_e. Или свое имя придумайте.
Тогда в строке 123 будет
U_min = U_min_e
И все дела.
Но думаю, что раз у Вас такие трудности, то заполнение переменной U_min_e тоже вызовет проблемы.
Dim U_min_e As Eram Word
И пользуйтесь переменной в памяти с именем U_min_e. Или свое имя придумайте.
Тогда в строке 123 будет
U_min = U_min_e
И все дела.
Но думаю, что раз у Вас такие трудности, то заполнение переменной U_min_e тоже вызовет проблемы.
- Сообщения: 97
- Зарегистрирован: Ср июл 10, 2013 21:30:16


