Jump to content
a_sergeevich

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

Recommended Posts

Posted (edited)
16 минут назад, ARV сказал:

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

просто не понимают как работают данные конструкции

Смысл объяснять "обезьяне" как стрелять из автомата, хотя в ютубе и такое увидишь

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

Сядте, прочитайте основы си и его конструкций. Вопросы снимутся сами собой

В данном случае ткнули носом, а дальше ...........

Edited by hasl

Share this post


Link to post
Share on other sites

Непонятно одно. Что означают сие слова :

8 часов назад, ART_ME сказал:

Назад программа возвращаться не будет никогда

?
Что значит "не будет возвращаться", и самое главное - куда она не будет возвращаться ? Обратно, в точку начала исполнения шага ? Тогда каким образом Вы хотите исполнять остальные шаги ?
Конкретизируйте этот момент.

 

8 часов назад, ART_ME сказал:

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

Ну и оставьте как есть. Главное в написании кода - добиться ожидаемого результата, а не красоты кода. Всё остальное - по желанию.

Share this post


Link to post
Share on other sites
Posted (edited)
7 часов назад, hasl сказал:

просто не понимают как работают данные конструкции

Смысл объяснять "обезьяне" как стрелять из автомата, хотя в ютубе и такое увидишь

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

Для чего? Какая лично Вам радость в оскорблении постороннего Вам человека?  

Вот ей-Богу не понимаю Вашей мотивации. Комплекс неполноценности? 

-------------------------------------------------------------------

3 часа назад, Alex сказал:

Что значит "не будет возвращаться", и самое главное - куда она не будет возвращаться ? Обратно, в точку начала исполнения шага ? Тогда каким образом Вы хотите исполнять остальные шаги ?
Конкретизируйте этот момент.

Это значит, что вполне возможно, что по окончании исполнения всех заданных операций (шагов) новый запуск будет через RESET.  То есть не имеет никакого значения, что будет в конце.

3 часа назад, Alex сказал:

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

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

Та, которую я  привел выше, заточена под goto, отсюда и возникновение у меня этой проблемы,т.к. заменить в данной структуре goto нечем.  В то же время, если выделить операции (шаги) в отдельные независимые блоки, то удобнее оказывается применение например case.

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

Edited by ART_ME

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

 

 

Share this post


Link to post
Share on other sites

Вебинар "Разбор новых уникальных модулей FMAC и CORDIC в микроконтроллерах общего назначения STM32G4" (15.07.2020)

Компания КОМПЭЛ приглашает вас принять участие в вебинаре 15.07.2020, посвященном новому семейству микроконтроллеров общего назначения – STM32G4. Вебинар рассчитан на технических специалистов и тех, кто знаком с основами цифровой обработки сигналов. Мы разберем алгоритм работы CORDIC, а также рассмотрим пример создания цифрового фильтра на базе FMAC.

Зарегистрироваться на вебинар

8 часов назад, ARV сказал:

Для выполнения кейсов последовательно достаточно не ставить брейки

Попробую не согласится, ведь программа будет выполнять ту строку чему равен tmp? выполнив ее при наличии break; она покинет switch.

Если break; отсутствует то программа перейдет на следующую строчку но выполнять ее не будет, так как  для выполнения следующей строки tmp должен быть равен 4, для этого и нужно будет в предыдущей строке tmp++

Это мое мнение, спецы пусть поправят если это не так

tmp = 3;

switch(tmp)
                        {
                        case 0:    нужное действие; break;
                        case 1:    нужное действие; break;
                        case 2:    нужное действие; break;
                        case 3:    нужное действие; tmp++; break;
                        case 4:    нужное действие; break;
                        case 5:    нужное действие; break;
                        } 

1 час назад, ART_ME сказал:

В то же время, если выделить операции (шаги) в отдельные независимые блоки

Думаю можно и в кейсе все нужное прописать.


Сергей.

Share this post


Link to post
Share on other sites
                     

Новые контроллеры VIPerPLUS для ИП – видео и материалы вебинара STMicroelectronics

Видеозапись и материалы вебинара ST о семействе AC/DC регуляторов VIPerPLUS производства компании STMicroelectronics. Инженерами ST было детально рассмотрено новое семейство микросхем VIPerPLUS со встроенным транзистором, их возможности и топологии применения. Продемонстрировано испытание из лаборатории ST в Праге и моделирование в среде E-DesignSuite.

Подробнее

Posted (edited)

Так наверное?

switch(tmp)
                        {
                        case 0:    нужное действие; tmp++;  break;
                        case 1:    нужное действие; tmp++;  break;
                        case 2:    нужное действие; tmp++;  break;
                        case 3:    нужное действие; tmp++;  break;
                        case 4:    нужное действие; tmp++;  break;
                        case 5:    нужное действие; tmp++;  break;
                        } 

Edited by ART_ME

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

 

 

Share this post


Link to post
Share on other sites
                     

Конденсаторы ECWFG от Panasonic: теперь и для высоковольтных применений

Компания Panasonic анонсировала существенное расширение серии пленочных конденсаторов ECWFG: на сегодняшний день диапазон рабочих напряжений серии составляет 630…1100 В (DC). Серия ECWFG поддерживает уникальную функцию микропредохранителей.

Подробнее

ну да только если нужно по порядку то break; не нужен, так же и нет необходимости в tmp++ в последней строке


Сергей.

Share this post


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

Попробую не согласится,

Не пробуйте:

14 часов назад, ART_ME сказал:

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

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

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


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

Share this post


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

Не пробуйте:

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


Сергей.

Share this post


Link to post
Share on other sites
Posted (edited)
10 часов назад, hasl сказал:

просто не понимают как работают данные конструкции

Смысл объяснять "обезьяне" как стрелять из автомата, хотя в ютубе и такое увидишь

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

Сядте, прочитайте основы си и его конструкций. Вопросы снимутся сами собой

В данном случае ткнули носом, а дальше ...........

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

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

 

Edited by hasl
ошибка

Share this post


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

у вас сер нет желания учиться

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

В связи с чем и подал на вас сер жалобу.

--------------------------

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

ну да только если нужно по порядку то break; не нужен

Так?

switch(tmp)
                        {
                        case 0:    нужное действие; tmp++; 
                        case 1:    нужное действие; tmp++; 
                        case 2:    нужное действие; tmp++; 
                        case 3:    нужное действие; tmp++; 
                        case 4:    нужное действие; tmp++; 
                        case 5:    нужное действие;  break;
                        } 

Edited by ART_ME

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

 

 

Share this post


Link to post
Share on other sites

нет, так!  Чему будет равен тmp с той строки и будет выполнятся до конца

switch(tmp)
                        {
                        case 0:    нужное действие;
                        case 1:    нужное действие;
                        case 2:    нужное действие;
                        case 3:    нужное действие;
                        case 4:    нужное действие;
                        case 5:    нужное действие;
                        } 


Сергей.

Share this post


Link to post
Share on other sites
Posted (edited)

Иными словами,  разница с goto только в том, что вместо длинного выборного перечня:

if (tmp == 1) goto 1;

if (tmp == 2) goto 2;

....

if (tmp == 10) goto 10;

Мы пишем всего лишь:

switch(tmp)

Плюс очевиден, спасибо, попробуем. 

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

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

Edited by ART_ME

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

 

 

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...

  • Сообщения

    • А это что? Если нужен просто источник питания с регулировкой и защитой от КЗ - далеко ходить не надо: https://cxem.net/pitanie/5-225.php      только транзисторы поменять на р-п-р и полярность питания. И выкинь свой П210,   П213-П216 вполне   позволяют до 2 А получить с запасом. Может, с небольшим радиатором. А для заряда аккумулятора можно взять такое:
    • В этом МК не надо беспокоиться о сбросе стека. Стек представляет собой циклический буфер на 8 ячеек, и указатель стека ходит по кругу. При записи в стек более восьми раз: указатель сбросится и запись начнётся с начала стека. Поэтому можно начинать программу или делать рестарт, имея указатель стека на любом месте. Главное, в программе не делать более 8 вложенных вызовов функций или прерываний. Думаю, что просто напишите в прерывании последней строчкой "goto START", а о стеке не беспокойтесь.
    • Всем здравия, зашел сюда в поиске ответа. В голову сбредила идея создать  рабочую модель sci fi двери 30x20 (к ней добавлю ещё окружение) . Она будет стоять у меня для вдохновения в этой сфере... Ну и еще можно делать клик клак тумблером. В общем ближе к сути- я смогу сделать по плану дизайна, как и его окружение. А вот в плане электрики понятия не имею. Основная идея вот в чем- ты клацаешь тумблер с импровизированной панели управления и дальше в коридоре к двери загорается освещение и дверь начинает раздвигаться, клацаешь тумблер вниз и дверь закрывается(желательно что бы этот процесс был не слишком быстрым для большего эффекта). Так как я совсем не знаю что купить для этого и как это вообще реализовать то обращаюсь сюда, спасибо! 
    • прошу обратить внимание на действие господина кузмича - да - я был не прав - но - когда мне наступают на ногу в автобусе - это не значит что я должен бить в морду) - или по другому - за офтоп в теме - гнобить меня на 5 дней в бану - как- то не адекватно - может я не прав ? . теперь - я прекрасно понимаю его действие - задел - но - я глубоко уверен - что - если человек комплексует и не может адекватно воспринимать ситуацию - не должен ! быть в управлении большого сообшества - ибо - это приведет к от торжению к форуму не согласных и его деградации в итоге . мне это тем более не понятно - ибо - человек не являюшийся технически грамотным - пытается таким образом - чтот мне доказать) - кроме - как тупости - я это по другому не понимаю . потому прошу оградить меня от этого персонажа - ибо это скорее всего повторится еще не раз .
    • Тема категорически познавательная, да. Спасибо за наводку и ещё раз благодарю за развёрнутую консультацию!  Заменил TL062 на TL072 -- белого шума стало меньше. Отрегулировал усиление. С разделительными конденсаторами пока вопрос не изучал, но буду. Главное, что вынес с Веги -- высокую оценку МКЭ-3. Купил пучок, перепаял внутренности для включения с общим минусом (с общим плюсом тоже работало, но много фона) -- и результат радует! То есть, буду консультироваться со специалистами и анализировать спектр, но на слух -- это лучше, чем даже пресловутый WM-61A (хотя он весьма неплох), несмотря на меньший частотный диапазон и худшую линейность АЧХ. Притом, попробовал несколько разных транзисторов, и лучше всего оказалась оригинальная микросборка К513УЕ1А. В общем, дело движется к тому, что выйдет качественный и весьма дешёвый прибор. А это -- правильно! Для чайников, вроде меня, вот схемка внутренностей МКЭ-3, которая подключается к предусилителю вместо Mic1. Резистор можно, наверное, подбирать, но в целом и так неплохо: на стоке примерно 10V (чуть больше, чем полпитания), между стоком и истоком -- примерно 2V (при максимальном 5V для этого транзистора).
    • Я в этом как-то и не сомневался.  Если без разницы - примем на веру.
  • 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...