Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

;FREQUENCY 1.2MHz
.include "tn13adef.inc"
.def temp=r16
.def delay=r17
.def count=r18
.def flag=r19
.def cycle=r20
.org 0x0000
rjmp Reset
.org 0x0006
rjmp TIM0_COMPA
.org 0x0009
rjmp ADC_CC
.org 0x000A

Reset: 
ldi temp, low(RAMEND); 
out SPL,temp
ldi temp,0b00000100 ;разрешение прерывания по совпадению
out TIMSK0,temp ;compare match A
ldi temp,23
out OCR0A,temp
ldi temp,0b00000010 ;CTC mode
out TCCR0A,temp
ldi temp, 0b00000101 ;запуск таймера0,
out TCCR0B, temp ;предделитель 1/1024
ldi temp, 0b00100010 ;задействуем ADC2(PB4), ADLAR=1
out ADMUX, temp ;Vсс used as analog reference
sbi ADCSRA, 7 ;ADC ON
sbi ADCSRA, 3 ;ADC interrupt enable
sbi ADCSRA, 2 ; ADC frequency=75kHz
sei 
clr count
clr flag
clr delay
sbi DDRB,3
cbi PORTB,3



Main_cycle:
rjmp Main_cycle

TIM0_COMPA:
inc count
sbrc flag,0
rjmp time_delay
sbi ADCSRA,6 ;start single convertion
sbr flag,0b00000001 ;производим одну конверсию АЦП
;задержка между включением МК и конверсией 20мс
reti
time_delay:
cp count,delay
brsh on_relay ;перейти если больше или равно
reti
on_relay:
sbi PORTB,3
reti

ADC_CC:
in delay,ADCH
reti

Убрал лишний цикл.

"Глюк" с нулём решился заменой команды breq на brsh и заменой местами переменных delay и count (в первом варианте проги был cycle вместо count).

Просто в случаях, когда delay был меньше cycle должен был пройти полный цикл, соотвествующий 5с.

Если можно как то упростить прогу, буду признателен, если покажете :umnik2:

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

добрый день!

float q1=5/2.3; вот такой код дает результат 2.17, т.е с остатком все в порядке

float q1=5/2 а вот такой код дает результат 2.теряет остаток.подскажите,как исправить?оптимизации отключены

вопрос снят

Изменено пользователем LexSancho
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Пиши 2.0 вместо 2. Или спецификатор какой-то надо указывать хотябы для одного из чисел, иначе компилятор видит целые числа - использует целочисленное деление, потом приводит результат к вещественному...

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Никакой. Это макрос, встроенный в сам язык.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Тогда я чего то не догоняю , студия ругается какими то не понятными матюгами , хотя там все вроде бы правильно . Вот строка if(!RX_STATE) break; а вот ругательство Severity Code Description Project File Line

Error expected ')' before 'break' AnalizATmega16 C:\Users\Dmitry\Documents\Atmel Studio\7.0\AnalizATmega16\AnalizATmega16\main.c 52 , типа пропущена скобка , но все скобки на месте .

Ссылка на комментарий
Поделиться на другие сайты

Значит что-то не так либо со студией либо, что вероятнее, с кодом. Однако этот код, вероятно, был вырезан цензурой вместе с матюками, и на форум удалось проникнуть только одной строке. Раз уж цензура не пускает ваш код на форум, попробуйте перепроверить наличие лишних открывающих скобок (в том числе внутри макросов). Иногда они оказываются в довольно неожиданных местах.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

В коде есть аналогичная строка , но на неё студия не ругается .

Изменено пользователем DmitryS
Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем mail_robot

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

Ссылка на комментарий
Поделиться на другие сайты

Alex

RX_STATE как я понял из описания алгоритма это уровень пина к которому подключен приемник , Почему понял , а не точно ? Потому что полностью кода нет , а есть описание с приведением кусков кода . Самого #define RX_STATE хххххх нет , но пологике он как бы должен быть такой #define RX_STATE (PIND &(1<<RX) , Ну блин и смех и грех , Вот и нашел эту грёбаную скобку в процессе написания сего поста , не хватает там скобочки одной с права . Всё откомпилировалось . Спасибо Alex ! Вы просто колдун-эккстрасенс .

Откомпилировалось то оно откомпилировалось , но у меня осталась непонятка . функция приема в описании идет с параметром void process_keeloq(unsigned int p_len) а в прерывании где она вызывается с параметром process_keeloq(len); , это надо понимать , как p_len = len; т.е. функция примет значение len , присвоит его p_len и дальше будет работать с ним ?

Ссылка на комментарий
Поделиться на другие сайты

в обьявлении функции имени переменной вообще можно не ставить и значения оно по сути не имеет никакого. Только тип

А вот в описании имя уже конкретно используется в теле функции (метода). Так что на void process_keeloq(unsigned int p_len) внимания можно вообще не обращать

можно вообще в прототипе написать void process_keeloq(unsigned int) и ничего не поменяется, потому как компилятору при обьявлении прототипа нужно знать только имя саой функции, тип возвращаемого ей значения (если возвращается) и размеры (типы) аргументов. То есть по сути - сколько места этому вызову зарезервировать в стеке. Все. Можно кстати стек и не резервировать, если функция мелкая. Явно назначив ее встраиваемой. inline void process_keeloq(uint16_t) к примеру. Код функции будет просто подставлен в место вызова как макрос. Это если конечно нет требований к размеру кода и важно сэкономить вычислительные ресурсы ядра и время

И да - лучше в качестве типа использовать переопределенные типы процессора с явным указанием длинны. Например uint8_t, uint16_t итп. А иначе не будет известно заранее, сколько именно места компилятор выделит именно под unsigned int для данной конкретной платформы. Улучшает портируемость кода и вообще читабельность

Изменено пользователем mail_robot

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

Ссылка на комментарий
Поделиться на другие сайты

Решил я,что самоучка и чтение форумов,это нормально.Но лучше все же умнеть при помощи чтения книг.

Немного поясню,что бы было понятнее о чем я.

Научился я на чужих примерах настраивать ацп,уарты,таймеры и т.д.,но чуть влево или вправо от чужого кода,вылезают проблемы с пониманием.Скачал книгу Б.В. Керниган, Д.М. Ричи. Язык С.Читаю.

Решил поступить,как и написано в книге-изучать язык,программируя на нем.

Там есть примеры по ходу текста(пока я на 16 странице всего)

и скачал Visual studio 2013,что бы писать в нем.И тут я уперся в тупик.

В книге написано программа печати "HELLO, WORLD" на языке "C" имеет вид:

MAIN ()

PRINTF("HELLO, WORLD\N");

А в примерах для В.студио

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace урок1в2

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("HELLO, WORLD \n ");

Console.ReadKey();

}

}

}

Почему так?Или я совсем не с того начал?

Просто хочу еще и научится писать программы для компа,что бы видеть по ходу работы МК,значение его переменных.Типа график АЦП,данные уарта и т.д.

Ссылка на комментарий
Поделиться на другие сайты

Классы - это уже С++

Для ПК, конечно же, лучше С++ учить, но в голове может образоваться каша. Так что, учите сначала чистый Си, а потом уже на С++ перейдёте.

Для МК на плюсы не заглядывайте. По крайней мере, пока не будете свободно и без напрягов писать для них на Си.

Ссылка на комментарий
Поделиться на другие сайты

Нашел ответ как это сделать)

Чтобы писать на C (а не C++/C#) не нужно принимать каких-либо лишних телодвижений. Достаточно просто не использовать библиотеки C++, а писать именно так, как необходимо по стандарту C.

Ссылка на комментарий
Поделиться на другие сайты

Уж лучше учить языки программирования, чем пользоваться labview. Страшная штука, хорошо что не слишком долго пришлось с ней общаться. Единственное достоинство - низкий порог вхождения - не перевешивает недостатки: громоздкость блок-схемы, долгое время ее составления, привязанность к среде, медленная работа (и это небольшая часть того, что встретилось лично мне).

Для ПК, конечно же, лучше С++ учить, но в голове может образоваться каша. Так что, учите сначала чистый Си, а потом уже на С++ перейдёте.
Некоторые считают, что так делать не стоит. С++ реализует объектный подход, а Си - процедурный. Переучиваться с одного на другой может быть непросто. Теоретически, для контроллеров можно достаточно эффективно писать и на С++, там есть несколько удобных механизмов, но при этом надо очень четко представлять себе работу компилятора, иначе собраться это может в дикую кашу из указателей и работы со стеком вместо двух ассемблерных команд. Если хотите, могу поискать статью, где как раз приводили пример преимущества плюсов.

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

для писанины на плюсАх под контроллеры можно обойтись и без указателей, если очень захочется. Хотя они вполне простой и очень удобный инструмент, который при грамотном использовании не отжирает ресурсы, а скорее наоборот. Но это все лирика. До перехода на использование ОС в своих проектах писал на С++. Личные впечатления - по сравнению с процедурным С код получается стройнее и более гибкий чтоли. Изменения и дополнения вносить гораздо проще, особенно близкие к глобальным. С использованием операционки все еще проще и быстрее и не нужен С++. Но ОС к сожалению не всем пойдет, да и С++ для 8-биток не нужен совершенно. Обьемы кода не те

На счет заучивания и переучивания. Пожалуй да, нюансы есть. Кое что придется понять при переходе на С++. Это и свое пространство имен и кое какие макросы специфические, опять же классы и наследование и кучка прочих мелочей, вылезающих там и сям. Но один раз выучил и потом совсем несложно ни вверх ни вниз. Так что каши в голове не получится. Но и пользы будет не шибко, потому как GCC и многие другие эмбеддерские компиляторы С++ не поддерживают.

Изменено пользователем mail_robot

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

Ссылка на комментарий
Поделиться на другие сайты

Я имел в виду, при бездумном использовании полиморфизма код превращается в неявное использование указателей, а для восьмибиток это накладно. На счет красоты и гибкости кода - не спорю, С++ позволяет не меньше, чем Си, но вот использовать это надо с умом, что не всем под силу.

GCC и многие другие эмбеддерские компиляторы С++ не поддерживают
Зато g++ поддерживает, а он, насколько я знаю, портирован туда же, куда и gcc.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Уж лучше учить языки программирования, чем пользоваться labview. Страшная штука, хорошо что не слишком долго пришлось с ней общаться. Единственное достоинство - низкий порог вхождения - не перевешивает недостатки: громоздкость блок-схемы, долгое время ее составления, привязанность к среде, медленная работа (и это небольшая часть того, что встретилось лично

Может глючную версию юзали из старых, 6-8 например?

Ссылка на комментарий
Поделиться на другие сайты

g++ то поддерживает, но прикрутить его тулчейн туда же куда и GCC-шный, это надо ооочень постараться....

как то взялся прикрутить его к кокосу, проклял все. В итоге пришлось грохнуть все вместе с кокосом и поставить заново. А потом я узнал, что есть Кейл. И все

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Всё может быть ещё хуже. Заказывал на али 741, приехали ОУ хуже по параметрам и со ступенькой при тесте на скорость нарастания. Полез ковырять интернет, выяснил, что это кристалл оу 709. То есть, по сути, китайцы подсунули 140уд1 Сейчас потихоньку слезаю с утыканных во все схемы БП TL07x, 358 и прочего древнего хлама, который китайцы преимущественно подделывают. Сначала взял в чипе LF353 как замену TL072, но в 2 раза дешевле, а потом открыл для себя мир китайских КМОП ОУ и забыл про все эти древние микрухи. Вот парочка, которые я заказал, и сейчас потихоньку внедряю в схемы для теста их способностей: TP2272, сочетает в себе полевиковые входы, рейл-ту-рейл выход и работу около минусовой шины. Стоит в чипе 24 рубля/шт, минимальная партия 19шт. Единственный минус, который я пока что выявил, который "спрятан" в даташите - судя по всему, у нее, как у LM318, между входами стоят диоды, отчего дифференциальное напряжение по входу ограничено +/-0,5В, т.е. как компаратор ее использовать конечно можно будет но потребуется ограничивать ток по входу при превышении заданного диапазона дифф напряжения. Питание у неё 36В, но в даташнике максимум  указывают 40. RS8551 (а так же сдвоенные 8552/счетверенные 8554) - на удивление дешевый (65р за сот23-5, 120р за 8554) и быстрый (4,5МГц 2,7В/мкс) пятивольтовый чоппер, с неплохими заявленными параметрами на уровне тех же аналоговых девайсов, у которого в даташите даже отдельно указан шум в полосе 0,01-1 и 0,01-10 Герц, что намекает на области применения. Я пока вожусь в микрокапе с его аналогом по скоростным параметрам от AD, в попытках заставить работать в "схеме шелестова" от +/-2,5В. В прототипе самопального двухвольтового "калибратора" на DAC8830 и REF3120 он уже себя отлично показал как выходной буфер по диапазону напряжений выхода и смещению. Жаль, что заявленные характеристики мне подтвердить особо нечем (могу замерить разве что смещение и скорость нарастания). Но, даже если китайцы и обманывают, например, раза в два по значениям - при таком порядке величин, и такой цене, это всё ещё нормальная альтернатива.   В итоге философская ситуация получается - довериться китайцам, пишущим даташит на исконно китайские ОУ, или довериться китайцам, продающим "не китайские" ОУ по импортным даташитам известных фирм...
    • Добрый день. Случилась такая же беда. Маркировку  китайцы тоже затёрли. Подскажите пожалуйста, Вы решили проблему и каким образом? Спасибо.
    • Резонит выпустил справочник по разработке плат для заводского изготовления: https://disk.yandex.ru/d/WF9AS5mbKdCjrQ Для тех. кто всё это знал, но немного подзабыл справочник тоже будет полезен 
    • Бред какой. Они в ИИП  работают в аналоговом режиме, через ФНЧ. Ну и в даташит вам не мешает заглянуть.
    • Возможно, во входных блоках пропал контакт с общим проводом. Если гудения нет при нулевой громкости, то проблема до регулятора громкости.
    • я бы по первости, - присоединил (поменял ) блоки питания у разных аппаратов... проверил БП 2 - далее присоединил бы (поменял) усилители у разных аппаратов...проверил усилители - Ремонтировать аппарат не видя его,- то ещё удовольствие...
  • Похожий контент

×
×
  • Создать...