Jump to content

Garo

Members
  • Content Count

    162
  • Joined

  • Last visited

Community Reputation

2 Обычный

About Garo

  • Rank
    Осваивающийся

Информация

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

Электроника

  • Стаж в электронике
    Не связан с электроникой

Recent Profile Visitors

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

  1. Убрал я ее уже давно!
  2. У Вас претензия только к задержки? Если да, то с Вами согласен, она там не к чему. Я не понимаю, что за полемика здесь присутствует. Зачем я должен кому то давать тех. задания.У меня был только один вопрос (см. первый пост), я там запутался и мне подсказали путь. А мне подсказывают какие то пути, про которые и сам знаю. Мне 52 года. Здесь технический форум или нравоучительный Все остальное я изучаю ( и таймеры и прочее). Теория должна подкрепляться практикой, что я и пытаюсь делать, все постепенно. Я же не прошу за меня написать программный код. Извините если кого обидел или задел профессиональное самолюбие.
  3. Спасибо Вам! Всего Вам доброго!
  4. Что вы докопались до моей программы! Кто мне помог, тем я сказал спасибо. Вам то что надо от меня?
  5. Проблема решена. То,что не мне нужно я уже узнал. Дребезг контактов учел (поставил счетчик). За "портянку" - обидно! Вот код программы: //Atmega8 #define F_CPU 8000000 #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> void preset() { DDRB=0x00; PORTB=0x00; DDRD=0xFF; PORTD=0x00; DDRC=0b00111100; PORTC=0b00000000; for (int i=0; i<=7; i++) { PORTD = (1<<i); _delay_ms(200); } PORTD=0x00; } void matrix () { if (PINB&(1<<PINB0)) PORTD |=0x01; else PORTD &=0xFE; if (PINB&(1<<PINB1)) PORTD |=0x02; else PORTD &=0xFD; if (PINB&(1<<PINB2)) PORTD |=0x04; else PORTD &=0xFB; if (PINB&(1<<PINB3)) PORTD |=0x08; else PORTD &=0xF7; if (PINB&(1<<PINB4)) PORTD |=0x10; else PORTD &=0xEF; if (PINB&(1<<PINB5)) PORTD |=0x20; else PORTD &=0xDF; if (PINB&(1<<PINB6)) PORTD |=0x40; else PORTD &=0xBF; if (PINB&(1<<PINB7)) PORTD |=0x80; else PORTD &=0x7F; } void timer_ini (void) //настройка таймера (0.25 сек.) { TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению) TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L) OCR1AH = 0b00000111; //записываем в регистр число 1953 OCR1AL = 0b10100001; //для сравнения (0.25 сек.)(1 сек.=7812 (при делителе 1024 и F_CPU 8000000)) TCCR1B |= (1<<CS12)|(1<<CS10);//установим делитель (1024) } //_______________________________________ ISR (TIMER1_COMPA_vect)//вектор срабатывания { if (((PIND&(1<<PIND0)) || (PIND&(1<<PIND1)) || (PIND&(1<<PIND2)) || (PIND&(1<<PIND3)) || (PIND&(1<<PIND4)) || (PIND&(1<<PIND5)) || (PIND&(1<<PIND6)) || (PIND&(1<<PIND7)))) { _delay_ms(100); PORTC |=0x38; } } int main(void) { preset(); timer_ini(); sei(); unsigned char count=0; while(1) { matrix(); if ((PINC&(1<<PINC0)) && (PINC&(1<<PINC3))) { PORTC &=0xFB; } else if ((PINC&(1<<PINC3))) { PORTC &=0xFB; } if (PINC&(1<<PINC0)) { if (count<5) { count++; } else if (PINC&(1<<PINC4)) PORTC &=0xFB; else PORTC =0x04; } else if (PINC&(1<<PINC1)) { if (count<5) { count++; } else if (PINC&(1<<PINC4)) { PORTC =0x38; } else PORTC =0x08; } } }
  6. Спасибо, исправил. Почему же код работал? Или это только в протеусе, в МК заглючил бы? Работал правда немного по другому. Сейчас если убрать входной сигнал, то на выходе лог.0. А до этого с прежним кодом (где была ошибка) если убрать входной сигнал, то на выходе оставалась лог.1. Запоминался сработавший датчик.
  7. Всем спасибо за помощь! Особенная благодарность Starichok ! Все получилось. Вот код: if (PINB&(1<<PINB0)) PORTD |=0x01; else PORTD ==~0xFE; if (PINB&(1<<PINB1)) PORTD |=0x02; else PORTD ==~0xFD; if (PINB&(1<<PINB2)) PORTD |=0x04; else PORTD ==~0xFB; if (PINB&(1<<PINB3)) PORTD |=0x08; else PORTD ==~0xF7; if (PINB&(1<<PINB4)) PORTD |=0x10; else PORTD ==~0xEF; if (PINB&(1<<PINB5)) PORTD |=0x20; else PORTD ==~0xDF; if (PINB&(1<<PINB6)) PORTD |=0x40; else PORTD ==~0xBF; if (PINB&(1<<PINB7)) PORTD |=0x80; else PORTD ==~0x7F;
  8. Постоянно переключаются. И зависает программа, т.е после отключения лог.1 со всех портов (или с одного) все равно идут переключения и никакой реакции на кнопку reset. (это все в протеусе)
  9. Без else не идет. Глючит.
  10. Опрос по внешнему прерыванию я напишу. А если сработают одновременно несколько датчиков и надо посмотреть именно какие?
  11. Добрый день! Делаю прибор для контроля датчиков воды.Написал код while(1) { if (PINB&(1<<PINB0)) PORTD=0x01; else if (PINB&(1<<PINB1)) PORTD=0x02; else if (PINB&(1<<PINB2)) PORTD=0x04; else if (PINB&(1<<PINB3)) PORTD=0x08; else if (PINB&(1<<PINB4)) PORTD=0x10; else if (PINB&(1<<PINB5)) PORTD=0x20; else if (PINB&(1<<PINB6)) PORTD=0x40; else if (PINB&(1<<PINB7)) PORTD=0x80; } Все работает, но есть вопрос. При подачи лог.1 одновременно на два порта, загорается только один светодиод (тот который выше по коду). Можно ли как то сделать программно, чтобы лог.1 подавались на заданные порты. Пробывал писать условия, но там столько вариантов... void matrix () { if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5))&& (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xFF; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5))&& (PINB&(1<<PINB6))) PORTD=0x7F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5))) PORTD=0x3F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4))) PORTD=0x1F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3))) PORTD=0x0F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2))) PORTD=0x07; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1))) PORTD=0x03; else if ((PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5))&& (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xFE; else if ((PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xFC; else if ((PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xF8; else if ((PINB&(1<<PINB4)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xF0; else if ((PINB&(1<<PINB5)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xE0; else if ((PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xC0; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB7))) PORTD=0xBF; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB6))) PORTD=0x7F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xDF; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB7))) PORTD=0x9F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB6))) PORTD=0x5F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5))) PORTD=0x3F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB7))) PORTD=0xAF; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB6))) PORTD=0x6F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xCF; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB7))) PORTD=0x8F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB6))) PORTD=0x4F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB5))) PORTD=0x2F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4))) PORTD=0x1F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB7))) PORTD=0x97; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB6))) PORTD=0x5F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5))) PORTD=0x37; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB7))) PORTD=0xA7; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB6))) PORTD=0x6F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xCF; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB7))) PORTD=0x87; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB6))) PORTD=0x47; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB5))) PORTD=0x27; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB4))) PORTD=0x17; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3))) PORTD=0x0F; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB7))) PORTD=0x8B; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB6))) PORTD=0x4B; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB5))) PORTD=0x2B; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4))) PORTD=0x1B; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB7))) PORTD=0x93; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB6))) PORTD=0x53; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5))) PORTD=0x33; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB7))) PORTD=0xA3; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB6))) PORTD=0x63; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xC3; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB7))) PORTD=0x83; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB6))) PORTD=0x43; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB5))) PORTD=0x23; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB4))) PORTD=0x13; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB3))) PORTD=0x0B; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1)) && (PINB&(1<<PINB2))) PORTD=0x07; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB7))) PORTD=0x85; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB6))) PORTD=0x45; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB5))) PORTD=0x25; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB4))) PORTD=0x15; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB2)) && (PINB&(1<<PINB3))) PORTD=0x0D; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB7))) PORTD=0x89; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB6))) PORTD=0x49; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB5))) PORTD=0x29; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB3)) && (PINB&(1<<PINB4))) PORTD=0x19; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB7))) PORTD=0x91; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB6))) PORTD=0x51; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB4)) && (PINB&(1<<PINB5))) PORTD=0x31; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB7))) PORTD=0xA1; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB5)) && (PINB&(1<<PINB6))) PORTD=0x61; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xC1; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB7))) PORTD=0x81; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB6))) PORTD=0x41; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB5))) PORTD=0x21; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB4))) PORTD=0x11; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB3))) PORTD=0x09; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB2))) PORTD=0x05; else if ((PINB&(1<<PINB0)) && (PINB&(1<<PINB1))) PORTD=0x03; else if ((PINB&(1<<PINB1)) && (PINB&(1<<PINB7))) PORTD=0x82; else if ((PINB&(1<<PINB1)) && (PINB&(1<<PINB6))) PORTD=0x42; else if ((PINB&(1<<PINB1)) && (PINB&(1<<PINB5))) PORTD=0x22; else if ((PINB&(1<<PINB1)) && (PINB&(1<<PINB4))) PORTD=0x12; else if ((PINB&(1<<PINB1)) && (PINB&(1<<PINB3))) PORTD=0x0A; else if ((PINB&(1<<PINB1)) && (PINB&(1<<PINB2))) PORTD=0x06; else if ((PINB&(1<<PINB2)) && (PINB&(1<<PINB7))) PORTD=0x84; else if ((PINB&(1<<PINB2)) && (PINB&(1<<PINB6))) PORTD=0x44; else if ((PINB&(1<<PINB2)) && (PINB&(1<<PINB5))) PORTD=0x24; else if ((PINB&(1<<PINB2)) && (PINB&(1<<PINB4))) PORTD=0x14; else if ((PINB&(1<<PINB2)) && (PINB&(1<<PINB3))) PORTD=0x0C; else if ((PINB&(1<<PINB3)) && (PINB&(1<<PINB7))) PORTD=0x88; else if ((PINB&(1<<PINB3)) && (PINB&(1<<PINB6))) PORTD=0x48; else if ((PINB&(1<<PINB3)) && (PINB&(1<<PINB5))) PORTD=0x28; else if ((PINB&(1<<PINB3)) && (PINB&(1<<PINB4))) PORTD=0x18; else if ((PINB&(1<<PINB4)) && (PINB&(1<<PINB7))) PORTD=0x90; else if ((PINB&(1<<PINB4)) && (PINB&(1<<PINB6))) PORTD=0x50; else if ((PINB&(1<<PINB4)) && (PINB&(1<<PINB5))) PORTD=0x30; else if ((PINB&(1<<PINB5)) && (PINB&(1<<PINB7))) PORTD=0xA0; else if ((PINB&(1<<PINB5)) && (PINB&(1<<PINB6))) PORTD=0x60; else if ((PINB&(1<<PINB6)) && (PINB&(1<<PINB7))) PORTD=0xC0; else if (PINB&(1<<PINB0)) PORTD=0x01; else if (PINB&(1<<PINB1)) PORTD=0x02; else if (PINB&(1<<PINB2)) PORTD=0x04; else if (PINB&(1<<PINB3)) PORTD=0x08; else if (PINB&(1<<PINB4)) PORTD=0x10; else if (PINB&(1<<PINB5)) PORTD=0x20; else if (PINB&(1<<PINB6)) PORTD=0x40; else if (PINB&(1<<PINB7)) PORTD=0x80; else PORTD=0x00; } И то не все.
  12. Добрый день! Прошиваю Attiny13A. Программатор USBasp, программа USBASP_AVR DUDE_PROG. МК читается, начинаю прошивать и выдает ошибку или зависает программа. Потом обнаружил, что после этого стирается hex файл. В чем может быть проблема? В неисправности МК, бракованный? Брал их на Али. У всех 8 штук тоже самое. Ранее прошивал на этом программаторе, все было хорошо. Спасибо
  13. Я даже не заметил, что там есть 128Кгц. Это получается,что при такой тактовой частоте и при делителе 1024, одна секунда будет 125 тиков? Я правильно понимаю?
  14. Ну, все, хватит уже. Пристыдили. Разобрался уже. Почитал, и действительно все нет так уж и сложно. Только вот с 3 секундами не вышло. Счетчик 8 битный и не может даже до секунды досчитать. Но мне правда и то, что получилось уже достаточно (надо только аппаратный счет ,без каких либо наращиваний переменной).
  15. Добрый день! Помогите написать код для таймера прерывания по совпадению для Attiny 13. Надо, чтобы при опрашивания порта примерно каждые 3 секунды, происходило событие. Спасибо.
×
×
  • Create New...