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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Как программно отследить появление логического нуля на входе /Reset?

Непрочитано 08.01.2014, 17:42  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

ForcePoint, НУ ТОГДА мне придется делать прерывание по входу INT2 как на падение напряжения так и на появление напряжения на PINB2 ?
Реклама:
Fraktal вне форума  
Непрочитано 09.01.2014, 05:34  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

ForcePoint, Вот так вот переписал по Вашему совету
Цитата:
uint8_t PIN = 0;

/*************************************/
ISR(INT2_vect)
{
cli();
_delay_ms(5);
switch(PIN)
{
case 1: PIN=0;PORTD=(~1‹‹PD0)|(~1‹‹PD1)|(~1‹‹PD2)|(~1‹‹PD4 );PORTB&=~(1‹‹PB0); break;
case 0: PIN=1;PORTD=((1‹‹PD0)|(1‹‹PD1)|(1‹‹PD2)|(1‹‹PD4)); PORTB|=(1‹‹PB0);break;
}
reti();
}

Последний раз редактировалось Fraktal; 09.01.2014 в 06:00.
Fraktal вне форума  
Непрочитано 09.01.2014, 06:59  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Fraktal, я что-то пропустил... Какой IDE пользуетесь?

Вопрос к знатокам: чем отличается запись "PORTD=(~1‹‹PD0)|(~1‹‹PD1)|(~1‹‹PD2)|(~1‹‹PD4 );"
от "PORTD=0x17"?
Понял бы разницу, если бы была запись более осмысленная, например (это к другому месту):"KNOB=0" или "KNOB=SHORT".
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 09.01.2014, 07:57  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

akegor, AVR STUDIO 5.
Fraktal вне форума  
Непрочитано 09.01.2014, 08:02  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

akegor,
Сообщение от akegor Посмотреть сообщение
"PORTD=(~1‹‹PD0)|(~1‹‹PD1)|(~1‹‹PD2)|(~1‹‹PD4 );"
от "PORTD=0x17"?
отличается только записью значения в порт (более наглядно) а так эта запись значения эквивалентна значению = 0х17
Fraktal вне форума  
Непрочитано 09.01.2014, 09:30  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Fraktal Посмотреть сообщение
отличается только записью
Да это-то понятно, непонятно зачем менять одну темную лошадку на другую, может лучше уж вместо, скажем, PD0 давать осмысленное имя? Иначе хрен с редькой не сладкий.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 09.01.2014, 10:15  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

А никого не смущает присутствие "~" ?

Вот это вот - PORTD=(~1‹‹PD0)|(~1‹‹PD1)|(~1‹‹PD2)|(~1‹‹PD4 ) :
никогда не равно "PORTD=0x17"

И применение такой конструкции PORTD=(~1‹‹PD0)|(~1‹‹PD1)|(~1‹‹PD2)|(~1‹‹PD4 ) вызывает большое сомнение. Так как устанавливает все биты "окромя" , указанных четырех.

Вот такая конструкция используется часто -

PORTD &= ( ~1 ‹‹ PD0 ) | ( ~1 ‹‹ PD1 ) | ( ~1 ‹‹ PD2 ) | ( ~1 ‹‹ PD4 )

так как служит для сброса группы бит в порту с последующей установкой по или части бит из этой группы.
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
Fraktal (09.01.2014)
Непрочитано 09.01.2014, 10:37  
ForcePoint
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,457
Сказал спасибо: 3,225
Сказали Спасибо 3,511 раз(а) в 2,392 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Fraktal Посмотреть сообщение
ForcePoint, Вот так вот переписал по Вашему совету
Не радует. Ибо использована ф-ция "_delay".
Давайте-ка кубики порисуем. Что желаете получить по изменениям на PB2?

Upd: Я имел в виду "алгоритм нарисуем". Как-то мне кисло разбирать алгоритм по исходнику https://kazus.run/forums/showpost.ph...4&postcount=60 (вероятно - содержащему ошибки).

Последний раз редактировалось ForcePoint; 09.01.2014 в 18:24.
ForcePoint вне форума  
Непрочитано 09.01.2014, 11:10  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Boba_spb Посмотреть сообщение
Вот такая конструкция используется часто -

PORTD &= ( ~1 ‹‹ PD0 ) | ( ~1 ‹‹ PD1 ) | ( ~1 ‹‹ PD2 ) | ( ~1 ‹‹ PD4 )

так как служит для сброса группы бит в порту с последующей установкой по или части бит из этой группы.
Тогда надо писать:
PHP код:
PORTD &= ~(  (1‹‹PD0) | (1‹‹PD1)  | (1‹‹PD2) | (1‹‹PD4) ); 
А у вас получается:
Код:
11111110
11111100
11111000
11100000
---------
11111110
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
Fraktal (09.01.2014)
Непрочитано 09.01.2014, 16:13  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

ForcePoint, отлавливаю нажатие кнопки
PHP код:
 /*
 * KursStudi.c
 *
 * Created: 23.12.2013 23:13:58
 *  Author: Sirius
 */ 
#define  F_CPU 1000000ul
#include ‹avr/io.h›
#include ‹avr/interrupt.h›
#include ‹avr/signal.h›
#include ‹util/delay.h›
#include ‹inttypes.h›
#include ‹stdlib.h›
uint8_t s7_i[4];
int i;
uint8_t Pausa = 0;


/*************************************/     
     
     ISR(INT2_vect)     
     {
         cli();
        _delay_ms(5);
         switch(Pausa)
        {
        case 1:    Pausa=0;PORTD=(~1‹‹PD0)|(~1‹‹PD1)|(~1‹‹PD2)|(~1‹‹PD4);PORTB&=~(1‹‹PB0); break;        
        case 0: Pausa=1;PORTD=((1‹‹PD0)|(1‹‹PD1)|(1‹‹PD2)|(1‹‹PD4));PORTB|=(1‹‹PB0);break;    
        }                                
                                
        main();                
     }
               
     uint16_t massiv (void)
 {
     uint8_t min=255;
     uint32_t  sum=0;
     uint8_t  Array[700];
     for (int i=0;i‹sizeof(Array);++i)
     {Array[i]=255;
         if ( min › Array[i]) min = Array[i];  
     sum +=Array[i];    }                       
     return (sum/sizeof(Array))*3+min;}
     
  
  
        void dec_bin ()
{    
    uint16_t summa = massiv();
    uint16_t count_cifr = summa;    
    for ( i=0;count_cifr›0;++i) {count_cifr/=10;} 
    switch(i)    
    {
        case 1: s7_i[0]=summa;break;
        case 2: s7_i[0]=summa%10;s7_i[1]=summa/10;break; 
        case 3: s7_i[0]=summa%10;summa/=10;s7_i[1]=summa%10;s7_i[2]=summa/10;break;
        case 4: s7_i[0]=summa%10;summa/=10;s7_i[1]=summa%10;summa/=10;s7_i[2]=summa%10;s7_i[3]=summa/=10;break;
    }                                                
        for (uint8_t n=0;n‹i;++n)
    {        
        switch(s7_i[n])
           {
            case 0:s7_i[n] = 0x3F;break;case 5:s7_i[n] = 0X6D;break;
            case 1:s7_i[n] = 0X06;break;case 6:s7_i[n] = 0X7D;break;
            case 2:s7_i[n] = 0X5B;break;case 7:s7_i[n] = 0X07;break;
            case 3:s7_i[n] = 0X4F;break;case 8:s7_i[n] = 0X7F;break;
            case 4:s7_i[n] = 0X66;break;case 9:s7_i[n] = 0X6F;break;                                                        
           }
    }
}  
   
   
   
    main ()  
  { 
    sei();          
    DDRB = 0xff;    
    GICR = (1‹‹INT2);
    while(Pausa){MCUCSR= (1‹‹ISC2);}
    MCUCSR = (0‹‹ISC2) ;
    PORTB |= (1‹‹PB2);    
    DDRC = (1‹‹PC0)|(1‹‹PC1)|(1‹‹PC2)|(1‹‹PC3)|(1‹‹PC4)|(1‹‹PC5)|(1‹‹PC6)|(1‹‹PC7); 
    DDRD = (1‹‹PD0)|(1‹‹PD1)|(1‹‹PD2)|(1‹‹PD3)|(1‹‹PD4)|(1‹‹PD5)|(1‹‹PD6)|(1‹‹PD7);    
    DDRA = ~((1‹‹PA0)|(1‹‹PA1)|(1‹‹PA2)|(1‹‹PA3)|(1‹‹PA4)|(1‹‹PA5)|(1‹‹PA6)|(1‹‹PA7));
    PORTA =    (1‹‹PA0)|(1‹‹PA1)|(1‹‹PA2)|(1‹‹PA3)|(1‹‹PA4)|(1‹‹PA5)|(1‹‹PA6)|(1‹‹PA7);
    dec_bin();
      switch(i)
      {
        case 1:while(1){
                         PORTD =0XEF;
                      PORTC = s7_i[0];}
                
        case 2: while(1){
                         PORTD =0XEF;
                      PORTC = s7_i[0];
                      _delay_ms(5);
                      PORTD= 0XFB;
                      PORTC = s7_i[1];
                      _delay_ms(5);}        
                
        case 3:  while(1){
                         PORTD =0XEF;
                      PORTC = s7_i[0];
                      _delay_ms(5);
                      PORTD= 0XFB;
                      PORTC = s7_i[1];
                      _delay_ms(5);
                      PORTD=0XFD;
                      PORTC = s7_i[2];
                      _delay_ms(5);} 
                
        case 4:    while(1){      
                      PORTD =0XEF;
                      PORTC = s7_i[0];
                      _delay_ms(5);
                      PORTD= 0XFB;
                      PORTC = s7_i[1];
                      _delay_ms(5);
                      PORTD=0XFD;
                      PORTC = s7_i[2];
                      _delay_ms(5);
                      PORTD=0XFE;
                      PORTC= s7_i[3];
                      _delay_ms(5);    }}    
                                                                  
          } 
Fraktal вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.