www.horizontautomatics.ru

Программирование, автоматизация.

Счётчик микросекунд на коленке в гараже, напильником

Обсуждение графической оболочки Configurator,а также всех вопросов касающихся её работы, установки и обновления.

Модератор: Евгений

Счётчик микросекунд на коленке в гараже, напильником

Сообщение ig.mi » 19 фев 2017, 15:19

Обновлённый Евгением исходник:

#ifndef _FBD41_OCRO
#define _FBD41_ FBD41
#message define FBD41 Countert milliseconds (Timer 0)

#ifdef _Timer0_
#error redeclared Timer0 __FILE__
#endif
#define _Timer0_

.SET TimerCounter0_DATA_SIZE = 6
.SET TimerCounter0_DATA_RAM = FBD_DATA_RAM //Глобальные данные для TimerCounter0
.SET FBD_DATA_RAM = TimerCounter0_DATA_RAM + TimerCounter0_DATA_SIZE //Выделяем память для TimerCounter0
// память:
// 1 байта - TCNT0
// 1 байта - TIMSK

iOVF0addr: ;Прерывание по таймеру
LDS iB, TimerCounter0_DATA_RAM+5 ;Задаем значение таймера
out TCNT0, iB ;Задаем значение таймера
in iB, SREG ;Сохраняем регистр флагов
LDS iA, TimerCounter0_DATA_RAM ;мс в текущем цикле
add iA, One ;мс в текущем цикле
STS TimerCounter0_DATA_RAM, iA ;мс в текущем цикле
out SREG, iB ;Востанавливаем регистр флагов
reti

FBD41_init:
rcall Read_cfg ;Период прерывания
STS TimerCounter0_DATA_RAM+5, Addr_Data ;Период прерывания
rcall Read_cfg ;Делитель


#if defined( _TN13ADEF_INC_)||defined(_TN13DEF_INC_)||defined(_TN25DEF_INC_)||defined(_TN45DEF_INC_)||defined(_TN85DEF_INC_)||defined(_M328PDEF_INC_)
.equ _TCCR0=TCCR0B
#else
.equ _TCCR0=TCCR0
#endif

#if defined( _TN13ADEF_INC_)||defined(_TN13DEF_INC_)||defined(_M328PDEF_INC_)
.equ _TIMSK=TIMSK0
#else
.equ _TIMSK=TIMSK
#endif

out _TCCR0, Addr_Data ;Делитель
UIN A, _TIMSK ;Разрешаем прерывание по переполнению !!!
ori A, 1<<TOIE0 ;Разрешаем прерывание по переполнению
UOUT _TIMSK, A ;Разрешаем прерывание по переполнению

ret;

FBD41_run:
ADIW YL, 2 ;Пропускаем команды инициализации
cli ;Запрещаем прерывания
LDS A, TimerCounter0_DATA_RAM ;мс накопленные за цикл
STS TimerCounter0_DATA_RAM, Zero ;мс накопленные за цикл, обнуляем
sei ;Разрешаем прерывания
LDS B, TimerCounter0_DATA_RAM+1 ;Обновляем счетчик милисекунд
add B, A ;Обновляем счетчик милисекунд
STS TimerCounter0_DATA_RAM+1, B ;Обновляем счетчик милисекунд
LDS B, TimerCounter0_DATA_RAM+2 ;Обновляем счетчик милисекунд
adc B, Zero ;Обновляем счетчик милисекунд
STS TimerCounter0_DATA_RAM+2, B ;Обновляем счетчик милисекунд
LDS B, TimerCounter0_DATA_RAM+3 ;Обновляем счетчик милисекунд
adc B, Zero ;Обновляем счетчик милисекунд
STS TimerCounter0_DATA_RAM+3, B ;Обновляем счетчик милисекунд
LDS B, TimerCounter0_DATA_RAM+4 ;Обновляем счетчик милисекунд
adc B, Zero ;Обновляем счетчик милисекунд
STS TimerCounter0_DATA_RAM+4, B ;Обновляем счетчик милисекунд
ret;


FBD41:
.db 2, 0 //Размер FBD блока, необходимая оперативная память
.dw FBD41_run, FBD41_init

Timer_Diff:
lds ZL, TimerCounter0_DATA_RAM+1 //Счетчик Lw
lds ZH, TimerCounter0_DATA_RAM+2 //Счетчик Hg
sub ZL, Uz1L //Разница времени
sbc ZH, Uz1H //Разница времени
// brcc Timer_Diff_end
// neg ZL //Меняем знак
// com ZH //Меняем знак
//Timer_Diff_end:
ret

#else
#error redeclared FBD41 __FILE__
#endif
ig.mi
 
Сообщения: 127
Зарегистрирован: 20 дек 2015, 07:42

Re: Счётчик микросекунд на коленке в гараже, напильником

Сообщение ig.mi » 19 фев 2017, 15:42

Прохожий писал(а):В общем... Configurator-Runtime-HR_AVR-FBD-software- файл time_counter_milliseconds
В этом файле, открыв в текстовом редакторе, блокноте например, ищешь строчку:

#if defined( _TN13ADEF_INC_)||defined(_TN13DEF_INC_)||defined(_TN25DEF_INC_)||defined(_TN85DEF_INC_)||defined(_M328PDEF_INC_)

Видишь пропущена 45!!!!!!!!!!!!!!!!!!!!! добавляешь ||defined(_TN45DEF_INC_) в эту строку и сохраняешься :) Отпишись как проверишь, у меня проект собрался, но в протеус с этого компа не зарядить :)


Я так и сделал (прога живёт на флэшке), сработало. Исходник позже подправил Евгений, он (исходник) постом выше. Теперь прога на комп грузится и обновляется уже без регистрации. Прога от 19.02.17г. рабочая, свои немногие проекты на тиньках по новой перепрошил на железки - адекватно работают.
ЗЫ. Форум у нас никак не оформлен, бардак по флуду, от меня прежде всего...
Последний раз редактировалось ig.mi 19 фев 2017, 15:56, всего редактировалось 1 раз.
ig.mi
 
Сообщения: 127
Зарегистрирован: 20 дек 2015, 07:42

Re: Счётчик микросекунд на коленке в гараже, напильником

Сообщение ig.mi » 19 фев 2017, 15:49

Берём напильник и
.SET TimerCounter0_DATA_SIZE = 6
пилим на
.SET TimerCounter0_DATA_SIZE = 3

Получаем импульсы в два раза длинней. :shock:
ig.mi
 
Сообщения: 127
Зарегистрирован: 20 дек 2015, 07:42

Re: Счётчик микросекунд на коленке в гараже, напильником

Сообщение Прохожий » 20 фев 2017, 14:56

Не понимаю, нам бы импульсы наоборот по короче, в чём фокус???
"Attiny 85 из Atmega328P сделать совсем не сложно, достаточно просто откусить лишние ноги!"
Прохожий
 
Сообщения: 368
Зарегистрирован: 21 май 2016, 06:23

Re: Счётчик микросекунд на коленке в гараже, напильником

Сообщение ig.mi » 20 фев 2017, 17:19

Покурил мануалы по астмеавр чуток, теперь словосочетание ЗА ГРАНЬЮ ВСЕЛЕННОЙ воспринимаю буквально :lol: Напильником тему не взять, надфиль нужон :lol:
Копать, как мне теперь представляется, нужно в конкретном проекте в папке upload. Там кроме кекса есть астм файл проекта.
Астматики в шапке проекта по чэстному предупереждают : THIS IS A MACHINE GENERATED FILE - DO NOT EDIT.

Дальше по тексту есть пропись регистров и ещё чего то.

I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
.equ SREG = 0x3f
.equ SPL = 0x3d
.equ GIMSK = 0x3b
.equ GIFR = 0x3a
.equ TIMSK = 0x39
.equ TIFR = 0x38
.equ SPMCSR = 0x37
.equ MCUCR = 0x35
.equ MCUSR = 0x34
.equ TCCR0B = 0x33
.equ TCNT0 = 0x32
..........................................................
и далее по тексту 48 страниц (это в простейшем генераторе со счетчиком миллисекунд)

.equ TCCR0B = 0x33
Вот эта строчка, ИМХО насколько я въехал в тему МК, отвечает за предделитель тактовой частоты кормёжки проца.
старший байт 3 - 0011, пока не интересно. Младший 0011 делит такты кварца на 64.
При этом он является составной частью TCNT0.
Если выставить в астме регистр// .equ TCCR0B = 0x31// (без предделителя) тогда ядро будет считать в 64 раза быстрее. А там далее по тексту всё повязано между собой..... :shock:

И даже если прокатит, опять же надо компилятор в кекс. Уже в другой проге, типа AVRSTUDIO.
Бе...
ig.mi
 
Сообщения: 127
Зарегистрирован: 20 дек 2015, 07:42

Re: Счётчик микросекунд на коленке в гараже, напильником

Сообщение Прохожий » 20 фев 2017, 17:23

В принципе понимаю о чём идёт речь.
На AVRstudio 7 накатить Visual studio 2015 и он руссифицируется по большей части :)
И в нём же сразу открыть файл из уплоада.
"Attiny 85 из Atmega328P сделать совсем не сложно, достаточно просто откусить лишние ноги!"
Прохожий
 
Сообщения: 368
Зарегистрирован: 21 май 2016, 06:23

Re: Счётчик микросекунд на коленке в гараже, напильником

Сообщение ig.mi » 20 фев 2017, 18:32

Прохожий писал(а):На AVRstudio 7

Так вроде, после пятёрки пошёл Atmel Studio? Я ж, говорил что атмельщики странные ребята, слились на ардуинщиков и радуются собственному растущему производству. По мне Всё больше к PICам приглядываюсь, там хоть инструкций, команд и директив в разы поменьше, поприличней как то....
ig.mi
 
Сообщения: 127
Зарегистрирован: 20 дек 2015, 07:42

Re: Счётчик микросекунд на коленке в гараже, напильником

Сообщение Прохожий » 20 фев 2017, 18:49

Atmel Studio 7.0 я написал не правильно, ошибся :)
"Attiny 85 из Atmega328P сделать совсем не сложно, достаточно просто откусить лишние ноги!"
Прохожий
 
Сообщения: 368
Зарегистрирован: 21 май 2016, 06:23


Вернуться в Horizont Configurator

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron