eeprom-STK500

Тут обсуждаем все что связано с микроконтроллерами.

Модератор: gurvinok

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 02 дек 2016, 23:38

Ну в общем можно, но когда и где?
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 141
Зарегистрирован: 24 сен 2016, 11:25
Откуда: Тбилиси

Re: eeprom-STK500

Сообщение AVRIK » 05 дек 2016, 12:36

Здравствуйте Алексей!
Ввиду вашей занятости стараюсь лишний раз не беспокоить вас вопросами, и решил путем «расшифровки» прописанного вами кода набраться правильного знания и понимания происходящего при программировании микроконтроллеров, и слава Богу, ваш
Axlib генератро показывает прописанный вами код. По незнанию порой сомневаюсь в правильности чтения кода, и в данном обращении прошу вас прояснить указанные ниже моменты.
Код выдан на примере генерации кода Axlib-ом таймера 2. адрес файла «H», Project_timer2_axlib>main>axlib>timers
Код (выписка):

#define TIMER_2 2 //запись «TIMER_2» подразумевает число «2».
#define T2_START ((TFLAG >> TIMER_2) & 0x01)
//тут «TFLAG» подразумевает «FOC2» с «TCCP2» исходя
//из того что, «volatile UBYTE TFLAG = 0x00;» у вас
//комментируется как флаг сработанного таймера, и следовательно идентична записи
// «volatile unsigned char TCCR2=0x00;
// В итоге,условием кода, мы сдвигаем «FOC2» на 2бита в право и
// устанавливаем в CS2 лог.«1»
Что-то нутром чую, не так я прочитал код, потому что сдвинув «значение флага FOC2» на 2бита в право, мы соответственно устанавливаем «WGM20». Код представляется как: #define T2_START TCCR2=0b00000001;
Проясните пожалуйста ИСТИНУ!

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 05 дек 2016, 13:39

Брр. Ничего не понял. Там все просто. Настраиваем таймер 2 на прерывание раз мс (опираемся на частоту тактирования) TFLAG это восьмибитная переменная в которой каждый разряд отвечает за состояние своего таймера. Если флаг сброшен, то есть бит в нуле,значит таймер не сработал. Если взвелся, то есть единица, значит сработал. В обработчике прерывания проводится проверка на валидность таймера и его отсчета. Проще говоря проверяется включен ли таймер и если включен то увеличить его счет и проверить на превышение заданного интервала в мс. Если превысил, то взвести флаг и сбросить счетчик. Вся инициализация настроена на срабатывания таймера раз в мс.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 141
Зарегистрирован: 24 сен 2016, 11:25
Откуда: Тбилиси

Re: eeprom-STK500

Сообщение AVRIK » 05 дек 2016, 16:34

Ясно! Значит этот TFLAG ваших рук дело а не описанный в даташите TIFR/OCF2. Ато я уже думал что-то еще проспал. В TIFR 2бита, а у вас целый байт под это дело.
Просто мне хотелось бы разобраться с влиянием на процесс работы таймера, флага OCF2. А тут в вашем коде появился TFLAG,(наверно Таймер-ФЛАГ) вот я и загрузился!
Думаю все таки с Axlib-а по крапаликам чего нибудь да нашкрибу. Там такие ходы выходы, долго мне еще вникать. Ну и на таком варианте спасибо, ато в книжках ничего не нахожу!

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 05 дек 2016, 16:55

В TIFR 2бита, а у вас целый байт под это дело.
Это связано с тем что я из одного аппаратного таймера сделал восемь программных.
Если рассматривать как в даташите, то TFLAG можно рассматривать как регистр флагов таймеров.
TFLAG 0b00000000
0 бит - Таймер 0
1 бит - Таймер 1
2 бит - Таймер 2
3 бит - Таймер 3
4 бит - Таймер 4
5 бит - Таймер 5
6 бит - Таймер 6
7 бит - Таймер 7
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 141
Зарегистрирован: 24 сен 2016, 11:25
Откуда: Тбилиси

Re: eeprom-STK500

Сообщение AVRIK » 05 дек 2016, 18:01

Это понятно! Вы программно создали 8 вариантов таймеров на одном аппаратном, но это ваша наработка. Ведь в даташитном варианте только один Таймер2, а у него два флага, по переполнению и по совпадению. Так вот я никак не могу понять суть работы флага, для чего она служить. Не для того-же на самом деле что, вот таймер досчитал до 10000, и УРАААА! Подняли флаг! В кодах над которыми я извращаюсь установка флагов меняют процесс, но пока, путем научного тыка, логику не могу вычислить, вот и брожу в ваших кодах в Axlib, думая что смогу выудить нужную информацию, но как видите пока что только заблудился. Но как говорит один мудрый человек: Если долго мучится, может быть получиться!

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 05 дек 2016, 18:40

А тут нет ничего сложного. У аппаратного таймера есть регистр TIFR. У него есть два флаг, это разряды 6 и 7. Шестой это TOV2 флаг переполнения или по буржуйски Timer/Counter2 Overflow Flag и седьмой OCF2 флаг по совпадению, по буржуйски Output Compare Flag. Когда происходит то или иное событие по таймеру, то тот или иной флаг взводиться и вызывает свое прерывание. Ну, а дальше программист описывает обработчик сам.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 141
Зарегистрирован: 24 сен 2016, 11:25
Откуда: Тбилиси

Re: eeprom-STK500

Сообщение AVRIK » 05 дек 2016, 22:22

Ладно, раз уж углубились в тему, поинтересуюсь у вас по существу. Когда я по int0 вызывал прерывание, в теле прерывания по int0 активировал TCNT2 и TIMSK, что определяло срабатывания при совпадении, кода. Протеус выдавал одну графику. После я добавил TIFR|=(1<<OCF2) и графика изменилась. Следовательно, состояние флага определяет поведение таймера, а вот КАК? это уже надо как-то вычислить, если кто-либо,(намек) не подскажет. Думаю TIFR подобно установке GICR&=~(1<<INT0); блокирует ложное срабатывание таймера вызванное плавающим моментом начала отсчета OCR2 в следствии того что без установки флага, таймер открыт для старта счетчика. Ну, может я тут пургу наплел, но по сути такой вывод из анализа происходящего при активации OCF2.

Аватара пользователя
gurvinok
Сообщения: 1500
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: eeprom-STK500

Сообщение gurvinok » 05 дек 2016, 22:35

Для начала нужно выкинуть протеус. Это программа кривая как моя жизнь. Закажите в Китае вот такие девайсы плата, анализатор, осциллограф и станет намного легче.
По поводу флагов. Аппаратные флаги взводятся периферийными устройствами. Программист должен их сбрасывать, отслеживать о обрабатывать те или иные данные при их установке.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 141
Зарегистрирован: 24 сен 2016, 11:25
Откуда: Тбилиси

Re: eeprom-STK500

Сообщение AVRIK » 05 дек 2016, 23:41

Плата очень заинтересовала, видимо на ней можно извращаться и все будет на виду, а с анализатором и осциллографом не знаю, нужно ли? У меня HANTEK DSO-1200 не плохая машина. Ну а главное по шагово вникать в тайны программирования, т.к. без этого металл что тубаретка! Как ваш заказ, к финишу уже или стопорит? Я не представляю, решение какой задачи может занять у вас столько времени!!! То что меня интересует и по поводу чего я "прошу у вас аудиенции", (поход в кабак), думаю вы на коленях нарисуете! Но раз вы так заняты заказом, значит оно вам нужно. Удачи вам! Думаю найдете и для нас, для самых маленьких, время. :D

Ответить