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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,907
Сказал спасибо: 2,543
Сказали Спасибо 11,818 раз(а) в 5,924 сообщении(ях)
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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,907
Сказал спасибо: 2,543
Сказали Спасибо 11,818 раз(а) в 5,924 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Fraktal Посмотреть сообщение
отличается только записью
Да это-то понятно, непонятно зачем менять одну темную лошадку на другую, может лучше уж вместо, скажем, PD0 давать осмысленное имя? Иначе хрен с редькой не сладкий.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 09.01.2014, 10:15  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 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.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,918
Сказал спасибо: 2,981
Сказали Спасибо 3,161 раз(а) в 2,146 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

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

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

Последний раз редактировалось ForcePoint; 09.01.2014 в 18:24.
ForcePoint вне форума  
Непрочитано 09.01.2014, 11:10  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
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 
0Pausa=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;isizeof(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_cifr0;++i) {count_cifr/=10;} 
    switch(
i)    
    {
        case 
1s7_i[0]=summa;break;
        case 
2s7_i[0]=summa%10;s7_i[1]=summa/10;break; 
        case 
3s7_i[0]=summa%10;summa/=10;s7_i[1]=summa%10;s7_i[2]=summa/10;break;
        case 
4s7_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;ni;++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);
                      
PORTD0XFB;
                      
PORTC s7_i[1];
                      
_delay_ms(5);}        
                
        case 
3:  while(1){
                         
PORTD =0XEF;
                      
PORTC s7_i[0];
                      
_delay_ms(5);
                      
PORTD0XFB;
                      
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);
                      
PORTD0XFB;
                      
PORTC s7_i[1];
                      
_delay_ms(5);
                      
PORTD=0XFD;
                      
PORTC s7_i[2];
                      
_delay_ms(5);
                      
PORTD=0XFE;
                      
PORTCs7_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, время: 20:41.


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