Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту


 
Опции темы
Непрочитано 27.03.2020, 18:28  
E_C_C
Почётный гражданин KAZUS.RU
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,800
Сказал спасибо: 706
Сказали Спасибо 657 раз(а) в 377 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Синхронизация идет с частотой 100гц , т.е через 10 мсек, первый импульс должен сгенерироваться через 20 микросекунд , следующий через 3333мкс + 20 и третий через 6666мкс+ 20. ширина импульса 50 мкс. До следующего синхроимпульса ещё 3000мкс .Не должно быть пересечений , но они есть. Заметил , что от того как я объявляю переменные - char, integer , unsigned integer , или делаю их volatile integer , картина выходных импульсов меняется . Это вообще за гранью моего понимания. Такое впечатление , что происходят колизии в памяти программ .Иногда в пошаговой отладке я вижу, что происходит выход из прерывания по INT 1 , но часть флагов не выставлена в единицу , или наоборот флаги все в 1, но time_count не обнулился .
Реклама:
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Непрочитано 27.03.2020, 19:34  
j-Roger
Вид на жительство
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 347
Сказал спасибо: 247
Сказали Спасибо 407 раз(а) в 200 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Proteus общие вопросы

E_C_C, похоже нужно алгоритм менять/усовершенствовать.
Вот поведение в железе ( ATMEGA8А, но в данном случае это ничего не меняет)
Нажмите на изображение для увеличения
Название: ScreenShot.jpg
Просмотров: 0
Размер:	132.9 Кб
ID:	151595
j-Roger вне форума  
Сказали "Спасибо" j-Roger
E_C_C (27.03.2020)
Непрочитано 27.03.2020, 19:36  
E_C_C
Почётный гражданин KAZUS.RU
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,800
Сказал спасибо: 706
Сказали Спасибо 657 раз(а) в 377 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Осталось понять почему так получается, задумка то вроде нормальная....
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Непрочитано 27.03.2020, 23:58  
j-Roger
Вид на жительство
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 347
Сказал спасибо: 247
Сказали Спасибо 407 раз(а) в 200 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Вот что получилось.
Нажмите на изображение для увеличения
Название: ScreenShot.jpg
Просмотров: 0
Размер:	132.2 Кб
ID:	151607
Важные моменты выделены комментариями с угловыми скобками.

PHP код:
#include ‹mega8.h›  
 
// ››››››››››››››››››››
    // программный счетчик - volatile
    
volatile unsigned int time_count
    
// флаги - volatile
    
volatile unsigned char flag1,flag2,flag3,flag4,flag5,flag6,flag7;
// ‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹
     
     
unsigned int delay_A,delay_B,delay_C,length_A,length_B,length_C  ;
     
unsigned int delay_time=20
     
unsigned int length_pulse=50


// External Interrupt 1 service routine            // прерывание по синхре 
interrupt [EXT_INT1void ext_int1_isr(void)
{
        
#asm("wdr")
        
flag1=1;
        
flag2=1;
        
flag3=1;
        
flag4=1;
        
flag5=1;
        
flag6=1;
        
flag7=1
              
        
time_count=0// сброс программного счетчика
       
}


  
// Timer2     10mks
 
interrupt [TIM2_COMPvoid timer2_comp_isr(void)
  { 
   
#asm("wdr")
   
   
if((flag7) && (time_count ‹ 1000))
    {
          
time_count++;
    };
   }


void main(void)
{

PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x0A;
TCNT2=0x00;
OCR2=0x0A;
GICR|=0x80;
MCUCR=0x0C;
GIFR=0x80;
TIMSK=0x80;  
SPCR=0x00;    
TWCR=0x00;

WDTCR=0x1E;
WDTCR=0x0E;


#asm("sei")


  
delay_A delay_time
  
length_A length_pulse+delay_time;  
  
delay_B delay_time+333
  
length_B length_pulse+delay_time+333;  
  
delay_C delay_time+666
  
length_C length_pulse+delay_time+666
  
  
     
while (
1)
   {  
     
unsigned int time_count_tmp// врЕменная переменная для программного счетчика

     #asm("wdr")

// ››››››››››››››››››››
    
if (!flag7) continue; // работаем только после синхроимпульса
    // "безопасное" чтение 2-байтового счетчика
    #asm("cli")
    
time_count_tmp time_count// далее пользуемся копией программного счетчика
    #asm("sei")
// ‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹

             
       
if((flag1) && ( time_count_tmp ›= delay_A))         // выдыдим импульс 1
            
{
              
PORTB.3=1
                
flag1=0;               
                };            
         if((
flag2) && ( time_count_tmp ›= length_A))
                   {
                   
PORTB.3=0
                      
flag2=0
                      
                        };            
        if((
flag3) && ( time_count_tmp ›= delay_B))        // выдыдим импульс 2
            
{
               
PORTB.1=1;                
                  
flag3=0;
                };                 
           if((
flag4) && (time_count_tmp ›= length_B))
                {
                  
PORTB.1=0
                     
flag4=0;
                   };                 
          if((
flag5) && (time_count_tmp ›= delay_C))      // выдыдим импульс 3
             

               
PORTB.4=1
                  
flag5=0;                
                };   
             if((
flag6) && (time_count_tmp ›= length_C))
                {
                   
PORTB.4=0
                    
flag6=0;  
                    
flag7=0;
                       };     
                   
      };  
      

P. S.
Да, и самое главное - успехов!

Последний раз редактировалось j-Roger; 28.03.2020 в 14:43.
j-Roger вне форума  
Эти 2 пользователя(ей) сказали Спасибо j-Roger за это сообщение:
DmitriyVDN (28.03.2020), E_C_C (28.03.2020)
Непрочитано 28.03.2020, 00:12  
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,638
Сказал спасибо: 167
Сказали Спасибо 744 раз(а) в 469 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Сообщение от j-Roger Посмотреть сообщение
2) Использовалась Atmel Studio
Вы это серьезно?
Ara41 вне форума  
Непрочитано 29.03.2020, 16:00  
pavelpicaaso
Прохожий
 
Регистрация: 16.03.2020
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pavelpicaaso на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Доброго времени суток, создаю в протеусе проект по USB HID, вопрос такой решил сделать чтобы по нажатию на USBCONN запускалось usb, а при отключении вырубалось (понимаю что нужно сделать прерывание, но не знаю как)
Пример кода:
https://pastebin.com/tzGZHtyF
Сделал пока что костылем, просто в начале программы проверяю включен он или нет, но хочу чтобы можно было в любой момент отключить и подключить
pavelpicaaso вне форума  
Непрочитано 29.03.2020, 16:03  
pavelpicaaso
Прохожий
 
Регистрация: 16.03.2020
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pavelpicaaso на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Не знаю почему но картинка не вставилась
url https://ibb.co/09xKDFg
pavelpicaaso вне форума  
Непрочитано 29.03.2020, 16:07  
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,638
Сказал спасибо: 167
Сказали Спасибо 744 раз(а) в 469 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Сообщение от pavelpicaaso Посмотреть сообщение
решил сделать чтобы по нажатию на USBCONN запускалось usb, а при отключении вырубалось
это как понимать?
Ara41 вне форума  
Непрочитано 29.03.2020, 16:15  
pavelpicaaso
Прохожий
 
Регистрация: 16.03.2020
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pavelpicaaso на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Сделать (исправить) эмуляцию извлечения, сейчас она сделало через отправку disconnect
https://ibb.co/W2tj2hk
https://ibb.co/Hz4vW7L
pavelpicaaso вне форума  
Непрочитано 29.03.2020, 16:23  
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,638
Сказал спасибо: 167
Сказали Спасибо 744 раз(а) в 469 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Proteus общие вопросы

Сообщение от pavelpicaaso Посмотреть сообщение
решил сделать чтобы по нажатию на USBCONN запускалось usb, а при отключении вырубалось (понимаю что нужно сделать прерывание, но не знаю как)
VCC от USB на любой INT.
Ara41 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по PROTEUS-у Advanced_LAMER Proteus 370 07.01.2018 05:26
Вопросы и замечания по топику - FAQ по PROTEUS avr123-nm-ru Proteus 292 05.06.2015 20:49
Вопросы по работе с Proteus dosikus Proteus 510 20.12.2007 18:48
CAN BUS общие впечатления vasseff Микроконтроллеры, АЦП, память и т.д 7 20.06.2007 09:15
Вопросы по Си. Zemlyanov Proteus, KiCAD и другие ECAD 5 20.11.2006 15:36


Часовой пояс GMT +4, время: 22:51.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot