Jump to content
a_sergeevich

Язык Си Для Микроконтроллеров

Recommended Posts

18 minutes ago, mosfetx said:

(PIND&(1<<x)

В результате этой операции получится не 1, а тоже сдвинутая на х единица. Поэтому сравнение с просто 1 не работает. Надо сравнивать так

if ((PIND&(1<<x)) ! = 0)

Share this post


Link to post
Share on other sites
1 hour ago, mosfetx said:

Хотел опрашивать все 8 пинов. на наличии лог1. так не работает

КМК то шо вы  написали вообще ни как не работает... если пин0=1, будет постоянный инкремент переменной темр и никакого опроса других пинов не будет.

и в выражении PIND&(1<<x) делать сдвиг переменной х , есть тупое бесполезное увеличение размера кода.

Share this post


Link to post
Share on other sites

переменная x там вообще не нужна. номер пина задает переменная цикла i.

 


Мудрость приходит вместе с импотенцией...

Share this post


Link to post
Share on other sites

Импульсный источник питания - расчет за 10 минут в eDesignSuite

Как ориентироваться в огромном количестве существующих вариантов, чтобы выбрать наиболее подходящий для конкретного случая. «Ручной» перебор всех вариантов может оказаться весьма трудоемким процессом, а полученный результат – далеко не оптимальным. Специализированное программное обеспечение, позволяет уменьшить количество рутинных операций при проектировании.

Подробнее

здравствуйте. я тут набыдлокодил..с си знакомство только  начал,да и вообще с языками программирования


 

Quote

#define  F_CPU  8000000UL
#define BUT4H PB0
#define BUT4L PB1
#define MODE4H (~(PINB&(1<<2))&&~(PINB&(1<<3)))//  проверка на минус на 23
#define MODE4L (~(PINB&(1<<4))&&~(PINB&(1<<5)))//  проверка на минус на 45
#define MODE2H (~(PINB&(1<<3))&&~(PINB&(1<<5)))//  проверка на минус на 35
#define LEFT PB6
#define RIGHT PB7
#define LIGHT4H PD0
#define LIGHT4L PD1
#define ERROR PD2
#define CONTROL4L PD3
#include <avr/io.h>
#include <util/delay.h>

void port_init()
{
    DDRB|=(1<<DDB6)|(1<<DDB7);//OUTPUTS
    DDRB&=~(1<<DDB0)&~(1<<DDB1)&~(1<<DDB2)&~(1<<DDB3)&~(1<<DDB4)&~(1<<DDB5);//INPUTS
    DDRD|=(1<<DDD0)|(1<<DDD1)|(1<<DDD2);//OUTPUT
    DDRD&=~(1<<DDD3);//INPUT
    PORTB&=~(1<<LEFT)&~(1<<RIGHT);//STOP
    PORTB|=(1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5);
    PORTD|=(1<<LIGHT4H)|(1<<LIGHT4L)|(1<<ERROR);
    PORTD|=(1<<PD3);//
}
void set_to2h()
{
    if(MODE4H)
    {
        do
        {
            PORTB|=(1<<LEFT) ;
        }
        while (MODE2H);
        PORTD|=(1<<LIGHT4H);// ТУШИМ ЛАМПОЧКУ 4HI
    }
    
    else if(MODE4L && ~(PIND&(1<<3))) // ПРОВЕРКА УСЛОВИЯ ВКЛЮЧЕН 4ЛО И ВКЛЮЧЕН РУЧНИК(ПАРКИНГ)
    {
        do
        {
            PORTB|=(1<<LEFT) ;
        }
        while (MODE2H);
        PORTD|=(1<<LIGHT4L);// ТУШИМ ЛАМПОЧКУ 4LO
    }
    else
    {
        PORTD&=~(1<<ERROR)    ;
    }
}

void set_to4h()
{
    if(MODE2H)
    {
        do
        {
            PORTB|=(1<<RIGHT) ;
        }
        while (MODE4H);
        PORTD&=~(1<<LIGHT4H);// ЗАЖИГАЕМ ЛАМПОЧКУ 4HI
    }
    else if(MODE4L && ~(PIND&(1<<3))) // ПРОВЕРКА УСЛОВИЯ ВКЛЮЧЕН 4ЛО И ВКЛЮЧЕН РУЧНИК(ПАРКИНГ)
    {
        
        do
        {
            PORTB|=(1<<LEFT) ;
        }
        while (MODE4H);
        PORTD|=(1<<LIGHT4L);// ТУШИМ ЛАМПОЧКУ 4LO
        PORTD&=~(1<<LIGHT4H);// ЗАЖИГАЕМ ЛАМПОЧКУ 4HI
    }
    else
    {
        PORTD&=~(1<<ERROR)    ;
    }
}

void set_to4l()
{
    
     if(MODE2H && ~(PIND&(1<<3))) // проверка включен ли паркинг
    {
        do
        {
            PORTB|=(1<<RIGHT) ;
        }
        while (MODE4L);
        PORTD&=~(1<<LIGHT4H);// ЗАЖИГАЕМ ЛАМПОЧКУ 4LO
    }
    
    else if(MODE4L && ~(PIND&(1<<3)))
    {
        do
        {
            PORTB|=(1<<RIGHT) ;
        }
        while (MODE4L);
        PORTD|=(1<<LIGHT4H);// ТУШИМ ЛАМПОЧКУ 4H
        PORTD&=~(1<<LIGHT4L);// ЗАЖИГАЕМ ЛАМПОЧКУ 4L
    }
    else
    {
        PORTD&=~(1<<ERROR)    ;
    }
}


void button_read()
{
    
    if(~(PINB&(1<<0)))
    {
        set_to4h();
    }
    else if(~(PINB&(1<<1)))
    set_to4l();
    else
    set_to2h();

}

int main(void)
{
    port_init();
    while (1)
    {
        button_read();
    }
}

пытался вставить как код,но выдает ошибку,видимо плохой код)

прошу Вас указать на критичные ошибки. 

это только заготовка,усложнять задержками и таймерами буду позже,пока главное отладить быдлокод на этом этапе..

спасибо за внимание.

сильно не пинать,только учусь,..)

Edited by pndbr

Share this post


Link to post
Share on other sites
                     

Как упростить выбор ИП для промышленного применения?

Компания Mean Well выпускает широкий перечень встраиваемых источников питания с креплением на шасси, имеющих, на первый взгляд, схожие характеристики. Статья расскажет о ключевых особенностях выпускаемых семейств и упростит выбор источника питания для промышленного применения.

Подробнее

КМК весь код одна большая критическая ошибка. начиная от отсутствия хотя бы   элементарного подавления дребезга контактов и заканчивая вечными циклами ожидания событий,

56 minutes ago, pndbr said:

сильно не пинать,только учусь,..)

попробуйте   почитать/посмотреть что такое "конечные автоматы" или "машина состояний"  и как они реализуются . здесь в лекциях 298..305 есть не плохое введение. на ХАБРе есть пару статей по этой теме с примерами реализации.

для начала реализовать ее при помощи оператора swith/case

и самое наверно главное распараллелить задачи, отделить опрос кнопок от машины состояний, при этом четко понимать, что у любой кнопки не два состояния , а четыре: кнопка нажата, кнопка отжата , нажатие кнопки  , отпускание кнопки. и в зависимости от состояния кнопок и состояния машины изменять состояние последней.

 

 

Share this post


Link to post
Share on other sites
                     

Преимущества новых высоковольтных SOI-драйверов Infineon

При производстве драйверов силовых транзисторов компания Infineon использует различные технологии: JI, SOI, CT. Драйверы, выполненные с применением технологии SOI, имеют целый ряд преимуществ по сравнению с классическими JI-драйверами. В статье рассматриваются эти преимущества на примере новых семейств драйверов 650 В 2ED210x и 2ED218x.

Подробнее

 

#define MODE4H (~(PINB&(1<<2))&&~(PINB&(1<<3)))//  проверка на минус на 23

Например, вот это MODE4H выражение и ему подобные всегда будет равно true при любых значениях PINB.

Я бы проверял вот так:

#define MODE4H !(PINB & (1<<2 | 1<<3)) //  проверка на минус на 23

 

Share this post


Link to post
Share on other sites
6 hours ago, IMXO said:

КМК весь код одна большая критическая ошибка. начиная от отсутствия хотя бы   элементарного подавления дребезга контактов и заканчивая вечными циклами ожидания событий,

Про подавления дребезга в курсе,,но это я оставил на потом)

Мне как раз нужны были советы относительно осного алгоритма,как реализовывать подобные задачи..

Спасибо за ссылки и совет и за то что рассмотрели это мракобесие)

 

6 hours ago, Yurkin2015 said:

 


#define MODE4H !(PINB & (1<<2 | 1<<3)) //  проверка на минус на 23

 

Спасибо, а то я ломал голову почему не правильно работала написанная мной конструкция)

Share this post


Link to post
Share on other sites
15 hours ago, Yurkin2015 said:

Я бы проверял вот так:

не согласен с таким решением. с точки зрения оптимизации и быстродействия запись у @pndbr более правильная, единственная ошибка использована побитовая инверсия вместо логической , те должно быть 

#define MODE4H (!(PINB&(1<<2))&& !(PINB&(1<<3)))//  проверка на минус на 23

 

Share this post


Link to post
Share on other sites
Posted (edited)

Просьба не считать вопрос провоцирующим.

Нужно сотворить программку для несложного промышленного автомата, программа очень похожа на программу для ПЛК, но написать её надо на Си.

Если упрощенно, структура программы выглядит так.

При запуске программы опрашивается галетник на 10 положений,  и программа стартует с метки, указанным этим галетником.

Программа всегда последовательно проходит все шаги начиная с указанного галетником. 

Т.е. если выставили 1, то будут последовательно выполнены шаги с 1 по 10, если выставили 5, то будут исполняться шаги с 5 по 10. 

Назад программа возвращаться не будет никогда, перескакивать через шаги или пропускать их тоже. 

Как то напрашивается в такой ситуации goto. но больно уж си-воды на это goto блажат.

А чем заменить не пойму, ведь ни циклов, ни выбора путей в данном случае нет.

Для эксперимента проверил goto,  работает без замечаний.

 

Edited by ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

применение goto оправданно только в одном случае - в случае недостаточного знания языка


Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Share this post


Link to post
Share on other sites
5 минут назад, mail_robot сказал:

применение goto оправданно только в одном случае

Не начинайте холивар, вы не правы. Применение любой возможности языка обусловлено исключительно практическим смыслом.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites
Posted (edited)
43 минуты назад, optima сказал:

Попробуй  кейс 

Типа удалить из этого все break?

Оно будет без break работать?

Снимок.JPG

40 минут назад, mail_robot сказал:

goto оправданно только в одном случае - в случае недостаточного знания языка

А вот этого флуда никак нельзя было обойтись?  Не удержался? 

Edited by ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Вроде будет, если блок операций указывает на выход к примеру в другую процедуру.

Но лучше оставить!


Сергей.

Share this post


Link to post
Share on other sites
Posted (edited)
18 минут назад, optima сказал:

... будет, если блок операций указывает на выход к примеру в другую процедуру.

Блок не указывает на выход ни в другую процедуру, ни вообще куда либо. Потому как выходить не надо.

Наверное проще объяснить это применением goto.

If (var == 1) goto label 1;

if (var == 2) goto label 2;

....

if (var == 10) goto label 10;

label 1:

{

;

}

label 2:

{

;

}

....

label 10:

{

;

}

 

Edited by ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

но после выполнения к примеру label 1: куда далее пойдет программа?


Сергей.

Share this post


Link to post
Share on other sites
Posted (edited)
1 минуту назад, optima сказал:

но после выполнения к примеру label 1: куда далее пойдет 

на label 2:  А после исполнения тела по label2: на label 3:, и так до label 10:  

 

Edited by ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Если так? 

 switch(значение выключателя)
                        case 01:    label 1 (); break;
                        case 02:    label 2 (); break;
                        case 03:    label 3 (); break;
                        case 04:    label 4 (); break;
                        case 05:   label 1 (); label 2 (); label 3 (); label 4 (); break;
                         ................
              

Оператор goto

Кроме goto, в языке С есть другие операторы управления (например break, continue), поэтому необходимости в применении goto практически нет. В результате чрезмерного использования операторов goto программа плохо читается, она становится "похожей на спагетти". Чаще всего такими программами недовольна администрация фирм, производящих программный продукт. То есть оператор goto весьма непопулярен, более того, считается, что в программировании не существует ситуаций, в которых нельзя обойтись без оператора goto. Но в некоторых случаях его применение все же уместно. Иногда, при умелом использовании, этот оператор может оказаться весьма полезным, например, если нужно покинуть глубоко вложенные циклы


Сергей.

Share this post


Link to post
Share on other sites
Posted (edited)

это вопрос для пеcочницы

switch (stage)

{

case: 0:

stage++;

break;

case 1

stage++;:

break;
}

можно переходить с любой стадии на любой

switch (stage)

{

case: 0:

case 1

case 2
}

а можно так. Какой stage будет в начале с той и начнет дальше выполнятся все остальные последовательно

Читайте основы Си

Edited by hasl

Share this post


Link to post
Share on other sites

Точно, даже не задумался что значение можно увеличить!

switch(stage)

                      {
                        case 01:    label 1 (); stage++;
                        case 02:    label 2 (); stage++;
                        case 03:    label 3 (); stage++;
                        case 04:    label 4 (); stage++;
                        case 05:   label 5 ();  break;
                         }


Сергей.

Share this post


Link to post
Share on other sites

Первый вариант понятен, но выглядит громоздким. А во втором очепятки нет?

3 минуты назад, optima сказал:

Точно, даже не задумался

Я правильно понял, что тут придется всю программу на процедуры разбивать? 


Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Хоть я и не хотел в эту тему встряваь, но, поскольку тут стали всякую чушь писать, все-таки вступлю.

switch(galetnik){
  case 0 : 
  	// здесь сколько угодно действий 0-го этапа
    // break НЕ НУЖЕН!
  case 1 : 
  	// здесь сколько угодно действий 1-го этапа
    // break НЕ НУЖЕН!
  case 2 : 
  	// здесь сколько угодно действий 2-го этапа
    // break НЕ НУЖЕН!
  case 3 : 
  	// здесь сколько угодно действий 3-го этапа
    // break НЕ НУЖЕН!
  case 4 : 
  	// здесь сколько угодно действий 4-го этапа
    // break НЕ НУЖЕН!
  case 5 : 
  	// здесь сколько угодно действий 5-го этапа
    // break НЕ НУЖЕН!
  case 6 : 
  	// здесь сколько угодно действий 6-го этапа
    // break НЕ НУЖЕН!
  case 7 : 
  	// здесь сколько угодно действий 7-го этапа
    // break НЕ НУЖЕН!
  case 8 : 
  	// здесь сколько угодно действий 8-го этапа
    // break НЕ НУЖЕН!
  case 9 : 
  	// здесь сколько угодно действий 9-го этапа
    // break НЕ НУЖЕН!
}

 


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

Действий можешь указать сколько угодно, если нужно делать их по порядку тогда в кейсе нужно galetnik++,  и не вписывать break, тогда все кейсы будут выполнятся по порядку, но если инкремента не достаточно тогда galetnik нужно присвоить конкретное значение, зависит от значения galetnik

break прописать только в последней строчке.

То есть если твой переключатель в позиции 5, то и кейсы будут выполнятся с 5 по 9 к примеру


Сергей.

Share this post


Link to post
Share on other sites
Posted (edited)

Собственно по порядку-то и не нужно, т.к. технологически эти операции друг от друга  независимы.

Тогда получается, что сначала описываем все 10  процедур, а в программе указываем только порядок их исполнения, пользуясь для обеспечения  последовательного их выполнения  инкрементом galetnik. 

ИМХО должно выглядеть неплохо.

Спасибо, буду пробовать этот вариант.

Edited by ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites
Posted (edited)
2 часа назад, optima сказал:

кейсе нужно galetnik++,  и не вписывать break, тогда все кейсы будут выполнятся по порядку,

Для выполнения кейсов последовательно достаточно не ставить брейки, инкремент не требуется. Да и не будет инкремент без цикла работать. А для выборочного выполнения кейсов по одному, как нужно при инкременте, брейки как раз обязательны.

2 часа назад, optima сказал:

break прописать только в последней строчке

А это ещё нафига?

Нафига огород, если мой вариант выполняет все требуемое: выполняет шаги от galetnik и до последнего?!

Edited by ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Правильно понимаете. 
    • Вопрос - а почему на регуляторах громкости и в селекторах используется 74HC595 а не PCF8574? 
    • Иван как я понял это вы мне адресуете схему эту схему в Pdf . А на эту схему есть Лейка ? , я не умею разводить PCB со схемы , если есть то можно сделать если вы её советуете . Я правда  с полевиками ни разу не связывался , обычно я делаю на биполярных транзисторах . На этой схеме мохно их поменять на биполярные , или получится всю схему расчитывать номиналя заново . Иван Что скажете .
    • У кого есть умершие HDD, не подлежащие восстановлению, извлеките оттуда неодимовый магнит. Им уверенно удерживается любой стальной инструмент. Второе полезное его свойство - он хорошо намагничивает жало отвёртки. Для отвёртки это хорошо.  
    • Радио РК-86, Spectrum? А на М6000 с помощью тумблеров начальный загрузчик с перфоленты вводили?
    • Вечер добрый всем,  подскажите сгорел сварочный инвертор, Торус200 сгорел 2рой раз диодный мост,  горит так что отгарает контакт по переменки, дело было так  сгорел сперва родной диодник, я поменял, но  понимал  что просто так он  не горит,   2рой работал нормально, но пропала   ригулировка тока, а  именно на  минимум  ставишь он варит тройкой  хорошо, стоит прибавить  и  вылетает диод, где  что копать подскажите? Сразу не  стал  копать  делал  родственнику  он  сказал давай заменим  и  всё  нужно варить, ну  варил  он  норм, но  как  только  он  навалил  току  и  всё,  сварка  очень  старая  ей  больше 10  лет,  варили  им  постоянно, хотелось  бы  поченить,  так  как новый  стоит  не  мало    
    • тебе - звать МАСТЕРА и не ломать и не лезть .....
  • Similar Content

    • By Артемон
      Всем привет. Просьба посодействовать в исправлении кода для термометра. Так как сам я в этом новичек, то код собирал из трех чужих проектов. Реализация такова, подключение термопары через микруху Max6675 к Atmega и вывод данных на LCD экран. В архиве прилагаю проект Atme Studio 7 и принт скрин из Протеуса. Ошибка заключается в неправильных показаниях температуры

      Test1.rar
      Вот код, чтоб не скачивать проект.

      #define F_CPU 1000000UL #include <util/delay.h> #include <avr/io.h> #include "max6675.h" #include "LCD.h" uint16_t gettemp(void); //Funktionsdeklarationen void initavr(void); //gettemp () returns absolute Temperature in Temp * 4 °C - in 1/4°-steps // uint16_t gettemp(void){ //Temperatur holen. uint8_t bit = 0, bitnr = 12; //Variablen uint8_t foo1 = 0; uint16_t Rohdata = 0; CS_Port &= ~(1 << CS); //Chip select anlegen for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen bit = 15 - foo1; //Die Aktuelle Bitnr berechnen. SCK_Port |= (1 << SCK); //SCK hi if((bit <= 14) && (bit >= 3)){ //Einfach mal die 12 relevanten von den 16 Bits ausfiltern if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann... bitnr--; //zдhlen wir runter... Rohdata |= (1 << bitnr); // und schieben eine 1 an bit x }else{ //WENN dem NICHT so ist, dann... bitnr--; //zдhlen wir runter... Rohdata &= ~(1 << bitnr); //und schieben eine 0 an bit x } }else{ //weis au nimmer, was das soll. bitnr = 12; } SCK_Port &= ~(1 << SCK); //SCK LO } CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig. return Rohdata; //Das ist doch mal was ;D } // getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected // (to enable this feature T- must be connected to GND) uint8_t getTC(void){ //Temperatur holen. //Variablen uint8_t TC = 0; uint8_t foo1 = 0; CS_Port &= ~(1 << CS); //Chip select anlegen for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen //Die Aktuelle Bitnr berechnen. SCK_Port |= (1 << SCK); //SCK hi if(foo1 == 2){ //das 3. bit ist fьr uns relevant. if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann... TC = 0; }else{ //WENN dem NICHT so ist, dann... TC = 255; } } SCK_Port &= ~(1 << SCK); //SCK LO } CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig. return TC; //Das ist doch mal was ;D } //Initiates the MAX6675 and IO-pins void init_6675(void){ //AVR initialisieren SO_DDR &= ~(1 << SO); CS_DDR |= (1 << CS); SCK_DDR |= (1 << SCK); //IOs setzen SO_Port |= (1<<SO); //Pullups an. (Wichtig fьr MAX6675, der kann nicht anders, hab ich festgestellt... CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig. SCK_Port &= ~(1 << SCK); //SCK LO } int main(void) { init_port();// инициализируем порт ЖКИ lcd_init();// инициализируем ЖКИ init_6675(); while (1) { char buffer[8]; int temp; temp = gettemp(); temp /=4; lcd_gotoxy(0,0);//перемещаем курсор в верхний левый угол sprintf(buffer, "t=%i\xdf\C ", temp); // так как тут не плавающая запятая то числа с запятой записываются так %i.%i, код градуса записывается так \xdf lcd_putstring(buffer); } }
      вставляете код пользуйтесь тегами [CОDE][/CОDE] редактора сообщений, кнопка <>
    • By igoryan
      нужно ли обрабатывать RESET просто компилятор не видит RESET_vect?
    • By P32L
      Натолкните на мысль пожалуйста.Смысл в следующем.Нужно изменять задержку(Delay) из EEPROM. Контроллер PIC , язык СИ.
      Как реализовать чтение числа из ипрома ? Если не затруднит, то кусочек кода был бы очень кстати.
    • By Zver2011
      Здравствуйте! Недавно начал изучать МК AVR. Читаю книги Белова. Пользуюсь программами CVAVR и Proteus. По урокам, собирал все в железе. По готовым примерам кода конечно же мне легко учиться и все в принципе понятно из описания, хоть и в программировании не силен, но как только начинаешь создавать что то свое - начинаются проблемки.
      В общем я создаю что то вроде музыкального светильника, который должен включаться от звука (голоса). Датчик звука пытаюсь реализовать на компараторе, плавное включение света - ШИМ, а генерация мелодии (пищалки) благодаря таймеру Т1 и его прерыванию. Куски кода брал из разных чужих самоделок, вот только объединить не удается.
      В железе работает как будто цветомузыка какая-то. Мелодия не играет, Я думаю это из-за неправильной конфигурации компаратора, а также схемы. Вот это основной вопрос у меня. Ну и собственно основной цикл программы, там я думаю тоже накосячил.
      Помогите мне разобраться до конца, понять ошибки в коде, мне самому интересно вот только С - язык тяжеловатый на мой взгляд и без помощи знающих не обойтись))

      КОД.txt
    • By sensey88
      Продам счетчики бета-гамма излучения новые заводская упаковка
      Си1Г (79г) 62 шт. 5000р
      Си21БГ (79г) 49 шт. 350р
      Си22БГ (79г) 70 шт. 700р
      Си3БГ (84г) 20 шт. 300р
      Си3БГ (78г) 46 шт. 250р
      Си3БГ (77г) 10 шт. 250р
      Си3БГ (79г) 18 шт. 250р
      Си3БГ (75г) 10 шт. 200р
      Си37Г (80г) 40 шт. 400р
      Си37Г (76г) 24 шт. 350р
      Си37Г (79г) 16 шт. 350р
      Си33Г (78г) 28 шт. 450р
      Си33Г (77г) 15 шт. 450р
      СБТ13 (78г) 2 шт. 3000р
      СБТ13 (76г) 3 шт. 2700р
      СБТ13 (69г) 3 шт 2500р.
      Си8Б (79г) 1 шт. 2500р
      Си8Б (78г) 1 шт. 2500р
      СБТ10 (79г) 3 шт. 4500р
      8 (910) 7051241 Евгений
      bishop-x@yandex.ru
×
×
  • Create New...