Страница 333 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 12:21:13
vitalik_1984
Хм. Значит я неверно понимаю режим 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
ну никак с
вашим значением не совпадает.
какое там в программе то было?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 13:09:28
Eprinter
vitalik_1984 писал(а):вроде так должно быть для внутреннего генератора 1МГц
если посчитать для делителя на 4 .
то 25000 =61A8h
для делителя на 8
то 12500=30d4h
ну никак с
вашим значением не совпадает.
какое там в программе то было?
У меня предделитель 1024, и счёт до 98, в итоге делится примерно на 100 тыс => на выходе 10 расчётных Гц.
В протеусе так и есть, а в железе быстрее примерно в 5 раз (по словам "заказчика"), из чего я делую два предположения:
1. неправильно стоят фьюзы
2. я намудрил с таймером
Так как по умолчанию меги имеют тактовую 1МГц, и у меня уже был опыт несовпадения расчёта с практикой, склоняюсь ко 2-му варианту...
Как-то так

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 13:55:20
vitalik_1984
ок понял
а почему тогда в проте правильно?
короче я так думаю тактируется наверно от 4МГц внутреннего,а на глаз сложно определить в 4 или пять раз быстрее.
нужно фьюзы посмотреть.там видно будет.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 17:48:44
alexey6522
Парни, а нужно ли программировать калибровочные байты, если МК работает от внешнего кварца и для чего вообще нужны эти байты?
После прошивки с этими фьюзами мк перестал определяться, Atmega128
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 18:12:55
alexey6522
и почему usbasp не определяется после нескольких включений, работал работал и все
http://cxem.net/mc/mc67.php
блин, заработал программатор вновь сам собой и МК прошиваемый определился, ничего не пойму, вот теперь МК опять не определяется, хотя больше не прошивал, решил прочитать и не видит программатор его
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 19:03:31
Chettuser
Serj324 писал(а):Подскажите можно ли попробывать заменить микросхему в программаторе Extra-PIC
на к561ла7 при условии что я совмещу все выходы. Другую микру достать сейчас у меня не реально.
В принципе можно. Но надо будет посмотреть с помощью утилиты tcom.exe (ссылку я давал выше) как чётко переключаются линии. Разумеется тестером смотреть на ногах 232 и логики.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 19:52:54
Rinatus
Есть обработчик прерывания на МК AVR на ассемблере, который проверяет состояние кнопки и в зависимости от состояния кнопки переходит в определенный адрес.
Как сделать выход из прерывания? Если использовать команду reti, программа возвращается туда, где была прервана. А мне нужно, чтобы программа возвращалась на другой адрес.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 21:05:06
FreshMan
нависла проблемма которую я никак не могу решить........,экспериментирую с ШИМ......, атмега8......, нужно одновременно и плавно зажигать цифру 8 и тушить цифру 4, на газорозрядных индикаторах....., когда цифра 8 будет гореть на полную то 4 потухнет....., далее мы плавно зажигаем 4 и плавнол тушим 8....., ну и так по кругу. для данных целей использовал atmega8 и 2 таймер который считает до 255....,срабатывают прерывания по совпадению и переполнению.
вот код:
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
unsigned char y,x;
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{ PORTD=0x24; } // зажигаю цифру 4 и тушу цифру 8
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{ PORTD=0x18; }// зажигаю цифру 8 и тушу цифру 4
void main(void)
{PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x04;
TCNT2=0x00;
OCR2=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0xC0;
// Global enable interrupts
#asm("sei")
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 горит на полную...., когда 4 потухла 8 горит на полную...., далее 4 набирает яркость,8 горит на полную...., только когда 4 набирет яркость на все 100% вот тогда начинает сбрасывать яркость 8......, и так по кругу........, что в моем коде не верно, из-за чего моя идея не работает ?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср июн 20, 2012 21:33:44
Jack_A
Rinatus писал(а): Если использовать команду reti, программа возвращается туда, где была прервана. А мне нужно, чтобы программа возвращалась на другой адрес.
Сделать это несложно, подменив в стеке адрес возврата. Но это плохая идея, чреватая разными неприятностями. Я в таких случаях устанавливал в прерывании флаг, а в основной программе периодически "поглядывал" на этот флаг - переходить или не переходить по нужному адресу. Но этот метод, конечно, не гарантирует наносекундного времени реакции на прерывание.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 00:14:09
Eprinter
FreshMan писал(а):Код: Выделить всё
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.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 05:31:31
Eprinter
FreshMan писал(а):экспериментирую с ШИМ......нужно одновременно и плавно зажигать цифру 8 и тушить цифру 4, на газорозрядных индикаторах
Тут мысль пришла - а ШИМ вообще принципиален? Если сделать по типу LED, скважностью, может тоже получится регулировать яркость?
Код: Выделить всё
for (x=3; x<97; x++)
{
PORTD=0x24;
delay_ms(x);
PORTD=0x18;
delay_ms(100-x);
}
С газоразрядными индикаторами с прошлого века дела не имел, но по идее должно сработать, ну может придётся подобрать интервалы.
Просто если ШИМ десятки раз в секунду будет менять последовательность импульсов со скважностью 0.02 на скважность 50 (мой предыдущий пример, граничные значения), успеет ли так же быстро отрабатывать управляемая им схема, не придётся ли вводить паузы для скрытия переходных процессов?
Немного сумбурно, надеюсь мысль понятна

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 11:11:19
vitalik_1984
Блин че
за дежавюу меня?
Может не нужно дублировать посты?
У вас в прерывании четко прописано, что один разряд гаснет, второй загорается.
В протеусе все правильно работает.
Как вообще возможно, что оба разряда горят одновременно?если
в одном прерывании
PORTD=0x24; // зажигаю цифру 4 и тушу цифру 8
а во втором, которое регулируется
PORTD=0x18;// зажигаю цифру 8 и тушу цифру 4
Eprinter писал(а):
Всё правильно, чтобы параллельно зажигалось-тухло, нужно другой код. Здесь ясно видно, что вначале обрабатывается цикл for (y=250;y>=3;y--), и только когда он закончится, начинается for (x=4;x<=250;x++).
Вот именно, что все правильно
эти циклы меняют только величину сравнения таймера
сначала одна цифра загорается, вторая тухнет
потом наоборот.
Eprinter писал(а):Вот пример кода, навскидку:
Код: Выделить всё
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;
Что это?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 11:22:55
FreshMan
vitalik_1984 писал(а):Как вообще возможно, что оба разряда горят одновременно?
один разряд у меня зажигается в совпадении и тушится в переполнении, а второй зажигается в переполнении и тушится в совпадении........., именно на этом принципе построен весь алгоритм работы........, плавно меняя OCR2 я меняю
ОДНОВРЕМЕННО длительность горения цифр каждого разряда......., вот такая петрушка, ....... вот только не работает сие ....., поэтому и бью в набат....., т.к охота разобраться

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 11:42:06
Eprinter
FreshMan писал(а):vitalik_1984 писал(а):Как вообще возможно, что оба разряда горят одновременно?
один разряд у меня зажигается в совпадении и тушится в переполнении, а второй зажигается в переполнении и тушится в совпадении........., именно на этом принципе построен весь алгоритм работы........,
Стоп, а при чём тут ШИМ тогда? Я так понял с ваших слов: вы один таймер-счётчик используете в режиме ШИМ, на выходе меняется напряжение, и от этого напряжения зависит яркость. В детали, каюсь, не вникал, поэтому написал ерунду в первом ответе.
А во втором, ниже, должно быть правильно.
Впрочем дошло - экспериментируете не с регистром в режиме ШИМ, а с широтно-импульсной модуляцией... Во мышанулся...

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 11:50:58
vitalik_1984
Не знаю как вы проверяете, вот тут все работает.
- 5.rar
- Файл проекта протеус и КВ с добавлением пары светодиодов для контроля
- (47.65 КБ) 172 скачивания
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 11:56:51
FreshMan
скачиваю ваш архив а он не скачивается......, скиньте плиз на мыло
Aleks060482@mail.ru
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 12:15:25
vitalik_1984
Хороший способ чужой ящик узнать... Обновите и пробуйте еще раз, у меня все скачалось.
Увидел ошибку в своем вложении
Там в конце нужно перенести в скобку } последнюю строчку
Кстати не доверяйте протеусу, он такие иногда финты выкидывает.
Этот ваш глюк мог прот создать.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 12:23:03
FreshMan
я свои эксперементы провожу на макетке
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 13:36:08
vitalik_1984
Так лучше работает
Просто на глаз плохо различается свечение.
И еще обновление var происходит не синхронно что ли.
Код: Выделить всё
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{OCR2=var;
PORTD=0x24; // зажигаю цифру 4 и тушу цифру 8
}
Код: Выделить всё
for (var=252;var>=3;var--)
{
delay_ms(50);
};
delay_ms(1000);
for (var=3;var<=252;var++)
{
delay_ms(50);
};
delay_ms(1000);
}
проверено в железе.
Заставил же ресурс мк уменьшить...

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт июн 21, 2012 18:06:01
FreshMan
vitalik_1984 писал(а):Заставил же ресурс мк уменьшить...
в смысле ?