Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 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
ну никак с вашим значением не совпадает.

какое там в программе то было?
В поисках истины человек развивается.
Аватара пользователя
Eprinter
Опытный кот
Сообщения: 802
Зарегистрирован: Сб дек 19, 2009 14:51:11
Откуда: Нашенский

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Eprinter »

vitalik_1984 писал(а):вроде так должно быть для внутреннего генератора 1МГц
если посчитать для делителя на 4 .
то 25000 =61A8h
для делителя на 8
то 12500=30d4h
ну никак с вашим значением не совпадает.

какое там в программе то было?

У меня предделитель 1024, и счёт до 98, в итоге делится примерно на 100 тыс => на выходе 10 расчётных Гц.
В протеусе так и есть, а в железе быстрее примерно в 5 раз (по словам "заказчика"), из чего я делую два предположения:
1. неправильно стоят фьюзы
2. я намудрил с таймером
Так как по умолчанию меги имеют тактовую 1МГц, и у меня уже был опыт несовпадения расчёта с практикой, склоняюсь ко 2-му варианту...
Как-то так :roll:
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

ок понял
а почему тогда в проте правильно?
короче я так думаю тактируется наверно от 4МГц внутреннего,а на глаз сложно определить в 4 или пять раз быстрее.
нужно фьюзы посмотреть.там видно будет.
В поисках истины человек развивается.
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение alexey6522 »

Парни, а нужно ли программировать калибровочные байты, если МК работает от внешнего кварца и для чего вообще нужны эти байты?
После прошивки с этими фьюзами мк перестал определяться, Atmega128
Вложения
Безымянный.JPG
(51.88 КБ) 343 скачивания
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение alexey6522 »

и почему usbasp не определяется после нескольких включений, работал работал и все http://cxem.net/mc/mc67.php
блин, заработал программатор вновь сам собой и МК прошиваемый определился, ничего не пойму, вот теперь МК опять не определяется, хотя больше не прошивал, решил прочитать и не видит программатор его
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Serj324 писал(а):Подскажите можно ли попробывать заменить микросхему в программаторе Extra-PIC
на к561ла7 при условии что я совмещу все выходы. Другую микру достать сейчас у меня не реально.

В принципе можно. Но надо будет посмотреть с помощью утилиты tcom.exe (ссылку я давал выше) как чётко переключаются линии. Разумеется тестером смотреть на ногах 232 и логики.
Rinatus
Родился
Сообщения: 15
Зарегистрирован: Сб май 14, 2011 09:32:33
Откуда: Казань

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Rinatus »

Есть обработчик прерывания на МК AVR на ассемблере, который проверяет состояние кнопки и в зависимости от состояния кнопки переходит в определенный адрес.
Как сделать выход из прерывания? Если использовать команду reti, программа возвращается туда, где была прервана. А мне нужно, чтобы программа возвращалась на другой адрес.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 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......, и так по кругу........, что в моем коде не верно, из-за чего моя идея не работает ?
Tell Me The Truth
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Jack_A »

Rinatus писал(а): Если использовать команду reti, программа возвращается туда, где была прервана. А мне нужно, чтобы программа возвращалась на другой адрес.

Сделать это несложно, подменив в стеке адрес возврата. Но это плохая идея, чреватая разными неприятностями. Я в таких случаях устанавливал в прерывании флаг, а в основной программе периодически "поглядывал" на этот флаг - переходить или не переходить по нужному адресу. Но этот метод, конечно, не гарантирует наносекундного времени реакции на прерывание.
Аватара пользователя
Eprinter
Опытный кот
Сообщения: 802
Зарегистрирован: Сб дек 19, 2009 14:51:11
Откуда: Нашенский

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 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++). Нужно как-то иначе делать, например по прерываниям от таймера (или иначе) по очереди изменять значения и выводить их на ШИМ, одновременно переключая цифры. С ШИМом не экспериментировал, насколько это хорошо сработает не подскажу :dont_know:

Вот пример кода, навскидку:

Код: Выделить всё

 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]
Аватара пользователя
Eprinter
Опытный кот
Сообщения: 802
Зарегистрирован: Сб дек 19, 2009 14:51:11
Откуда: Нашенский

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 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 (мой предыдущий пример, граничные значения), успеет ли так же быстро отрабатывать управляемая им схема, не придётся ли вводить паузы для скрытия переходных процессов?
Немного сумбурно, надеюсь мысль понятна :roll:
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 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;

Что это?
В поисках истины человек развивается.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение FreshMan »

vitalik_1984 писал(а):Как вообще возможно, что оба разряда горят одновременно?

один разряд у меня зажигается в совпадении и тушится в переполнении, а второй зажигается в переполнении и тушится в совпадении........., именно на этом принципе построен весь алгоритм работы........, плавно меняя OCR2 я меняю ОДНОВРЕМЕННО длительность горения цифр каждого разряда......., вот такая петрушка, ....... вот только не работает сие ....., поэтому и бью в набат....., т.к охота разобраться :tea:
Tell Me The Truth
Аватара пользователя
Eprinter
Опытный кот
Сообщения: 802
Зарегистрирован: Сб дек 19, 2009 14:51:11
Откуда: Нашенский

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Eprinter »

FreshMan писал(а):
vitalik_1984 писал(а):Как вообще возможно, что оба разряда горят одновременно?

один разряд у меня зажигается в совпадении и тушится в переполнении, а второй зажигается в переполнении и тушится в совпадении........., именно на этом принципе построен весь алгоритм работы........,

Стоп, а при чём тут ШИМ тогда? Я так понял с ваших слов: вы один таймер-счётчик используете в режиме ШИМ, на выходе меняется напряжение, и от этого напряжения зависит яркость. В детали, каюсь, не вникал, поэтому написал ерунду в первом ответе. :oops:
А во втором, ниже, должно быть правильно.

Впрочем дошло - экспериментируете не с регистром в режиме ШИМ, а с широтно-импульсной модуляцией... Во мышанулся... :?
Последний раз редактировалось Eprinter Чт июн 21, 2012 11:53:24, всего редактировалось 1 раз.
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

Не знаю как вы проверяете, вот тут все работает.
5.rar
Файл проекта протеус и КВ с добавлением пары светодиодов для контроля
(47.65 КБ) 169 скачиваний
В поисках истины человек развивается.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение FreshMan »

скачиваю ваш архив а он не скачивается......, скиньте плиз на мыло Aleks060482@mail.ru
Tell Me The Truth
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

Хороший способ чужой ящик узнать... Обновите и пробуйте еще раз, у меня все скачалось.
Увидел ошибку в своем вложении
Там в конце нужно перенести в скобку } последнюю строчку
Кстати не доверяйте протеусу, он такие иногда финты выкидывает.
Этот ваш глюк мог прот создать.
В поисках истины человек развивается.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение FreshMan »

я свои эксперементы провожу на макетке
Tell Me The Truth
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 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);
      }
 

проверено в железе.
Заставил же ресурс мк уменьшить... :facepalm:
Вложения
main.c
(1.21 КБ) 268 скачиваний
В поисках истины человек развивается.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение FreshMan »

vitalik_1984 писал(а):Заставил же ресурс мк уменьшить...

в смысле ?
Tell Me The Truth
Ответить

Вернуться в «Разные вопросы по МК»