Jump to content
a_sergeevich

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

Recommended Posts

Уже есть тема для Бейсика, асм это само сабой, а вот по Си темки нету, поэтому я и решил её создать.

В данной теме хотелось бы рассматривать вопросы программирования на языке Си, а т.к компиляторов для этого языка и для PIC-ов довольно много то я предлагаю рассматривать тут два самых распространённых это HI-TEC PICC и microC.

Почему именно они, спросит кто-то ? Просто данные компиляторы-среды две полные противоположности и вот в чём заключается их эта противоположность.

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

HI-TEC PICC - это инструмент для тех кто предпочитает всё писать сам, досконально во всём разобравшись, т.к данный компилятор в своём составе имеет минимум уже готовых библиотек и всё надо писать ручками smile.gif Мануал на него краткий почти без примеров.

Короче каждый сам решит для себя, что ему ближе. Мне ближе microC, но сейчас я изучаю и HI-TEC.

И так, что нужно тому кто решил освоить программирование на Си для PIC:

1.Желательно иметь сам контроллер, я предлагаю на эту роль избрать PIC16F877 т.к в нём есть вся нужная переферия, русский даташит, но можно и PIC16F628, у него правда нету АЦП, что является всё-таки минусом.

2.Сами компиляторы: microC тут: http://a_sergeevich.nxt.ru/microC.zip в архиве две версии компилятора стандарт и про, а также мануал на русском. Предлагаю всем пользоваться про-версией.

HI-TEC PICC берём тут: http://a_sergeevich....CC_V8.05PL1.zip , а мануал тут: http://a_sergeevich....ru/picc_env.pdf

3.Для первого времени ну и вообще желательно иметь Proteus, тут версия 7.5SP3: http://a_sergeevich....teus 7.5SP3.zip внимание некотырые антивирусы ругаются на кряк.

Это то, что нужно для начала, всё остальное каждый приобретёт исходя из потребностей.

А теперь просьба ко всем, для облегчения дальнейшего общения:

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

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

Давайте, чтобы у нас как в песне: вместе весело шагать по просторам ну, а песню напевать лучше хором smile.gif

Share this post


Link to post
Share on other sites

Вот статейка реализация 10-ти разрядного АЦП на основе PIC16F877. Используемый компилятор HI-TEC PICC: http://www.pcports.ru/articles/pic7.php так же там имеется ещё ряд хороших статей по интеграции HI-TEC в MPLAB и др.

Ещё одна статья по HI-TEC там он кстати в интегрированном виде с MPLAB идет и мне кажется его лучше использовать именно в таком виде т.к родной интерфейс очень страшный :)) http://habrahabr.ru/blogs/controllers/75312/

Это так для начала, просто на ноуте у меня мало инфы, как доберусь до домашнего компа выложу ещё.

Edited by a_sergeevich

Share this post


Link to post
Share on other sites

А что-нибуть по микроС еще есть? ... та не очень доступная литературка... :(

... забыл добавит - в Си ВООБЩЕ не шарю! Поэтому нужно доходчиво!

Edited by Lev@

Share this post


Link to post
Share on other sites

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

Очень хорошо описан микроСи в журнале Радиоаматор 2006 год с 4 по 9 номер. Опять же сам язык Си со всеми ограничениями и отклонениями от стандарта обычного Си полностью описан в мануале по микроСи, на русском языке. Скачать саму среду разработки и сам мануал можно по приведённой мной ссылке: http://a_sergeevich.nxt.ru/microC.zip

Сам язык, основные его концепции можно учить по любой книге по языку СИ ведь он стандартен в отличии от разномасных бейсиков. Т.е берёте любую, какая Вам больше нравится, книжку по Си и изучаете, затем смотрите в мануале ограничения и отличия его от языка микроСи в пункте "Особенности микроСи" и всё вперёд штудировать библиотеки :) А книг по Си в инете море,например очень хорошая книга Х.Дейтел, П.Дейтел "Как программировать на Си".

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

Edited by a_sergeevich

Share this post


Link to post
Share on other sites

Ок - пошел учить.

сразу же вопрос - компилятор адекватно работает? Т.е. выходной код на ASM имеет достойный вид?

... ну как-то так(хороший вопрос, но с формулировкой туго). Например Барсик иногда такое откомпилит - что легче в ручном режиме на ASM!

Share this post


Link to post
Share on other sites
                     

Построение оптимального преобразователя мощности

Управляющие контроллеры, драйверы и МОП-транзисторы являются важнейшими элементами для инверторов и импульсных источников питания. Проектирование современных импульсных преобразователей, таких как импульсные источники питания (SMPS), DC/DC-преобразователи, приводы промышленных двигателей и инверторы солнечных батарей, необходимо выполнять с учетом целого ряда факторов. Существуют коммерческие, законодательные и экологические требования, направленные на повышение эффективности, снижение потерь, уменьшение эксплуатационных расходов, минимизацию потребления энергии. Кроме того, пользователи хотят видеть постоянное повышение эффективности без какого-либо увеличения габаритов и необходимости принятия дополнительных мер для защиты как элементов схемы, так и самих пользователей.

Подробнее...

Ну насчет адекватный код на асм или нет, честно не знаю, но именно эти два компилятора заслуженно пользуются уважением на форуме microchip.su, а там ребята строгие :) . Вообще на счет этих двух компилей идёт в основном спор по библиотекам, в том плане, что у микроСи они закрыты от пользователя (сжаты), а у HI-TEC открыты, но у него их почти и нет. А так ведь оба компиля имеют разные опции оптимизации кода, да и асм-вставки никто не запрещал.Поэтому испытайте для себя тот и тот, посмотрите, и выбирайте.

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

http://tulinfo.ucoz.ru/news/2009-03-25-4 вот тут есть все журналы Радиоаматор.

Для тех кто будет программировать на микроСи обязательны к скачиванию журналы Радиоаматор с 4 по 9 номера.

Share this post


Link to post
Share on other sites

В контексте данной темы (то, что имеет ввиду автор под изучением Си) никакой адекватности в асм-результате компиляции ожидать не стоит.

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

А есть вариант, когда "все под контролем". И результат компиляции всегда проверяется на оптимальность. В этом варианте либо пишут на асме, либо Си код мало отличается от асма по структуре. Готовые встроенные в компилятор библиотеки при этом никогда не используются. А операторы типа printf вообще считаются ужасным моветоном...

Share this post


Link to post
Share on other sites
http://tulinfo.ucoz.ru/news/2009-03-25-4 вот тут есть все журналы Радиоаматор.

Для тех кто будет программировать на микроСи обязательны к скачиванию журналы Радиоаматор с 4 по 9 номера.

Ссылки - битые!

Share this post


Link to post
Share on other sites

my504

Я с Вами согласен, поэтому и предложил для рассмотрения HI-TEC и microC. Один прямо таки располагает к написанию своих функций, а вот второй больше располагает к использованию уже готовых библиотек. :) Поэтому я предлагаю не конкретно изучать язык Си для МК, а именно использовать его для каких-то задач.Например, человек начал, что-то делать, а у него проблема, не может он её решить, а задачу он решает именно на Си ну и чтобы не заводить 150 тем он свой вопрос задаст тут.

И зная Вас по форуму как очень грамотного специалиста по МК (мне только сколько раз помогали) это касается и Alex, и wowa, и других, хотелось бы, чтобы заходили сюда чаще :).

Странно, что ссылки битые, я сам оттуда скачивал, ну вот другая ссылочка на архив журналов: http://www.ddrservice.info/catalog/Journal...dioamator/2006/

Возможно пропаду на какое-то время,наверное до декабря,жену в больницу положили вчера, так что пока не до PIC-ов и Си,так что извиняюсь.

Edited by a_sergeevich

Share this post


Link to post
Share on other sites

Вот проект термометра на pic16f877a, при небольшой переделке кода можно и pic16f628 зацепить.

В архиве исходник на Си, сгенерированный асм файл ( для интересующихся ), hex- файл, файл проект протеуса версии 7.5SP3.

Проект взят из журнала Радиоаматор 08 - 2006. Датчик тем-ры DS18S20. Диапазон -55...+100, точность +-0.5.

temp.zip

Edited by a_sergeevich

Share this post


Link to post
Share on other sites
это касается и Alex .... хотелось бы, чтобы заходили сюда чаще :) .
Захожу, даже с удовольствием подписался на эту тему. Так что следить за ней будем.

Сам пишу под Хай-теком (чего и всем советую). МикроСи пробовал, не понравилось (даже не знаю чем, просто не понравилось :))

Библиотеки люблю писать сам для себя, свои. Так хоть понимаешь что к чему.

Вот проект термометра на pic16f877a
Ничего не выводит, на ЛСД пишет "ERROR"

Добавил

Заработало, в проекте выставил нужную частоту :)

При 0С показывает +55 :wacko:

Да и вообще, что-то слишком сложное преобразование температуры

if ( byte1 == '-' ) byte0 = ( 0xFF - byte0 ) + 2; //Преобр. в отр.тем-ру
tm = ( byte0 >> 1 ) * 100 + 75 - (( byte6 * 100 ) / byte7 );//Тем-ра

Нужно всего лишь выдрать первые 2 байта и засунть их в переменную.

Затем поделить на 2 для 1820, или на 16 для 18B20

tm = ( (int)( byte0 << 8 ) | (int)( byte1) )
tm = tm << 1   // 1820
//tm = tm << 4   // 18B20

На асме это получиться несколько строк всего :)

Share this post


Link to post
Share on other sites

Alex

В строке tm = tm << 4 если делим то сдвигать надо вроде вправо т.е tm = tm >> 4 или нет ?

Просто из учебника цитата: сдвиг влево соответствует умножению первого операнда на степень числа 2, равную второму операнду, а сдвиг вправо соответствует делению первого операнда на 2 в степени, равной второму операнду.

И ещё, а для 18S20 на сколько надо делить ?

Share this post


Link to post
Share on other sites

Упсс... Ссори. Видно сильно спать хотел, извеняюсь :rolleyes:

Конечно же вправо.

18S20 он-же 1820, на 2 делить нужно.

Но при таком раскладе показания будут с разрешением в 1 градус.

Для десятых нужно использовать переменную с плавающей точкой. Либо как-нибудь преобразовывать отсечённые биты (если нужна оптимизация кода).

Share this post


Link to post
Share on other sites

Так попробовал по вашему, чего-то не работает показывает не то.

В примере если исправить строку tm = ( byte0 >> 1 ) * 100 + 75 - (( byte6 * 100 ) / byte7 ); убрав из неё ту часть которая согласно описанию повышает разрядность индикации, всё начинает показывать правильно, но разрядность уменьшается остаются только целые градусы, т.е строка имеет вид tm = ( byte0 >> 1 ) * 100.

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

Получилcя следующий алгоритм извлечения температуры:

Проверяем чему равен byte1 если 11111111 то температура отрицательная, если 00000000 то положительная.

Далее значение которое находится в byte0 это наша температура.

Если byte1 показал, что она отрицательная то тогда нам значение в byte0 надо тоже преобразовать в отрицательное,

если вспомнить двоичную арифметику это можно сделать следующим образом, просто в значении byte0 заменяем нули на единицы, единицы наоборот заменяем на нули и к младшему разряду добавляем единицу, т.е ~( byte0 ) + 1.

Всё преобразовали.

Теперь выдернем из byte0 само значение температуры. В описании говорится, что значение температуры, целое число градусов, это 7-мь старших бит в byte0, поэтому делаем byte0 >> 1 и получаем нужное значение целых градусов.

Программно будет так:

if ( byte1 ) byte0 = ~( byte0 ) + 1;

tm = ( byte0 >> 1 ) * 100;

разрешение получаем в этом случае 1 градус.

Все эти рассуждения я пишу, чтобы легче было понять мне самому и другим кто ещё не въехал, что откуда и куда.

Правильно ли я вообще рассуждаю ?

Теперь хотелось бы разобратся, что такое byte6 и byte7 , то что они играют роль для расширения разрешения это я понял, но мне не понятно как формула из даташита T = Temp_Read - 0.25 + ( Count_Per_C - Count_Remain) / Count_Per_C где Temp_Read целое число градусов, Count_Per_C это byte6, Count_Remain это byte7, преобразовалась в

( byte0 >> 1 ) * 100 + 75 - (( byte6 * 100 ) / byte7 ), ну ( byte0 >> 1 ) * 100 ясно, а вот откуда взялось 75, что это, короче хотелось бы понять, откуда ошибка с 0-м градусов лезет. :)

Хотя по существу для домашнего термометра и разрешения в 1 градус хватит, но всё же.

Может у кого есть даташит на русском по какому-нибудь датчику из серии DS1820, чтобы для HI-TEC функции накатать или может кто-то их уже написал отшлифовал и может выложить :) у меня есть и я их выложу просто они на другом компе дома, а я сейчас от него далеко и попаду туда только когда жена из больницы выйдет т.е где-то к 1-му декабря не раньше.

Вообще я буду делиться всем, что у меня будет :)

Edited by a_sergeevich

Share this post


Link to post
Share on other sites

Знаком является старший бит старшего байта, как и в любой знаковой переменной.

Вот накатал примерчик, глянь.

Компиль HI-TECH

DS.rar

Основной цикл

while(1)
{

DelayMs(10);
if ( wire1_ready() ) 
{								
	wire1_write_byte (0xcc);

	wire1_write_byte (0x44);					
	DelayMs (750);	

if ( wire1_ready() ) 
	{

wire1_write_byte (0xcc);					
wire1_write_byte (0xbe);	
termo0 = wire1_read_byte ();
termo1 = wire1_read_byte ();


tmp = termo0 + (int)(termo1 <<8 );	// Запихиваем первые 2 байта в переменную

flag_s=0;
	if (tmp<0) 
	{
		tmp=-tmp;flag_s=1;
	}

eden =  tmp >> 4;					// Делим на 16. Вычеслили целое значение
des = ( (char)(tmp) ) & 0b1111;	// Выделяем отсечёные 4 бита
des = (des * 10)  >> 4;				// Приводим их к целым (*10) и так-же делим на 16

lcd_gotoxy (0, 0);
if(flag_s)	
	printf ("-");
else
	printf (" ");

printf ("%d",eden);
printf (".");
printf ("%d'C",des);
lcd_puts("	 ");

	}
}
}

Будут вопросы - задавай.

Share this post


Link to post
Share on other sites

Alex.

Я разобрался все-таки почему твоя метода извлечения результата не работала в примере из журнала.

Скачал даташит и сравнил 18S20 и 18B20, и увидел, что строение, если это так можно назвать , байта0 и байта1 разные у этих микрух.Зато теперь знаю это, в будущем буду даташиты внимательнее читать. :) Вывод если не нужна точность до десятых градуса и устраивает разрешение в 1 градус, то ставим 18S20 иначе ставим 18B20.Кстати купил вчера себе две 18В20, да, что-то дороговато 110 рублей за 1 шт, до этого брал Atiny2313 так он стоит 100 руб, думаю 18S20 должна стоить дешевле.

Alex, а ты все эти функции для 1-wire, сам писал ?

Edited by a_sergeevich

Share this post


Link to post
Share on other sites

Вот переделал проект термометра на микроСи под 18B20 используя методу извлечения температуры, которую показал Alex.Правда с выводом значения на ЖК пришлось чуток помучаться, чтобы выводилось все нормально.

Ну термометр у нас уже есть и для HI-TEC и для микроСи. Вот думаю может сделать блок защиты УМЗЧ на МК, один программный модуль уже есть, это контроль температуры, надо ещё добавить защиту от постоянки, задержку подключения АС, защиту от КЗ в линии АС.

У кого какие мысли на этот счет ?

Термоментр на микроСи: temp.zip

Share this post


Link to post
Share on other sites
Alex, а ты все эти функции для 1-wire, сам писал ?
Не, именно эти ф-ии не мои. Я их взял откуда то, не помню (когда не знал как работать с DS-ками :)).

Share this post


Link to post
Share on other sites

Ясно, позже выложу функции, которые есть у меня глянешь может, что хорошего найдешь, они тоже не мои это из курса по программированию PIC в HI-TEC вот так.

Share this post


Link to post
Share on other sites

Ну выкладывай, может кому пригодится :)

Мне не нужно. Если буду делать термометр, то буду писать свою.

Share this post


Link to post
Share on other sites

Возвращаясь к защите на МК для УМЗЧ, АС.

Узел защиты от постоянки на выходе будет на встроеном АЦП, вот набросал как хочу его сделать, согласно рекомендациям с vegalab-а, там была такая темка, но она померла, но так никто ничего не сделал помоему, имею ввиду в железе.Только пожалуйста не надо как там говорить зачем это надо,проще на дискрете, я просто учусь, а конкретно устройства для разработки,нужного мне, я не придумал.Кто хочет подключайтесь,буду рад. Сейчас пока определяюсь с внешними узлами,короче со схемотехникой.Да МК будет 16F877A т.к других нету.

Режим работы АЦП:

Опора от питания т.е +5 вольт.

Источник тактового сигнала Fosc/8 ( согластно рекомендациям из дтш )

Частота МК 4Мгц.

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

И ещё подскажите формулу как пересчитывать данные полученные от АЦП в напряжение.

Edited by a_sergeevich

Share this post


Link to post
Share on other sites
как пересчитывать данные полученные от АЦП в напряжение.
Дак очень просто.

Опорное делим на битность (Vref/1024), это получается напряжение на еденицу измерения. Затем умножаем на значение с АЦП и получаем нужное нам напряжение.

Share this post


Link to post
Share on other sites

Дайте "ХОРОШУЮ" книжку по Си! Желательно на русском! (в прямом и переносном смысле)

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

  • 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
  • Сообщения

    • В общем нужна схема электронной нагрузки для NPN транзистора, никто не делал? Может кто поделится опытом?
    • Привет тебе от @mr.nikon .Платы его надо было с ним договариваться.
    • pbd-80r  более 100шт - по 5р
    • Я через МФЦ делал. Пришел с мед.справкой и все. Фотографировали на месте, подпись на планшете стилусом нарисовал - и все, через дней 10 пришло СМС, что готово.
    • Подберите номинал R7, чтобы без сигнала напряжение на коллекторе транзистора было равно половине напряжения питания - и будет Вам радость. На первых порах. Но не счастье, т.к. схема "учебная", т.е. показывает принцип построения подобных устройств, но в работе никакая. https://radiokot.ru/circuit/audio/other/06/
    • Разобрался. Подключил транзисторы и импульсы появились на обоих плечах.
    • Собрал такой сумматор трех каналов. Подключил синус - на осциле режется низ. Подключил к выходу звуковой карты - только когда подстроечники выкрутил на полную 10К услышал звук, но с помехами, и вообще результат не понравился. Я хочу именно активный сумматор, чтобы сигнал не ослаблялся сильно. В моем проекте всего три канала (их я и суммирую) - один стерео канал с амплитудой 0,25 вольт (забирает два входа смесителя) и один моно канал от микрофона с амплитудой до 1 вольта (забирает один канал смесителя).  Посоветуйте, пожалуйста, несложную схему, чтобы без помех, ну и желательно активную. 
×
×
  • Create New...