Jump to content

cucumber

Members
  • Content Count

    123
  • Joined

  • Last visited

Community Reputation

0 Обычный

About cucumber

  • Rank
    Осваивающийся
  • Birthday 04/24/1980

Информация

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

Электроника

  • Стаж в электронике
    10-20 лет

Recent Profile Visitors

784 profile views
  1. если проект с несколькими файлами .c можно как-нибудь вынести массив(ы) в один файл? Чтобы к нему был доступ из других файлов ?
  2. а где можно позадавать разных возможно дурацких вопросов по си для атмел , подскажите пожалуйста?
  3. задумка такая - появляется комментарий-строчка, из которой нужно выходить только нажатием кнопки, типа аппендикс. А как можно и нужно?
  4. ну да, видимо так и есть) только бегущая строчка это второстепенная функция, типа паузы - подсказки
  5. чтобы по нажатию любой кнопки можно было прервать выполнение текста получается, в одном таймере я опрашиваю кнопки, и еще нужно задействовать второй? Сейчас у меня один таймер опрашивает, и при нажатии любой кнопки устанавливается флаг, который проверяется в функции, если требуется вывод текста.
  6. в прерывании по переполнению таймера. Соответственно переменная может измениться в процессе выполнения функции, верно?
  7. сорри народ, кто успел поломать мозг, это я флаг после нажатия кнопки не уследил в основной программе, и он в функцию уже приходил =1. Но получается так можно делать - выходить из функции таким макаром?
  8. show (&flags); разнес цикл вывода текста и "паузы" с опросом fl. Текст выводится, естественно пока он выводится из него убежать никак. А из паузы можно убежать. Т.е. таким образом "все" работает, но стоит запихнуть условие с fl в цикл с выводом массива, то текст исчезает)) void show(unsigned char * fl) { for(unsigned char i=0; i<50; i++) {  for (unsigned char j=0; j<16; j++) { cursor(0x80 + j); if ( (i +j) < 95 ) { PORTC = text [i + j]; } _delay_us(40); strob(); } }//for for (unsigned int x=0; x<150; x++)// Pause { _delay_us(300); if ( *fl&(1<<2)) {return; } }//for } //void где-то у меня ошибка в условии if ( *fl&(1<<2)), что-то я напортачил с флагами)) ушел курить программу
  9. ну да, а в fl меня тоже интересует 2-й бит. 100 И fl = 0 или 1 в зависимости от 2-го бита fl. Ну да, запись извращенская, сам не понимаю, как на нее подсел. Раньше бы написал 0b00000100
  10. что задумывалось: сначала разименовываем, затем складываем fl и 1<<2 побитно, затем результат сравниваем. Если 1, то... Добавил скобок - все не то, что-то я не врубаюсь. & побитное И вроде, && логическое. Сам принцип вылезти из функции преждевременно с помощью указателя верен?
  11. кажется я с приоритетами напутал... * и &, ушел искать инфо
  12. поправил, комменты ставил, когда пытался разобраться
  13. Всем привет, нужна помощь, вроде тема похожая... AVR+LCD(символьный)+кнопки. Нужно, чтобы была возможность из функции выйти в любой момент при нажатии кнопки (так как в функции длинный текст выводится бегущей строкой). Для этого я передаю в функцию переменную через указатель. Кнопки обрабатываются в прерывании, там же, при нажатии любой кнопки меняется переменная. Пока не добавил указатель - текст выводился, без выхода из функции разумеется. Как только добавил переменную, то вывод текста исчез , но из функции уже можно выйти нажатием на клавишу (при изменении переменной). Есть мысли, что не так? Возможно я глобально все не так делаю, может, есть какие-то варианты? void show(unsigned char * fl) { for(unsigned char i=0; i<50; i++) { for (unsigned char j=0; j<16; j++) { cursor(0x80 + j); if ( (i +j) < 95 ) { PORTC = text [i + j]; } _delay_us(40); strob(); } for (unsigned int x=0; x<150; x++)// Pause { _delay_us(300); if ( *fl&(1<<2)) {return; } } }//for } //void
  14. привет народ, собрал готовую схему, тоже ночник)) на трех диодах на atmega8, хотел сделать всякие эффекты, да только диоды не гаснут полностью - тестером измеряю на выходе МК - когда диод как-бы не должен гореть - около 2.5В. Осциллографа нет к сожалению. Что не так может быть? #define F_CPU 4000000UL //4MHz #include <avr/io.h> #include <util/delay.h> volatile unsigned long int0_cnt = 0; void pin_init(void) { DDRB |= (1<<1) | (1<<2) | (1<<3); PORTB &= ~((1<<1) | (1<<2) | (1<<3)); } void timer1_init(void) { TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11); TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS10); TCNT1 = 0x00; ICR1 = 0xFF; OCR1A = 0x00; OCR1B = 0x00; } void timer2_init(void) { TCCR2 |= (1 << COM21) | (1 << WGM21) | (1 << WGM20) | (1 << CS20); TCNT2 = 0x00; OCR2 = 0x00; } int main(void) { pin_init(); timer1_init(); timer2_init(); while(1) { //if (int0_cnt ==0) // { for (int i=0; i<256; i++) /////// возрастание диода 1 { OCR1A = i; _delay_ms(10); } for (int i=256; i>0; i--) /////// затухание диода 1 { OCR1A = i; _delay_ms(10); } ///////// for (int i=0; i<256; i++) /////// возрастание диода 2 { OCR1B = i; _delay_ms(10); } for (int i=256; i>0; i--) /////// затухание диода 2 { OCR1B = i; _delay_ms(10); } ////////// for (int i=0; i<256; i++) /////// возрастание диода 3 { OCR2 = i; _delay_ms(10); } for (int i=256; i>0; i--) /////// затухание диода 3 { OCR2 = i; _delay_ms(10); } //} } }
×
×
  • Create New...