Jump to content

Алексей Еремеев

Members
  • Posts

    7
  • Joined

  • Last visited

About Алексей Еремеев

  • Birthday March 7

Информация

  • Пол
    Мужчина
  • Город
    Moscow

Электроника

  • Стаж в электронике
    1-2 года
  • Сфера радиоэлектроники
    микроконтроллеры

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Алексей Еремеев's Achievements

Newbie

Newbie (1/14)

  • Dedicated Rare
  • One Year In
  • Week One Done
  • One Month Later

Recent Badges

6

Reputation

  1. энергоемкость хорошей банки 16850 на 3000мАч при отдаче 5-10А около 10 Вт*ч, т.е. 6 штук это 6000 мА*ч, т.е. оптимистично 40 минут но вроде как табак при 400 градусов уже сам тлеет? т.е. его только поджечь, дальше сам?
  2. Иногда действительно невозможно бороться с исходными багами, но в данном случае правильнее (если возможно, конечно) будет сделать некую мониторилку глючного девайса, который перезагружает машину только если обнаружит умирание оного. Преимущества понятны: если девайс не помер то не нужно лишний раз дергать перезагрузку, если девайс помер опять то метод перезагрузка-через-раз уже не поможет.
  3. это не проблема Вооот! это оно - подозревал а еще перемести индикацию светодиодов меню в обработчик кнопок, тогда сразу увидишь изменение "пункта меню", ну а эффект переключится только после окончания цикла в принципе не стоит навешивать много логики в обработчик прерывания, но установка пина на светодиод не дорогая операция и вполне может быть там
  4. 1) проверка цепи кнопок - есть ли +5 на пинах 14 и 15 при отпущенных кнопках? сопротивление между пином и питанием 10К? - проверка подтягивающих резисторов и открытых кнопок 2) падает ли до нуля на одном пине при нажатии соответствующей кнопки и не падает на втором? - проверка взаимопересечений
  5. кстати, в протеусе и ваш код как-то работает
  6. покажи схему и опиши логику - подумаем мой код симулировал в протеусе, 7 светодиодов на порту D 0..6 и две кнопки на B 0 и 1, кнопки на массу, пины подтянуты резисторами 10К на питание работает - эффекты переключает (в момент окончания цикла эффекта)
  7. #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> // =================================================================================== void ButtonsProcess(void); void Effect_1(void); void Effect_2(void); void Effect_3(void); void Effect_4(void); // =================================================================================== volatile uint8_t menu = 1; volatile uint8_t menu_new = 1; // =================================================================================== ISR(TIMER1_OVF_vect) { ButtonsProcess(); } // =================================================================================== int main(void) { DDRB = 0b11111100; DDRC = 0b01111111; DDRD = 0b11111111; PORTB = 0b00000000; PORTC = 0b00000000; PORTD = 0b00000000; TIMSK |= (1<<2); TCCR1B = 0b00000001; TCNT1 = 54613; sei(); while(1) { // menu (effect) changed - reset if (menu_new != menu) { menu = menu_new; PORTD = 0b00000000; } // select menu (effect) if (menu==1) { Effect_1(); } else if (menu==2) { Effect_2(); } else if (menu==3) { Effect_3(); } else if (menu==4) { Effect_4(); } } } // =================================================================================== #define BUTTON_1_MASK (0b00000001) #define BUTTON_2_MASK (0b00000010) void ButtonsProcess(void) { static uint8_t oldButtons = 0; // get buttons state uint8_t newButtons = ~(PINB & (BUTTON_1_MASK|BUTTON_2_MASK)); // check buttons state change uint8_t pressedButtons = 0; if (oldButtons != newButtons) { if (((oldButtons & BUTTON_1_MASK) == 0) && (newButtons & BUTTON_1_MASK)) pressedButtons |= BUTTON_1_MASK; if (((oldButtons & BUTTON_2_MASK) == 0) && (newButtons & BUTTON_2_MASK)) pressedButtons |= BUTTON_2_MASK; oldButtons = newButtons; } // handle pressed buttons if (pressedButtons & BUTTON_1_MASK) { if (menu_new > 1) menu_new--; } if (pressedButtons & BUTTON_2_MASK) { if (menu_new < 4) menu_new++; } } // =================================================================================== void Effect_1(void) { PORTD |= (1<<0); PORTD &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<1); PORTD &= ~((1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<2); PORTD &= ~((1<<0)|(1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<3); PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<4)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<4); PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<5); PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6)); _delay_ms(300); PORTD |= (1<<6); PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)); _delay_ms(300); } void Effect_2(void) { PORTD |= (1<<0); _delay_ms(300); PORTD |= (1<<1); _delay_ms(300); PORTD |= (1<<2); _delay_ms(300); PORTD |= (1<<3); _delay_ms(300); PORTD |= (1<<4); _delay_ms(300); PORTD |= (1<<5); _delay_ms(300); PORTD |= (1<<6); _delay_ms(300); PORTD &= ~(1<<0); _delay_ms(300); PORTD &= ~(1<<1); _delay_ms(300); PORTD &= ~(1<<2); _delay_ms(300); PORTD &= ~(1<<3); _delay_ms(300); PORTD &= ~(1<<4); _delay_ms(300); PORTD &= ~(1<<5); _delay_ms(300); PORTD &= ~(1<<6); _delay_ms(300); } void Effect_3(void) { PORTD |= ((1<<0)|(1<<6)); _delay_ms(300); PORTD |= ((1<<1)|(1<<5)); _delay_ms(300); PORTD |= ((1<<2)|(1<<4)); _delay_ms(300); PORTD |= (1<<3); _delay_ms(300); PORTD &= ~((1<<0)|(1<<6)); _delay_ms(300); PORTD &= ~((1<<1)|(1<<5)); _delay_ms(300); PORTD &= ~((1<<2)|(1<<4)); _delay_ms(300); PORTD &= ~(1<<3); _delay_ms(300); } void Effect_4(void) { PORTD |= ((1<<0)|(1<<6)); _delay_ms(300); PORTD |= ((1<<2)|(1<<4)); _delay_ms(300); PORTD &= ~((1<<0)|(1<<6)); _delay_ms(300); PORTD &= ~((1<<2)|(1<<4)); _delay_ms(300); PORTD |= ((1<<1)|(1<<5)); _delay_ms(300); PORTD |= (1<<3); _delay_ms(300); PORTD &= ~((1<<1)|(1<<5)); _delay_ms(300); PORTD &= ~(1<<3); _delay_ms(300); }
×
×
  • Create New...