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

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение 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
Вложения
светодиоды.JPG
(172.22 КБ) 455 скачиваний
Последний раз редактировалось sirha Чт окт 16, 2014 10:38:33, всего редактировалось 1 раз.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

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

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

delay_us(1);
Код-то вообще рабочий?
Fucking static initialization order fiasco
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Pink-Pank писал(а):
Как Вы собираетесь увидеть вот это:

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

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

это все го лишь импульс который идет на регистр чтобы светодиод включить
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

так вы светодиод включаете на 1 мкс
проект в архиве можете выложить? Мне прям аж интересно стало, как это ЭТОТ код у Вас работает..
Fucking static initialization order fiasco
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Pink-Pank писал(а):так вы светодиод включаете на 1 мкс
проект в архиве можете выложить?
вот

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

я его импульсами включаю
Вложения
мульти 1.rar
(48.96 КБ) 166 скачиваний
Последний раз редактировалось sirha Чт окт 16, 2014 10:24:41, всего редактировалось 1 раз.
Реклама
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

Pink-Pank писал(а):так вы светодиод включаете на 1 мкс
А чего бы в симуляторе не включаться светодиоду на 1 мкс ? Он же нарисованный :))

"код в протеусе работает" это вообще какая то роковая фраза, как заклинание прям :)) мне отчего то даже ставить расхотелось эту штуку, а то вдруг потом буду мучится с железкой "но ведь код в протеусе то работает !"
Последний раз редактировалось Morroc Чт окт 16, 2014 10:27:54, всего редактировалось 1 раз.
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

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

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

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

http://avrprog.blogspot.ru/2013/06/74hc595.html
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение 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);


    }   
    
    
а еще могу сказать ,что в железе это не будет работать так, как надо. Потому что есть такое понятие, как "дребезг контактов"
Fucking static initialization order fiasco
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Pink-Pank писал(а): "дребезг контактов"
а что нужно добавить или изменить чтобы заработало ?
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Нужно счетчик в прерывании организовать и по его значению зажигать светодиоды. А то и вообще, просто сдвигать порт, не забывая зажигать нужное.
Docendo discimus
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

нужно добавить задержки 10-20 мс по факту нажатия кнопки (можно считать, что она у Вас есть, равная 100 мс) и по факту ее отпускания. И чтобы программа во время этих задержек не реагировала на прерывание от кнопки. Более подробно смотрите Гугл.
Fucking static initialization order fiasco
Контактная информация:
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

или вообще не использовать прерывания для опроса кнопок - в небольшом коде мне кажется так понятней и проще будет
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

pyzhman писал(а):Нужно счетчик в прерывании организовать
можете показать кодом как это сделать
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

вам pink-pank же код скинул - попробуйте

можно хранить байт в переменной и гонять там сдвигом единичку, каждый раз скидывая байт целиком в регистр - обычно так и делают, но если хочется сделать именно "бегущий огонь" на 595м и ничего больше - можно по первому нажатию записывать туда 1, а дальше 0 и двигать на 1 такт, дергая потом защелку
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Pyzhman продемонстрируйте сказанное выше пожалуйста очень интересно,токо с помощью кнопки

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

я некоторые записи не понимаю мне бы их кодом разьяснять я еще не такой умный чтобы знать прерывания на отлично
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

В приложении. Великого смысла вводить в такую программу прерывание не увидел. По значению счетчика делайте все, что заблагорассудится: хоть вперед, хоть назад, хоть через один, хоть друг за другом. Нужно только преобразовать data. Сейчас просто выводится значение переменной на светодиоды.
Вложения
sirha.zip
(14.82 КБ) 196 скачиваний
Docendo discimus
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

pyzhman писал(а): хоть вперед, хоть назад, хоть через один, хоть друг за другом. Нужно только преобразовать data. Сейчас просто выводится значение переменной на светодиоды.
спасибо огромное ,есть все таки очень хорошие люди :)
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

Т.е. для Вас хорошие - это те, которые пишут код за Вас и не заставляют Вас думать? ;)
Fucking static initialization order fiasco
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Pink-Pank писал(а):Т.е. для Вас хорошие - это те, которые пишут код за Вас и не заставляют Вас думать? ;)
а я не за чтобы не додумался,потомучто есть команды которых я не знаю ,видя чтото новое я про них читаю и тогда уже пытаюсь понять как это работает,я не настоко умный
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

О, тема перерастает в "О добре и зле."
Как я вижу - человек интересуется, и это уже хорошо. Дурак, как известно, не тот, кто не знает, а тот, кто не спрашивает. Да, есть вариант спросить у книги. Но не все же могут понять тамошние кракозябры. Да и не каждый автор способен доходчиво изложить материал.
Docendo discimus
Контактная информация:
Ответить

Вернуться в «AVR»