Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 3 из 11 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 21 по 30 из 101

Тема: К561ИЕ19 Детский вопрос

  1. #21
    Цитата Сообщение от ewgen75 Посмотреть сообщение
    напишите как надо.
    http://www.cqham.ru/forum/showthread...Si5340A/page15
    147 пост. Можете посмотреть. Хотя, профессионалы и в моей программе нашли бы десятки замечаний.

  2. Спасибо от ewgen75


  3. #22
    Друзья, всё вы правильно говорите. Но мы (папа и сын) на той неделе в первый раз в жизни взяли в руки МК и программатор, и стали разбираться. Речь ведь не идёт о законченном изделии. "Светофор" - это практическое задание, на котором мы разбираемся, что и как. Выше - код который написал сын с образца за сорок минут. А здесь, например - мой код, с записью числа, битовой маской и логическими операциями, который я написал за 4 часа... За то въехал. Жевал каждую строчку, раз 50 перешивал МК - написал, посмотрел, переписал, посмотрел и "for(uint8_t i=0; i<50; i++" :-) пока не заработало. Кстати, это самая ценная подсказка на данный момент по организации конечного цикла. Перепишу свой код с такой организацией цикла, посмотрим что получится. Просьба не подсказывать!

    #define F_CPU 1000000UL
    #include <avr/io.h>
    #include <util/delay.h>

    int main(void)
    {

    while(1)
    {

    int redlong = 5000;
    int greenlong = 5000;
    int yellow = 1500;
    int redshot = 1000;
    int greenshot = 1000;
    int pause = 500;
    DDRD |= (1 << PD0);
    DDRD |= (1 << PD1);
    DDRD |= (1 << PD2);
    DDRD |= (1 << PD3);

    PORTD = PORTD | 3 | (1 << 3);
    _delay_ms(greenlong) ;
    PORTD |= (1 << 2);
    _delay_ms(pause);
    PORTD = PORTD & ~(1 << 2);
    _delay_ms(greenshot) ;
    PORTD |= (1 << 2);
    _delay_ms(pause);
    PORTD = PORTD & ~(1 << 2);
    _delay_ms(greenshot) ;
    PORTD |= (1 << 2);
    _delay_ms(pause);
    PORTD = PORTD & ~(1 << 2);
    _delay_ms(greenshot) ;
    PORTD |= (1 << 2);

    PORTD &= ~(1 << PD1);
    _delay_ms(yellow);
    PORTD |= (1 << PD1);
    //PORTD = ~PORTD;

    PORTD = ~1;
    _delay_ms(redlong);
    PORTD = PORTD | 7 | (1 << 3);
    _delay_ms(pause);
    PORTD = ~1;
    _delay_ms(redshot);
    PORTD = PORTD | 7 | (1 << 3);
    _delay_ms(pause);
    PORTD = ~1;
    _delay_ms(redshot);
    PORTD = PORTD | 7 | (1 << 3);
    _delay_ms(pause);
    PORTD = ~1;
    _delay_ms(redshot);
    PORTD = PORTD | 7 | (1 << 3);

    PORTD &= ~(1 << PD1);
    _delay_ms(yellow);
    PORTD |= (1 << PD1);
    PORTD = ~PORTD;
    }
    }


  4. #23
    Цитата Сообщение от Громов Посмотреть сообщение
    здесь, например - мой код, с записью числа, битовой маской и логическими операциями, который я написал за 4 часа
    Вижу, с самого начала, стараетесь, чтобы не только другим, но и самому, через день, ничего не понятно было. Пишите хотя бы комментарии к строкам.
    У меня вопрос, откуда вы такие примеры (образцы) берете?
    Скачайте книжку, например - Шпак Ю.А. " Программирование на языке С для AVR и PIC микроконтроллеров ". Немного устарела книжка, но в основном нормально.

  5. #24
    Владимир да - сложно, не рационально... Но я столько не "светофор" писал, сколько разбирался с применёнными в итоге операциями. А правильно по итогу работающий светофор, это как доказательство, что понял и правильно использовал. Следующие шаги, по мере вкуривания - делаем правильнее и рациональнее.
    Насчёт примеров, малой свой код писал по этой подсказке:
    https://ph0en1x.net/80-simple-progra...-language.html

  6. #25
    Цитата Сообщение от Громов Посмотреть сообщение
    малой свой код писал по этой подсказке:
    Надо было ниже почитать комментарии к статье. Там коллеги правильно критикуют "учителя".

  7. #26
    Я всегда читаю комментарии. "Учитель" обосновал свою точку зрения. Я с ним согласился. Всё разжёвано по пальцам. Повторюсь, первичным было разобраться с логическими операциями, и потом уже на чём нибудь отработать. И это "что нибудь" в данный момент лежит на столе, перед клавой и моргает мне своими тремя диодиками. Я доволен.

  8. #27
    Цитата Сообщение от Громов Посмотреть сообщение
    Я с ним согласился.
    Спорить не буду. У каждого свое понимание. Успехов.

  9. #28
    Переписали код по выше приведённому примеру. В следующий раз выразим ч/з функции.
    Активизация вывода PD3 сделана для увеличения наглядности при отладке . А так, он не нужен.

    #define F_CPU 1000000UL
    #include <avr/io.h>
    #include <util/delay.h>


    #define port(){DDRD |= (1 << PD0); DDRD |= (1 << PD1); DDRD |= (1 << PD2); DDRD |= (1 << PD3); }
    #define greenlong(){ PORTD = PORTD | 3 | (1 << 3); _delay_ms(5000); }
    #define greenshot(){ for(uint8_t i=0; i<3; i++) {PORTD |= (1 << 2); _delay_ms(300);PORTD = PORTD & ~(1 << 2);_delay_ms(500);PO RTD |= (1 << 2); } }
    #define yellow(){ PORTD &= ~(1 << PD1);_delay_ms(1000) ;PORTD |= (1 << PD1); PORTD = ~PORTD; }
    #define red(){ PORTD = ~1; _delay_ms(5000); }
    #define redshot(){ for(uint8_t u=0; u<3; u++) {PORTD = PORTD | 7 | (1 << 3); _delay_ms(500); PORTD = ~1; _delay_ms(300);PORTD = PORTD | 7 | (1 << 3); } }
    int main(void)
    {
    port();
    while(1){
    greenlong(); greenshot(); yellow(); red(); redshot(); yellow(); }
    }

  10. #29
    Здравствуйте. Хотели по другому переписать код, через функции, с заданием цикла с изменяемой переменной. Но не запускается цикл по переменной i. Работа начинается не с i=0, а сразу с i=2, отрабатывается по кругу цикл: горит 3с PD2 - моргает 3 раза PD2 - горит 2с PD1. Нет такого же цикла с PD0. Самостоятельно найти ошибку не получается. Ниже код программы. Help...


    #define F_CPU 1000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    #define port(){DDRD |= (1 << PD0); DDRD |= (1 << PD1); DDRD |= (1 << PD2); DDRD |= (1 << PD3); }


    #define io() { uint8_t i=0; i<4;i+2;}

    #define f1() {PORTD &= ~_BV(io()); _delay_ms(3000);} //горит 3 сек.
    #define f2() { for(uint8_t n=0; n<3; n++){PORTD |= _BV(io());_delay_ms( 500);PORTD &= ~_BV(io()); _delay_ms(500); PORTD |= _BV(io());}; } //моргнуть 3 раза по 0,5 сек

    #define f3() { PORTD &= ~_BV(1); _delay_ms(2000); PORTD |= _BV(1);} // горит 2 сек.



    int main(void){
    port();
    PORTD = 0x0F;
    io();

    while(1){
    f1();f2();f3();};


    }


  11. #30
    Вот программа, два светодиода, сначала один включается, моргает три раза, потом второй. Тут конечно алгоритм не тот что нужно, просто нет времени писать. Для образца. Подставьте свои значения. Тут пионеру понятно. В Вашей программе, я хоть и имею какой-то опыт, но ни хрена не могу понять, что и как. Забудьте Вы свои дефайны...

    #define F_CPU 1000000UL
    #include <avr/io.h>
    #include <util/delay.h>

    /**************** Инициализация порта ******************** ******/
    void initialization(void)
    {
    DDRD=0x0F; // Выводы порта 0-3 - выход, остальные вход.
    PORTD=0x00;
    }

    /**************** Управление светодиодом ******************** ******/
    void LCD_init(unsigned char y)
    {
    if (y==0)
    {unsigned char i;
    for (i = 0; i < 3; i++)
    PORTD |=_BV(PD0); //Зажигаем
    _delay_ms(3000); // Пауза
    PORTD &=~(_BV(PD0)); //Гасим
    }
    else if (y==1)
    {
    unsigned char t;
    for (t = 0; t < 3; t++)
    PORTD |=_BV(PD1); //Зажигаем светодиод 1
    _delay_ms(3000); // Пауза
    PORTD &=~(_BV(PD1)); //Гасим
    _delay_ms(3000); // Пауза
    }
    }

    /**************** Главная функция ******************** ******/
    int main(void)
    {
    initialization(); //Вызов функции инициализации порта D
    while (1) //Бесконечный цикл
    {
    LCD_init(0); // вызов функции управления светодиодами. В скобках параметр, который передается в функцию
    // В зависимости от параметра управляется светодиод нулевой или первый.

    _delay_ms(30); // Пауза

    LCD_init(1); // вызов функции управления светодиодами. В скобках параметр, который передается в функцию
    // В зависимости от параметра управляется светодиод нулевой или первый.
    }
    }
    Последний раз редактировалось Владимир_К; 12.04.2021 в 20:32.

Страница 3 из 11 ПерваяПервая 123456 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вопрос по ГИ-21Б
    от aser в разделе Усилители мощности
    Ответов: 24
    Последнее сообщение: 20.03.2022, 07:10
  2. вопрос по NRD-525
    от Vangog в разделе Трансиверы, приемники КВ/УКВ
    Ответов: 1
    Последнее сообщение: 16.05.2012, 01:19
  3. УС-9 громко пищит транзисторный преобразователь
    от RD3ACE в разделе Старое радио (Ламповые души)
    Ответов: 6
    Последнее сообщение: 22.02.2010, 23:51
  4. П-18
    от Александр Мащуков в разделе Антенная механика
    Ответов: 1
    Последнее сообщение: 30.08.2007, 14:46
  5. Вопрос по Р 326
    от Boris в разделе Технический кабинет
    Ответов: 11
    Последнее сообщение: 19.04.2006, 10:39

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •