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

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

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

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

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

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

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

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

Godzilla82, интересно
PHP код:
PORTY &= ~(1‹‹X); 
допустим PORTY=00000001
1)применяю операцию сдвига (1‹‹x) где x=2 тогда получаю :00000100
2)применяю инверсию к полученному результату ~(00000100)=11111011
3)логическое умножение с PORTY : 00000001&11111011=00000001
Получается в порту PORTY будет значение = 00000001
Что то не вяжется с Вашим ответом : 0b11111011
Реклама:
Fraktal вне форума  
Непрочитано 10.01.2014, 09:44  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Fraktal Посмотреть сообщение
Что то не вяжется с Вашим ответом : 0b11111011
С каким моим ответом?
Я всего лишь написал, что после инвертирования получится
0b11111011
к чему вы сами пришли:
Сообщение от Fraktal Посмотреть сообщение
~(00000100)=11111011
А побитовая операция И c любым значением порта сбросит в этом любом значении второй бит.

Что видно:
Сообщение от Fraktal Посмотреть сообщение
00000001&11111011=00000001
второй бит сброшен (хотя он и не был установлен).

Последний раз редактировалось Godzilla82; 10.01.2014 в 10:01.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
Fraktal (11.01.2014)
Непрочитано 10.01.2014, 09:50  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,918
Сказал спасибо: 2,981
Сказали Спасибо 3,161 раз(а) в 2,146 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Fraktal Посмотреть сообщение
ForcePoint, я без кубиков начал писать, как - то недолюбливаю я их , хотя когда прижимает то обращаю свой взор на них для понятия общей картины структуры программы. Но и то только в том случае если я на 5% разбираюсь в синтаксисе языка на котором буду писать и 30% если разбираюсь в технологии выполняемой работы : что нужно сделать для получения требуемого результата.
Тут дело в том, что объяснить другому человеку проще именно в кубиках, а не в виде программы. Особенно, если сейчас этап изучения.

Кстати, к чему вызов main в обработчике?
Код:
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();                 
     }
ForcePoint вне форума  
Сказали "Спасибо" ForcePoint
Fraktal (11.01.2014)
Непрочитано 10.01.2014, 12:59  
Someone
Гражданин KAZUS.RU
 
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Fraktal Посмотреть сообщение
НУ ТОГДА мне придется делать прерывание по входу INT2 как на падение напряжения так и на появление напряжения на PINB2 ?
Ну да, "Any logical change on INTn generates an interrupt request". И тогда тело (в том варианте, что приведён) прерывания будет выглядеть

PORTD ^= 0x17;
PORTB ^= 0x01;

и всё. И конечно, никаких delay в прерывании. Как и cli - прерывания аппаратно запрещаются при входе в прерывание.

Последний раз редактировалось Someone; 10.01.2014 в 13:01.
Someone вне форума  
Сказали "Спасибо" Someone
Fraktal (11.01.2014)
Непрочитано 10.01.2014, 13:47  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Someone Посмотреть сообщение
PORTD ^= 0x17;
PORTB ^= 0x01;
и всё.
А про дребезг контактов все дружно зыбыли.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
Fraktal (11.01.2014)
Непрочитано 10.01.2014, 14:52  
KBH-I
Почётный гражданин KAZUS.RU
 
Аватар для KBH-I
 
Регистрация: 01.05.2009
Адрес: Коптево
Сообщений: 2,849
Сказал спасибо: 276
Сказали Спасибо 427 раз(а) в 274 сообщении(ях)
KBH-I на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от akegor Посмотреть сообщение
Нужен МК с блоками ясновидения и телепатии.
Сообщение от akegor Посмотреть сообщение
Что сказал профессор Преображенский насчет советских газет?
Сообщение от Fraktal Посмотреть сообщение
Не в курсе.
Сообщение от Fraktal Посмотреть сообщение
как тут цикл создать
Сообщение от _Артём_ Посмотреть сообщение
Я ведь не компилировал - сайт не позволяет
Сообщение от ForcePoint Посмотреть сообщение
А за использование _delay и/или циклов в обработчике прерывания я приговаривал-бы к пожизненному эциху с горячими паяльниками или принудительной переквалификации в джамшута.
Сообщение от Fraktal Посмотреть сообщение
как заставить кнопку вкл/выкл обработку программы
Сообщение от Godzilla82 Посмотреть сообщение
А про дребезг контактов все дружно зыбыли.
Спасибо всем, поржал. Может, в "Анекдоты" перенести?
)))


Fraktal, не дрейфь - прорвёшься: не ты первый, не ты последний.
KBH-I вне форума  
Сказали "Спасибо" KBH-I
Fraktal (11.01.2014)
Непрочитано 11.01.2014, 02:18  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

ForcePoint, Для того чтоб из прерывания программа вернулась в самое начало функции main(), пробовал через reti - выходит на следующую строку кода который должен был выполнится до прерывания перед прерыванием , а мне нужно было в начале функции перезаписать условие по прерыванию. В итоге пришел к этому :
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();
         switch(
Pausa)
        {
        case 
1:    Pausa=0;PORTB&=~(1‹‹PB0);break;//пины порта в минус для катода - индикатор горит        
        
case 0Pausa=1;PORTD=((1‹‹PD0)|(1‹‹PD1)|(1‹‹PD2)|(1‹‹PD4));PORTB=(1‹‹PB0)|(1‹‹PB2);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();
    
_delay_ms(10);
    
MCUCSR = (0‹‹ISC2);
    while(
Pausa){MCUCSR= (1‹‹ISC2);_delay_ms(10);}          
    
DDRB 0xff;    
    
GICR = (1‹‹INT2);        
    
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);
    
//;PORTD = 255;//удалить после строку
    //PORTB=2;//удалить после строку
    
dec_bin();
    
    
      switch(
i)
      {
        case 
1:while(1){
                         
PORTD =~(1‹‹PD4); //0XEF;
                      
PORTC s7_i[0];}
                
        case 
2: while(1){
                         
PORTD =~(1‹‹PD4);//0XEF;
                      
PORTC s7_i[0];
                      
_delay_ms(5);
                      
PORTD= ~(1‹‹PD2);//0XFB;
                      
PORTC s7_i[1];
                      
_delay_ms(5);}        
                
        case 
3:  while(1){
                         
PORTD =~(1‹‹PD4);//0XEF;
                      
PORTC s7_i[0];
                      
_delay_ms(5);
                      
PORTD=~(1‹‹PD2); //0XFB;
                      
PORTC s7_i[1];
                      
_delay_ms(5);
                      
PORTD=~(1‹‹PD1); //0XFD;
                      
PORTC s7_i[2];
                      
_delay_ms(5);} 
                
        case 
4:    while(1){      
                      
PORTD =~(1‹‹PD4);  //0XEF;
                      
PORTC s7_i[0];
                      
_delay_ms(5);
                      
PORTD=~(1‹‹PD2);  //0XFB;
                      
PORTC s7_i[1];
                      
_delay_ms(5);
                      
PORTD=~(1‹‹PD1); //0XFD;
                      
PORTC s7_i[2];
                      
_delay_ms(5);
                      
PORTD=~(1‹‹PD0); //0XFE;
                      
PORTCs7_i[3];
                      
_delay_ms(5);    }}    
                                                                  
          } 
Fraktal вне форума  
Непрочитано 11.01.2014, 02:21  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

KBH-I, Благадарю , смотрю смело в МИКРОПРОЦЕССОРНОЕ БУДУЩЕЕ
Fraktal вне форума  
Непрочитано 11.01.2014, 02:30  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,907
Сказал спасибо: 2,543
Сказали Спасибо 11,818 раз(а) в 5,924 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Сообщение от Fraktal Посмотреть сообщение
В итоге пришел к этому :
А что будет со стеком? Ведь он будет расти с каждым вызовом main();
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Сказали "Спасибо" akegor
Fraktal (11.01.2014)
Непрочитано 11.01.2014, 02:36  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Как программно отследить появление логического нуля на входе /Reset?

Вот это плохо и как же быть
Fraktal вне форума  
 

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

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

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

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

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


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


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