В этом режиме счетчик считает от нуля до 255, после достижения переполнения сбрасывается в нуль и счет начинается снова. Когда значение в счетчике достигает значения регистра сравнения, то соответствующий ему вывод ОСхх сбрасыватся в ноль. При обнулении счетчика этот вывод устанавливается в 1. И все!"
void setup() {
TIMSK |= (1<<TOIE2) | (1<<OCIE2); // Разрешаем прерывания timer2 по переполнению (TOIE2)и совпадению (OCIE2)
TCCR2 |= (1<<WGM21) | (1<<WGM20) // Активируем режим FastPWM, в этом режиме при совпадении счетчика он не обнуляется и считает до переполнения
OCR2 = 128; // Устанавливаем значение для совпадения
TCCR2 |= (1<<CS22) | (1<<CS21); // предделитель 1/256
sei();
}
void loop() {
}
ISR(TIMER2_OVF_vect) {
// Выполняю какие-то действия каждые 8,2 миллисекунды
// Могу здесь менять значение OCR2 (в TIMER2_COMP_vect - нельзя?)
}
ISR (TIMER2_COMP_vect){
// Выполняю какие-то действия, время определяется значением OCR2 от 0 до 8,2 миллисекунды
}
Так?
Осталось понять:
Цитата:
то соответствующий ему вывод ОСхх сбрасыватся в ноль
Чё, не подошло?))
У меня имеется файл ATmega8_rus.pdf - даташит на русском. Где то ж я его брал... Ну я возьми и загугли по названию, и первую попавшуюся ссылку кинул, а тут вон какой облом.) И не попадается ничё.(
Да тут не только в даташите дело. Надо ещё понимать все эти сокращения и как все меж собой завязано. Ладно, нет желания - лучше не помогать. Будем откатываться назад и снова более детально изучать. Уж не серчайте за тупость...
Да тут не только в даташите дело. Надо ещё понимать все эти сокращения и как все меж собой завязано. Ладно, нет желания - лучше не помогать. Будем откатываться назад и снова более детально изучать. Уж не серчайте за тупость...
Уметь настраивать таймеры (под разные задачи).... ))
В большинстве случаев, для большинства простых поделок, таймерами вообще не пользуюсь. В крайнем случае, формирую системный тик (обычно 10 или 1 мс), без прерываний даже. А то и без таймеров, ставлю delay(10) и норм. Ну а в Ардуино уже есть и millis, и tone. Асинхронный таймер иногда нужен для часового кварца. Ну и всё. Только для измерений иногда нужен ICR или ворота точные для частотомера (но это уже для PIC-ов).
Во! Стоит только что то написать, отправить, как сразу же кажется что это уже было... Офигеть!(
Да, вопрос, конечно, интересный...) Когда ты пишешь на ассемблере, у тебя всё под контролем, ты сам себе хозяин. На Си же, тут за тобой находятся хозяева... И насколько Ане считают нормальными мы не знаем. По крайней мере, я об этом не слышал.(
Ха-ха! Вот почему я читаю у некоторых что они любят ПОПИСЫВАТЬ на ассемблере. В Windows! Слабо?
Я люблю.
//
// декодирование байтового массива, закодированного функцией выше, обратно в мирную строку (Unicode)
// на входе, сатвецтвенно байтомассив, на выходе - строка
//
function DecodeString(const AValues: TBytes): string; register;
var xByte: byte;
len: Int32;
begin
len:=Length(AValues);
xByte:=AValues[len-1]; // раскодирующий байт лежит в жопе массива, сохраним
SetLength(Result, (len div 2) + 2); // длина результирующей строки в символах в 2 раза меньше массива + #0
// SetLenght сам выделит память для len/2 символов + #0
len := len-1; // длина самого массива на 1 байт меньше
asm
push ebx // EBX сохранять ОБЯЗАТЕЛЬНО, процедура НИКОГДА не должна портить EBX унутре себя
mov bl,[xByte] // раскодирующий байт -> bl
mov eax, [Result] // в самом Result лежит указатель на указатель на адрес рез. строки, 2 косвенности
mov edx, [eax] // и теперь в EDX - адрес начала выходной строки
mov eax, [AValues] // EAX - начало закодированного массива
mov ecx, [len] // длина закодированного массива
@loop:
mov bh, [eax] // берем первый символ
xor bh, 0AAH
xor bh, bl
rol bh, 3 // раскодируем его в обратной последовательности
mov [edx],bh // запоминаем
rol bl,1 // вращаем раскодирующий байт
inc edx
inc eax
loop @loop // цыкал, пока ECX не кончицца
xor eax,eax
mov word ptr [edx], ax // пхаем взад строке завершающий нуль (2 байта)
pop ebx
end; // сопсно, это всё. END.
end;
В этом годе пИсано.
Upd. Аптамуш, в любом ЯВУ, будь то Си, или Паскаль, нету логического сдвига. Арифметический есть, а логического, сука, нету. Приходится извращацца.
Прошу более опытных товарищей проверить ход моих вычислений и, если нужно, поправить:
Цель?
Именно так и по даташиту новое значение в OCR надо грузить в прерывании переполнения ...
Суть PWM - частота одна, но ширина импульсов разная !
Прошу более опытных товарищей проверить ход моих вычислений и, если нужно, поправить:
Цель?
Уметь настраивать таймеры (под разные задачи).... ))
Суть PWM - частота одна, но ширина импульсов разная !
Это я знаю.
Именно так и по даташиту новое значение в OCR надо грузить в прерывании переполнения ...
Я запутался. Мы говорим о режиме FastPWM сейчас или о NORMAL?
В этом режиме счетчик считает от нуля до 255, после достижения переполнения сбрасывается в нуль и счет начинается снова. Когда значение в счетчике достигает значения регистра сравнения, то соответствующий ему вывод ОСхх сбрасыватся в ноль. При обнулении счетчика этот вывод устанавливается в 1. И все!"
Значит изначально (FastPWM) было правильно:
Так?
Осталось понять:
что это за вывод такой?
Иди уже в школу !!!
PB3 (MOSI/OC2) - для второго таймера это OC2 !!!
Настроил таймер, перевел вывод OC2 в режим OUTPUT и он сам ШИМит без обработчиков прерываний !!!
Ухожу ухожу....
Дай ссылку на букварь на русском языке (если знаешь).
Лучше родной даташит читать - хоть через яндекс переводчик ...
Да вот его через переводчик и читаю.... Ладно, буду разбираться. Если что - спрошу.
Для туземцев не умеющих гуглить https://forum.cxem.net/applications/core/interface/file/attachment.php?id=252071
Green супер краткое изложение ???
Для туземцев не умеющих гуглить https://forum.cxem.net/applications/core/interface/file/attachment.php?id=252071
Оборжаться. Полезности в этом pdf чуть меньше чем ничего - общие сведения.
Чё, не подошло?))
У меня имеется файл ATmega8_rus.pdf - даташит на русском. Где то ж я его брал... Ну я возьми и загугли по названию, и первую попавшуюся ссылку кинул, а тут вон какой облом.) И не попадается ничё.(
Да тут не только в даташите дело. Надо ещё понимать все эти сокращения и как все меж собой завязано. Ладно, нет желания - лучше не помогать. Будем откатываться назад и снова более детально изучать. Уж не серчайте за тупость...
BOOM нужно мысленно встать на место китайцев, которые сидят внутри чипа и всё считают, переключают ... ...
BOOM нужно мысленно встать на место китайцев, которые сидят внутри чипа и всё считают, переключают ... ...
Согласен! А для этого нужно же знать как там эти «человечки» и почему что делают. А с этим пока пробел есть...
Эх, вот бы книгу типа как раньше «Си++ для чайников» только про микроко6троллеры, их регистры, Настройки, таймеры и тп... )
Полно же в сети уроков всяких. Давай почту - скину даташит.
Да тут не только в даташите дело. Надо ещё понимать все эти сокращения и как все меж собой завязано. Ладно, нет желания - лучше не помогать. Будем откатываться назад и снова более детально изучать. Уж не серчайте за тупость...
В даташите все эти сокращения расписаны.
Давай почту - скину даташит.
Посмотри, пожалуйста, вот это не он случаем: https://vk.com/doc-135806404_453841665?hash=HY9J3fvigon4qFH9Nfu62YtwHNxO... ?
Искал по твоей наводке atmega8_rus ...
Да, это он. "Так значит можешь, если захочешь!"))
Да, это он. "Так значит можешь, если захочешь!"))
Это не совсем так...
Искал по твоей наводке atmega8_rus ...
А я искал по быстрому, не внимательно.) Вообще, летом КПД низкий.
Ну дак летом в Крыму актуально не даташиты всякие, а лопата для денег, туристов околачивать.
Это да. А ещё жара, море, расслабон.)
Green, какое море, ты вроде с Краснодара?
какое море, ты вроде с Краснодара?
А чо в окрестностях Краснодара море кончилось?
А чо в окрестностях Краснодара море кончилось?
Ну если радиус окресностей в 100 км. то море только начинается :)))))
По Российским меркам все что ближе 300км - окрестности... )))
От меня далеко до моря, 900м.
Уметь настраивать таймеры (под разные задачи).... ))
В большинстве случаев, для большинства простых поделок, таймерами вообще не пользуюсь. В крайнем случае, формирую системный тик (обычно 10 или 1 мс), без прерываний даже. А то и без таймеров, ставлю delay(10) и норм. Ну а в Ардуино уже есть и millis, и tone. Асинхронный таймер иногда нужен для часового кварца. Ну и всё. Только для измерений иногда нужен ICR или ворота точные для частотомера (но это уже для PIC-ов).
Во! Стоит только что то написать, отправить, как сразу же кажется что это уже было... Офигеть!(
Ну мне прерывание нужно, чтобы вне зависимости от исполняемого кода делал «что приказано» )))
ЗЫ: Свою задачу я решил (она первой была), а про использование одного таймера под две задачи - это больше из-за интереса и просто саморазвития...
HEX-файл успешно загружается в микроконтроллер и исполняется (так, как я и задумывал).
Собственно вопрос: Сильно ли (и как сильно?) влияет на работу микроконтроллера тот факт, что свободно всего 60 байт во flash?
Его же (место во flash) не солить, правильно? Или нужно обязательно сколько-то оставлять свободного (для чего)?
Во флэше свободное место некритично, главное, что оно есть. Вот ОЗУ - критично, если String используешь, или вручную в куче ковыряешься.
БРЕД !
БРЕД !
Не буду спорить, тебе виднее.
Ой, та нормально всё. От задачи зависит. Бывает что и 90% норм. Ну уж точно что не 48%.)))
А зачем оно (свободное место) там должно быть? Там что, фрагментация какая-то происходит или тому подобное?
Во флэше свободное место некритично, главное, что оно есть. Вот ОЗУ - критично, если String используешь, или вручную в куче ковыряешься.
String не использую, локальные переменные дай Бог байт 150 из ОЗУ занимают (в сумме разом)...
БРЕД !
Поделись своим видением, пожалуйста...
В озу стек может наехать на данные. С флешем то никаких записей не производится !!!
Да, вопрос, конечно, интересный...) Когда ты пишешь на ассемблере, у тебя всё под контролем, ты сам себе хозяин. На Си же, тут за тобой находятся хозяева... И насколько Ане считают нормальными мы не знаем. По крайней мере, я об этом не слышал.(
Ха-ха! Вот почему я читаю у некоторых что они любят ПОПИСЫВАТЬ на ассемблере. В Windows! Слабо? Потому что всё под контролем, из ихнего объяснения.)
Ха-ха! Вот почему я читаю у некоторых что они любят ПОПИСЫВАТЬ на ассемблере. В Windows! Слабо?
Я люблю.
В этом годе пИсано.
Upd. Аптамуш, в любом ЯВУ, будь то Си, или Паскаль, нету логического сдвига. Арифметический есть, а логического, сука, нету. Приходится извращацца.
абожаю матреть, как кот работает
тижало ему.
Минусовщики, думаю, Теодоро, тебя не за@бало каждый мой пост минусовать?
Нет. Вы гавно-человек.
Ну, бывает, чо...
Нет. Вы гавно-человек.
А у меня такой же, токо чёрный.(
Нет. Вы гавно-человек.
Да, ты прав, наерна, даже Командир сказал, что я бред пишу. Мошт, я даже исправлюся. Кагда-нить.
Наданапицца, и слёзы ронять на толькаштовыданную робу.
Наданапицца, и слёзы ронять на толькаштовыданную робу.
Деда, как? Опять? Ты ж завизалл?!...
В озу стек может наехать на данные. С флешем то никаких записей не производится !!!
То есть и 1 байт свободного места во флеше - это нормально?