Страница 1 из 2

регистр и светодиоды

Добавлено: Чт окт 16, 2014 08:59:47
sirha
Всем привет подскажите возможно ли как нибудь в прерываниях упростить вот этот код

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

#include <tiny13.h>
#include <delay.h>
   int i,b;
     interrupt [EXT_INT0] void ext_int0_isr(void)
{  

      
       for (b=0;b<1;b++)
       { 
            
       }  
       

 

   for (i=0;i<b;i++) 
  {  
  PORTB.3=1;
  PORTB.0=1; 
  delay_us(1);
  PORTB.0=0; 
  PORTB.3=0; 
  delay_us(1);
  } 
  
   
    for (i=0;i<1;i++) 
  {
  PORTB.2=1; 
  delay_us(1);
   
  PORTB.2=0;
  delay_us(1);
  }
  
  delay_ms(100);
  
}
  
void main (void)
{
PORTB=0x02;
DDRB=0xD;
MCUCR=0x00;
GICR=0xC0;
 #asm ("sei");
 
 
 while(1);

    }   
    
    

тут при нажатии одной кнопки загорается светодиод,при каждом нажатии количество загоревшихся светодиодов постепенно увеличивается


Можете привести примеры кода для codevision ,чтобы при нажатии кнопки загорался светодиод , при повторном нажатии загорался следующий светодиод а предыдущий тух и так далее,код только с регистром 74hc595

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 09:39:57
Pink-Pank
тут при нажатии одной кнопки загорается светодиод,при каждом нажатии количество загоревшихся светодиодов постепенно увеличивается
Интересно, как это у Вас реализовано?
Не вижу, где меняется значение a,b,c.
Не вижу, что a,b,c объявлены как volatile
Как Вы собираетесь увидеть вот это:

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

delay_us(1);
Код-то вообще рабочий?

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 09:53:40
sirha
Pink-Pank писал(а):
Как Вы собираетесь увидеть вот это:

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

delay_us(1);
Код-то вообще рабочий?
Вообьще то это регистр,код в протеусе работает
Зачем мне это видеть)))

это все го лишь импульс который идет на регистр чтобы светодиод включить

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:08:40
Pink-Pank
так вы светодиод включаете на 1 мкс
проект в архиве можете выложить? Мне прям аж интересно стало, как это ЭТОТ код у Вас работает..

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:20:54
sirha
Pink-Pank писал(а):так вы светодиод включаете на 1 мкс
проект в архиве можете выложить?
вот

при чем тут 1 мкс и светодиод??

я его импульсами включаю

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:23:17
Morroc
Pink-Pank писал(а):так вы светодиод включаете на 1 мкс
А чего бы в симуляторе не включаться светодиоду на 1 мкс ? Он же нарисованный :))

"код в протеусе работает" это вообще какая то роковая фраза, как заклинание прям :)) мне отчего то даже ставить расхотелось эту штуку, а то вдруг потом буду мучится с железкой "но ведь код в протеусе то работает !"

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:27:24
sirha
Morroc писал(а):
Pink-Pank писал(а):так вы светодиод включаете на 1 мкс
А чего бы в симуляторе не включаться светодиоду на 1 мкс ? Он же нарисованный :))
вы значете что такое сдвиговые регистры??

почему светодиод должен включаться на 1 мкс????

я его импульсами включаю

http://avrprog.blogspot.ru/2013/06/74hc595.html

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:40:11
Pink-Pank
Код, который в архиве несколько отличается от того, что Вы здесь выложили.
Ваш код:
Спойлер

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

#include <tiny13.h>
#include <delay.h>
   int i,b;
     interrupt [EXT_INT0] void ext_int0_isr(void)
{  

      
       for (b=0;b<1;b++)
       { 
            
       }  
       


   for (i=0;i<b;i++) 
  {  
  PORTB.3=1;
  PORTB.0=1; 
  delay_us(1);
  PORTB.0=0; 
  PORTB.3=0; 
  delay_us(1);
  } 

   
    for (i=0;i<1;i++) 
  {
  PORTB.2=1; 
  delay_us(1);
   
  PORTB.2=0;
  delay_us(1);
  }
  
  delay_ms(100);
  
}
  
void main (void)
{
PORTB=0x02;
DDRB=0xD;
MCUCR=0x00;
GICR=0xC0;
 #asm ("sei");
 
 
 while(1);


    }   
    
    

Можно изменить код так:
Спойлер

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

#include <tiny13.h>
#include <delay.h>
     interrupt [EXT_INT0] void ext_int0_isr(void)
{  
  PORTB.3=1;
  PORTB.0=1; 
  delay_us(1);
  PORTB.0=0; 
  PORTB.3=0; 
  delay_us(1);
  
  PORTB.2=1; 
  delay_us(1);
   
  PORTB.2=0;
  delay_us(1);
  
  delay_ms(100);  
}
  
void main (void)
{
PORTB=0x02;
DDRB=0xD;
MCUCR=0x00;
GICR=0xC0;
 #asm ("sei");
 
 
 while(1);


    }   
    
    
а еще могу сказать ,что в железе это не будет работать так, как надо. Потому что есть такое понятие, как "дребезг контактов"

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:43:21
sirha
Pink-Pank писал(а): "дребезг контактов"
а что нужно добавить или изменить чтобы заработало ?

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:45:22
pyzhman
Нужно счетчик в прерывании организовать и по его значению зажигать светодиоды. А то и вообще, просто сдвигать порт, не забывая зажигать нужное.

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:46:25
Pink-Pank
нужно добавить задержки 10-20 мс по факту нажатия кнопки (можно считать, что она у Вас есть, равная 100 мс) и по факту ее отпускания. И чтобы программа во время этих задержек не реагировала на прерывание от кнопки. Более подробно смотрите Гугл.

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:50:04
Morroc
или вообще не использовать прерывания для опроса кнопок - в небольшом коде мне кажется так понятней и проще будет

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:50:36
sirha
pyzhman писал(а):Нужно счетчик в прерывании организовать
можете показать кодом как это сделать

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 10:59:48
Morroc
вам pink-pank же код скинул - попробуйте

можно хранить байт в переменной и гонять там сдвигом единичку, каждый раз скидывая байт целиком в регистр - обычно так и делают, но если хочется сделать именно "бегущий огонь" на 595м и ничего больше - можно по первому нажатию записывать туда 1, а дальше 0 и двигать на 1 такт, дергая потом защелку

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 11:09:25
sirha
Pyzhman продемонстрируйте сказанное выше пожалуйста очень интересно,токо с помощью кнопки

Можете пожалуста написать код чтобы предыдущий светодиод тух при зажигании следующего

я некоторые записи не понимаю мне бы их кодом разьяснять я еще не такой умный чтобы знать прерывания на отлично

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 11:54:28
pyzhman
В приложении. Великого смысла вводить в такую программу прерывание не увидел. По значению счетчика делайте все, что заблагорассудится: хоть вперед, хоть назад, хоть через один, хоть друг за другом. Нужно только преобразовать data. Сейчас просто выводится значение переменной на светодиоды.

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 12:31:22
sirha
pyzhman писал(а): хоть вперед, хоть назад, хоть через один, хоть друг за другом. Нужно только преобразовать data. Сейчас просто выводится значение переменной на светодиоды.
спасибо огромное ,есть все таки очень хорошие люди :)

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 13:05:11
Pink-Pank
Т.е. для Вас хорошие - это те, которые пишут код за Вас и не заставляют Вас думать? ;)

Re: регистр и светодиоды

Добавлено: Чт окт 16, 2014 13:25:13
sirha
Pink-Pank писал(а):Т.е. для Вас хорошие - это те, которые пишут код за Вас и не заставляют Вас думать? ;)
а я не за чтобы не додумался,потомучто есть команды которых я не знаю ,видя чтото новое я про них читаю и тогда уже пытаюсь понять как это работает,я не настоко умный

Re: регистр и светодиоды

Добавлено: Пт окт 17, 2014 09:18:18
pyzhman
О, тема перерастает в "О добре и зле."
Как я вижу - человек интересуется, и это уже хорошо. Дурак, как известно, не тот, кто не знает, а тот, кто не спрашивает. Да, есть вариант спросить у книги. Но не все же могут понять тамошние кракозябры. Да и не каждый автор способен доходчиво изложить материал.