на к561ла7 при условии что я совмещу все выходы. Другую микру достать сейчас у меня не реально.
Мелкие вопросы по МК и ПЛИС.
- Сообщения: 129
- Зарегистрирован: Вт мар 22, 2011 18:41:48
Подскажите можно ли попробывать заменить микросхему в программаторе Extra-PIC
на к561ла7 при условии что я совмещу все выходы. Другую микру достать сейчас у меня не реально.
на к561ла7 при условии что я совмещу все выходы. Другую микру достать сейчас у меня не реально.
- Реклама
Хм. Значит я неверно понимаю режим CTCtop=OCR1A, вроде как прерывание при совпадении.vitalik_1984 писал(а):может вы забыли вычесть из максимального счета таймера ваше значение при расчетах
Serj324
Да, но с учётом сказанного выше:
Серии 1553 и 561 построены на разных типах транзисторов, и не всегда 100% сопрягаются.Chettuser писал(а):Хочу предупредить, что при замене на 74HC-серию (с нестандартными ТТЛ-уровнями, переключаются они намного раньше) нужно будет поэкспериментировать с диодом (D5 на Вашей схеме). У меня логика никак не хотела переключаться, пришлось ставить диод Шоттки с меньшим порогом.
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Как программировать кнопку, подключенную на порт ввода/вывода МК, чтобы по нажатию на него переключалось режим работы ус-ва?
Например:
нажали - режим 1
еще раз нажали - режим 2
еще раз нажали - выкл
Например:
нажали - режим 1
еще раз нажали - режим 2
еще раз нажали - выкл
- Сообщения: 1802
- Зарегистрирован: Ср сен 07, 2011 21:40:30
1. Программируется не кнопка, а МК.
2. Для того, чтобы нажатия кнопки четко отрабатывались МК, необходимо организовать подавление дребезга. Желательно добавить флаг нажатия кнопки после процедуры антидребезга.
3. Заводите переменную счетчик режимов и каждый раз при нажатии кнопки инкрементируете переменную режима.
2. Для того, чтобы нажатия кнопки четко отрабатывались МК, необходимо организовать подавление дребезга. Желательно добавить флаг нажатия кнопки после процедуры антидребезга.
3. Заводите переменную счетчик режимов и каждый раз при нажатии кнопки инкрементируете переменную режима.
а ну тогда должно быть все правильно,чет я пропустил этот факт.Хм. Значит я неверно понимаю режим CTCtop=OCR1A, вроде как прерывание при совпадении
только у меня почему то другое значение получается для сравнения.
если частота 1мгц =1000000Гц
нужно 10Гц
1000000/10=100000тиков таймера до прерывания
в 65536 максимального значения таймера не лезет.
делим на 100000/ 2 =50000 тиков таймера
переводим в кекс 50000=C350h
Код: Выделить всё
// Timer/Counter 1 initialization - 10 Гц
.......
OCR1AH=0xC3; // это старший байт
OCR1AL=0x50; // это младший
если посчитать для делителя на 4 .
то 25000 =61A8h
для делителя на 8
то 12500=30d4h
ну никак с вашим значением не совпадает.
какое там в программе то было?
В поисках истины человек развивается.
- Реклама
У меня предделитель 1024, и счёт до 98, в итоге делится примерно на 100 тыс => на выходе 10 расчётных Гц.vitalik_1984 писал(а):вроде так должно быть для внутреннего генератора 1МГц
если посчитать для делителя на 4 .
то 25000 =61A8h
для делителя на 8
то 12500=30d4h
ну никак с вашим значением не совпадает.
какое там в программе то было?
В протеусе так и есть, а в железе быстрее примерно в 5 раз (по словам "заказчика"), из чего я делую два предположения:
1. неправильно стоят фьюзы
2. я намудрил с таймером
Так как по умолчанию меги имеют тактовую 1МГц, и у меня уже был опыт несовпадения расчёта с практикой, склоняюсь ко 2-му варианту...
Как-то так
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
ок понял
а почему тогда в проте правильно?
короче я так думаю тактируется наверно от 4МГц внутреннего,а на глаз сложно определить в 4 или пять раз быстрее.
нужно фьюзы посмотреть.там видно будет.
а почему тогда в проте правильно?
короче я так думаю тактируется наверно от 4МГц внутреннего,а на глаз сложно определить в 4 или пять раз быстрее.
нужно фьюзы посмотреть.там видно будет.
В поисках истины человек развивается.
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Парни, а нужно ли программировать калибровочные байты, если МК работает от внешнего кварца и для чего вообще нужны эти байты?
После прошивки с этими фьюзами мк перестал определяться, Atmega128
После прошивки с этими фьюзами мк перестал определяться, Atmega128
- Вложения
-
- Безымянный.JPG
- (51.88 КБ) 353 скачивания
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
и почему usbasp не определяется после нескольких включений, работал работал и все http://cxem.net/mc/mc67.php
блин, заработал программатор вновь сам собой и МК прошиваемый определился, ничего не пойму, вот теперь МК опять не определяется, хотя больше не прошивал, решил прочитать и не видит программатор его
блин, заработал программатор вновь сам собой и МК прошиваемый определился, ничего не пойму, вот теперь МК опять не определяется, хотя больше не прошивал, решил прочитать и не видит программатор его
В принципе можно. Но надо будет посмотреть с помощью утилиты tcom.exe (ссылку я давал выше) как чётко переключаются линии. Разумеется тестером смотреть на ногах 232 и логики.Serj324 писал(а):Подскажите можно ли попробывать заменить микросхему в программаторе Extra-PIC
на к561ла7 при условии что я совмещу все выходы. Другую микру достать сейчас у меня не реально.
Есть обработчик прерывания на МК AVR на ассемблере, который проверяет состояние кнопки и в зависимости от состояния кнопки переходит в определенный адрес.
Как сделать выход из прерывания? Если использовать команду reti, программа возвращается туда, где была прервана. А мне нужно, чтобы программа возвращалась на другой адрес.
Как сделать выход из прерывания? Если использовать команду 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......, и так по кругу........, что в моем коде не верно, из-за чего моя идея не работает ?
вот код:
Код: Выделить всё
#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);
};
}
}Tell Me The Truth
Сделать это несложно, подменив в стеке адрес возврата. Но это плохая идея, чреватая разными неприятностями. Я в таких случаях устанавливал в прерывании флаг, а в основной программе периодически "поглядывал" на этот флаг - переходить или не переходить по нужному адресу. Но этот метод, конечно, не гарантирует наносекундного времени реакции на прерывание.Rinatus писал(а): Если использовать команду reti, программа возвращается туда, где была прервана. А мне нужно, чтобы программа возвращалась на другой адрес.
Всё правильно, чтобы параллельно зажигалось-тухло, нужно другой код. Здесь ясно видно, что вначале обрабатывается цикл for (y=250;y>=3;y--), и только когда он закончится, начинается for (x=4;x<=250;x++). Нужно как-то иначе делать, например по прерываниям от таймера (или иначе) по очереди изменять значения и выводить их на ШИМ, одновременно переключая цифры. С ШИМом не экспериментировал, насколько это хорошо сработает не подскажуFreshMan писал(а):в реале, при включении, горит на полную цифра 4 а 8 потихоньку набирает яркость...., когда 8 набрала яркость на все 100% то и 4 горит на все 100%, затем 4 начинает плавно тухнуть, при этом 8 горит на полную....Код: Выделить всё
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); }; } }
что в моем коде не верно, из-за чего моя идея не работает ?
Вот пример кода, навскидку:
Код: Выделить всё
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;
Возможно дело в кварце, протокол USB очень требователен, а тут ещё программная эмуляция... У меня такой программатор вообще не завёлся, я плюнул и купил себе на базе 232.
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Тут мысль пришла - а ШИМ вообще принципиален? Если сделать по типу LED, скважностью, может тоже получится регулировать яркость?FreshMan писал(а):экспериментирую с ШИМ......нужно одновременно и плавно зажигать цифру 8 и тушить цифру 4, на газорозрядных индикаторах
Код: Выделить всё
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
эти циклы меняют только величину сравнения таймера
сначала одна цифра загорается, вторая тухнет
потом наоборот.
Может не нужно дублировать посты?
У вас в прерывании четко прописано, что один разряд гаснет, второй загорается.
В протеусе все правильно работает.
Как вообще возможно, что оба разряда горят одновременно?если
в одном прерывании
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;
В поисках истины человек развивается.
один разряд у меня зажигается в совпадении и тушится в переполнении, а второй зажигается в переполнении и тушится в совпадении........., именно на этом принципе построен весь алгоритм работы........, плавно меняя OCR2 я меняю ОДНОВРЕМЕННО длительность горения цифр каждого разряда......., вот такая петрушка, ....... вот только не работает сие ....., поэтому и бью в набат....., т.к охота разобратьсяvitalik_1984 писал(а):Как вообще возможно, что оба разряда горят одновременно?
Tell Me The Truth
Стоп, а при чём тут ШИМ тогда? Я так понял с ваших слов: вы один таймер-счётчик используете в режиме ШИМ, на выходе меняется напряжение, и от этого напряжения зависит яркость. В детали, каюсь, не вникал, поэтому написал ерунду в первом ответе.FreshMan писал(а):один разряд у меня зажигается в совпадении и тушится в переполнении, а второй зажигается в переполнении и тушится в совпадении........., именно на этом принципе построен весь алгоритм работы........,vitalik_1984 писал(а):Как вообще возможно, что оба разряда горят одновременно?
А во втором, ниже, должно быть правильно.
Впрочем дошло - экспериментируете не с регистром в режиме ШИМ, а с широтно-импульсной модуляцией... Во мышанулся...
Последний раз редактировалось Eprinter Чт июн 21, 2012 11:53:24, всего редактировалось 1 раз.
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Не знаю как вы проверяете, вот тут все работает.
В поисках истины человек развивается.
скачиваю ваш архив а он не скачивается......, скиньте плиз на мыло Aleks060482@mail.ru
Tell Me The Truth


