Хм. Значит я неверно понимаю режим CTCtop=OCR1A, вроде как прерывание при совпадении
а ну тогда должно быть все правильно,чет я пропустил этот факт.
только у меня почему то другое значение получается для сравнения.
если частота 1мгц =1000000Гц
нужно 10Гц
1000000/10=100000тиков таймера до прерывания
в 65536 максимального значения таймера не лезет.
делим на 100000/ 2 =50000 тиков таймера
переводим в кекс 50000=C350h
// Timer/Counter 1 initialization - 10 Гц
.......
OCR1AH=0xC3; // это старший байт
OCR1AL=0x50; // это младший
вроде так должно быть для внутреннего генератора 1МГц
если посчитать для делителя на 4 .
то 25000 =61A8h
для делителя на 8
то 12500=30d4h
ну никак с вашим значением не совпадает.
vitalik_1984 писал(а):вроде так должно быть для внутреннего генератора 1МГц
если посчитать для делителя на 4 .
то 25000 =61A8h
для делителя на 8
то 12500=30d4h
ну никак с вашим значением не совпадает.
какое там в программе то было?
У меня предделитель 1024, и счёт до 98, в итоге делится примерно на 100 тыс => на выходе 10 расчётных Гц.
В протеусе так и есть, а в железе быстрее примерно в 5 раз (по словам "заказчика"), из чего я делую два предположения:
1. неправильно стоят фьюзы
2. я намудрил с таймером
Так как по умолчанию меги имеют тактовую 1МГц, и у меня уже был опыт несовпадения расчёта с практикой, склоняюсь ко 2-му варианту...
Как-то так
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
ок понял
а почему тогда в проте правильно?
короче я так думаю тактируется наверно от 4МГц внутреннего,а на глаз сложно определить в 4 или пять раз быстрее.
нужно фьюзы посмотреть.там видно будет.
Парни, а нужно ли программировать калибровочные байты, если МК работает от внешнего кварца и для чего вообще нужны эти байты?
После прошивки с этими фьюзами мк перестал определяться, Atmega128
и почему usbasp не определяется после нескольких включений, работал работал и все http://cxem.net/mc/mc67.php
блин, заработал программатор вновь сам собой и МК прошиваемый определился, ничего не пойму, вот теперь МК опять не определяется, хотя больше не прошивал, решил прочитать и не видит программатор его
Serj324 писал(а):Подскажите можно ли попробывать заменить микросхему в программаторе Extra-PIC
на к561ла7 при условии что я совмещу все выходы. Другую микру достать сейчас у меня не реально.
В принципе можно. Но надо будет посмотреть с помощью утилиты tcom.exe (ссылку я давал выше) как чётко переключаются линии. Разумеется тестером смотреть на ногах 232 и логики.
Есть обработчик прерывания на МК AVR на ассемблере, который проверяет состояние кнопки и в зависимости от состояния кнопки переходит в определенный адрес.
Как сделать выход из прерывания? Если использовать команду reti, программа возвращается туда, где была прервана. А мне нужно, чтобы программа возвращалась на другой адрес.
нависла проблемма которую я никак не могу решить........,экспериментирую с ШИМ......, атмега8......, нужно одновременно и плавно зажигать цифру 8 и тушить цифру 4, на газорозрядных индикаторах....., когда цифра 8 будет гореть на полную то 4 потухнет....., далее мы плавно зажигаем 4 и плавнол тушим 8....., ну и так по кругу. для данных целей использовал atmega8 и 2 таймер который считает до 255....,срабатывают прерывания по совпадению и переполнению.
вот код:
в реале, при включении, горит на полную цифра 4 а 8 потихоньку набирает яркость...., когда 8 набрала яркость на все 100% то и 4 горит на все 100%, затем 4 начинает плавно тухнуть, при этом 8 горит на полную...., когда 4 потухла 8 горит на полную...., далее 4 набирает яркость,8 горит на полную...., только когда 4 набирет яркость на все 100% вот тогда начинает сбрасывать яркость 8......, и так по кругу........, что в моем коде не верно, из-за чего моя идея не работает ?
Rinatus писал(а): Если использовать команду reti, программа возвращается туда, где была прервана. А мне нужно, чтобы программа возвращалась на другой адрес.
Сделать это несложно, подменив в стеке адрес возврата. Но это плохая идея, чреватая разными неприятностями. Я в таких случаях устанавливал в прерывании флаг, а в основной программе периодически "поглядывал" на этот флаг - переходить или не переходить по нужному адресу. Но этот метод, конечно, не гарантирует наносекундного времени реакции на прерывание.
while (1)
{ for (y=250;y>=3;y--)
{OCR2=y;
delay_ms(50);
};
delay_ms(1000);
for (x=4;x<=250;x++)
{OCR2=x;
delay_ms(50);
};
}
}
в реале, при включении, горит на полную цифра 4 а 8 потихоньку набирает яркость...., когда 8 набрала яркость на все 100% то и 4 горит на все 100%, затем 4 начинает плавно тухнуть, при этом 8 горит на полную....
что в моем коде не верно, из-за чего моя идея не работает ?
Всё правильно, чтобы параллельно зажигалось-тухло, нужно другой код. Здесь ясно видно, что вначале обрабатывается цикл for (y=250;y>=3;y--), и только когда он закончится, начинается for (x=4;x<=250;x++). Нужно как-то иначе делать, например по прерываниям от таймера (или иначе) по очереди изменять значения и выводить их на ШИМ, одновременно переключая цифры. С ШИМом не экспериментировал, насколько это хорошо сработает не подскажу
for (y=250;y>=3;y--)
{
OCR2=y;
PORTD=0x24;
delay_ms(50);
if (x<250) x++;
OCR2=x;
PORTD=0x18;
delay_ms(50);
}
x=4;
alexey6522
Возможно дело в кварце, протокол USB очень требователен, а тут ещё программная эмуляция... У меня такой программатор вообще не завёлся, я плюнул и купил себе на базе 232.
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
for (x=3; x<97; x++)
{
PORTD=0x24;
delay_ms(x);
PORTD=0x18;
delay_ms(100-x);
}
С газоразрядными индикаторами с прошлого века дела не имел, но по идее должно сработать, ну может придётся подобрать интервалы.
Просто если ШИМ десятки раз в секунду будет менять последовательность импульсов со скважностью 0.02 на скважность 50 (мой предыдущий пример, граничные значения), успеет ли так же быстро отрабатывать управляемая им схема, не придётся ли вводить паузы для скрытия переходных процессов?
Немного сумбурно, надеюсь мысль понятна
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Блин че за дежавюу меня?
Может не нужно дублировать посты?
У вас в прерывании четко прописано, что один разряд гаснет, второй загорается.
В протеусе все правильно работает.
Как вообще возможно, что оба разряда горят одновременно?если
в одном прерывании
PORTD=0x24; // зажигаю цифру 4 и тушу цифру 8
а во втором, которое регулируется
PORTD=0x18;// зажигаю цифру 8 и тушу цифру 4
Eprinter писал(а):
Всё правильно, чтобы параллельно зажигалось-тухло, нужно другой код. Здесь ясно видно, что вначале обрабатывается цикл for (y=250;y>=3;y--), и только когда он закончится, начинается for (x=4;x<=250;x++).
Вот именно, что все правильно
эти циклы меняют только величину сравнения таймера
сначала одна цифра загорается, вторая тухнет
потом наоборот.
vitalik_1984 писал(а):Как вообще возможно, что оба разряда горят одновременно?
один разряд у меня зажигается в совпадении и тушится в переполнении, а второй зажигается в переполнении и тушится в совпадении........., именно на этом принципе построен весь алгоритм работы........, плавно меняя OCR2 я меняю ОДНОВРЕМЕННО длительность горения цифр каждого разряда......., вот такая петрушка, ....... вот только не работает сие ....., поэтому и бью в набат....., т.к охота разобраться
vitalik_1984 писал(а):Как вообще возможно, что оба разряда горят одновременно?
один разряд у меня зажигается в совпадении и тушится в переполнении, а второй зажигается в переполнении и тушится в совпадении........., именно на этом принципе построен весь алгоритм работы........,
Стоп, а при чём тут ШИМ тогда? Я так понял с ваших слов: вы один таймер-счётчик используете в режиме ШИМ, на выходе меняется напряжение, и от этого напряжения зависит яркость. В детали, каюсь, не вникал, поэтому написал ерунду в первом ответе.
А во втором, ниже, должно быть правильно.
Впрочем дошло - экспериментируете не с регистром в режиме ШИМ, а с широтно-импульсной модуляцией... Во мышанулся...
Последний раз редактировалось Eprinter Чт июн 21, 2012 11:53:24, всего редактировалось 1 раз.
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Хороший способ чужой ящик узнать... Обновите и пробуйте еще раз, у меня все скачалось.
Увидел ошибку в своем вложении
Там в конце нужно перенести в скобку } последнюю строчку
Кстати не доверяйте протеусу, он такие иногда финты выкидывает.
Этот ваш глюк мог прот создать.