a_sergeevich

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

1 472 сообщения в этой теме

antzol    2
Дайте "ХОРОШУЮ" книжку по Си!

Книжка Кернигана и Ритчи не подойдёт? :)

Поделиться сообщением


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Lev@    1

Не знаю, Вам виднее - понять можно когда прочитаешь... Давай - буду читать!

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

Поделиться сообщением


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

Alex

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1
Книжка Кернигана и Ритчи не подойдёт? :)

Скачал, будем изучать!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
taugrin    0

Всем доброго времени суток. У меня возник вопрос, правда он не совсем по теме, но я надеюсь что вы меня просвятите. Так вот: компиляторы micro_c по умолчанию ограничиваю код, по-моему, до 2000 слов. Кряк, который приведен в архиве http://a_sergeevich.nxt.ru/microC.zip решает эту проблему?

Поделиться сообщением


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

Так сидел тут изучал работу АЦП, ну и развил немного это изучение в конструкцию.

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

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

Если добавить третий резистор и задействовать остаток порта B и чуток порта C можно увеличить кол-во эффектов и гирлянд.

Вообще это можно оформить в виде платы с ключами для гирлянд и панелькой под МК и просто перед НГ прошил МК

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

Так в архиве исходник, прошивка, проект для микроСи и проект для протеуса.

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

вентиляторами готовы, есть софт старт, сейчас думаю защиту от постоянки делать на АЦП или как у меня сейчас

RC-цепь -> транзисторы, которые при появлении постоянки открываются и садят вход МК на землю, ну а он уже дальше отрабатывает.

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

НЗ-НО. При включении уся вход его отключен от источника сигнала и посажен контактами реле на землю, через 5 сек после

подачи питания включаются ( если всё ок ) реле АС, которые от блока защиты от постоянки, затем через 3-5 сек включаются реле

подсоединяя вход УМЗЧ к источнику сигнала и отключая его от земли. Всё это будет защищать от сваривания контактов реле

при включении УМЗЧ на полной громкости.

Если кто-то хочет предложить по другому то жду предложений, будем обсуждать и пробовать реализовать.

Да защиту от зависания МК решил сделать железно - софтовую, а именно поставлю генератор импульсов на ЛА7 и счетчик на ИЕ8, задача МК будет переодически подавать сигнал сброса на ИЕ8 и обнулять её, если этого не произойдёт ИЕ8 досчитает до конца и включит цепь сброса МК, как думаете нормально или проще собаку задействовать ?

Ещё, может кто подскажет как защиту от КЗ забацать, желательно схемку и чтобы сигнал в МК завести.

Кстати блоки программы по готовым узлам уже проверил в железе на макетке, всё работает как часы :)

Да чуть не забыл новогодняя мигалка: noviy_god.rar

У кого будут вопросы задавайте отвечу по мере возможностей и знаний :)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

Начал потихоньку изучать микроСи. Первой под нож пошла прога для енкодера:

int REG6, REG7; // Регистры состояния соотв. входов МК
int FL6, FL7; // Регистры флагов изменения состояния выводов порта

void interrupt() {   // Обработчик прерываний
if (INTCON.RBIF=0) return; // Проверим, из-за чего произошло прерывание
INTCON.GIE=0; //Запрет всех прерываний
if (PORTB.RB6!=REG6){  // Проверка изменения сигнала на RB6
FL6=1;  //Установить флаг прерывания от соотв. входа RB6
  if (FL7=1) {
  PORTB.RB2=1;
  delay_ms (1);
  PORTB.RB2=0;
  FL6=0;
  FL7=0;
  }
}
if (PORTB.RB7!=REG7){   // Проверка изменения сигнала на RB7
FL7=1;  //Установить флаг прерывания от соотв. входа RB6
  if (FL6=1) {
  PORTB.RB3=1;
  delay_ms (1);
  PORTB.RB3=0;
  FL6=0;
  FL7=0;
  }
}
}

void main() {
TRISB=0b00001111; //Направление порта В
OPTION_REG=0b10000000;  //Подтягив. резисторы
L1: if (PORTB.RB7!=PORTB.RB6) goto L1 //Проверка исходного состояния, ждем когда будет равенство

// Заносим исходное состояние портов

if (PORTB.RB6=1) REG6=1;
else REG6=0;
if (PORTB.RB7=1) REG7=1;
else REG7=0;
INTCON=0b10001000;

do{  // Безконечный цикл
;
}
while (1);
}

Просьба ГУРУ отреагировать...

Не понятно по цепочке IF и ее сочетанию с ";"

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

Решил немного переделать вот эту часть:

if (PORTB.RB6!=REG6){ // Проверка изменения сигнала на RB6
FL6=1; //Установить флаг прерывания от соотв. входа RB6
if (FL7=1) {
PORTB.RB2=1;
delay_ms (1);
PORTB.RB2=0;
FL6=0;
FL7=0;
}
}
if (PORTB.RB7!=REG7){ // Проверка изменения сигнала на RB7
FL7=1; //Установить флаг прерывания от соотв. входа RB6
if (FL6=1) {
PORTB.RB3=1;
delay_ms (1);
PORTB.RB3=0;
FL6=0;
FL7=0;
}
}

на :

int func (int RBI,int REG,int RBO,int FL1,int FL2) {
if (RBI!=REG){   // Проверка изменения сигнала на RB7
FL1=1;  //Установить флаг прерывания от соотв. входа RB
  if (FL2=1) {
  RBO=1;
  delay_ms (1);
  RBO=0;
  FL1=0;
  FL2=0;
  }
}
}

............
func (PORTB.RB6, REG6, PORTB.RB2, FL6, FL7);
func (PORTB.RB7, REG7, PORTB.RB3, FL7, FL6);

Нужен помощь - не работает нигде - ни в PIC Emu, ни в Proteus... ЖУТЬ!

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

Поделиться сообщением


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

Я конечно может, что не так понял, но в микроСи доступ к отдельным битам осуществляется в виде PORTB.F0...7 либо надо в начале программы переопределить например, #define PORTB.F6 RB6.

У меня сейчас просто установлен обычный микроСи, может это для про версии актуально, но всё же у меня Ваш код даже не скомпилировался как Вы его могли в протеусе проверять ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1
Я конечно может, что не так понял, но в микроСи доступ к отдельным битам осуществляется в виде PORTB.F0...7 либо надо в начале программы переопределить например, #define PORTB.F6 RB6.

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

У меня сейчас просто установлен обычный микроСи, может это для про версии актуально, но всё же у меня Ваш код даже не скомпилировался как Вы его могли в протеусе проверять ?

ХЗ - у мну компилится... но при тесте на PIC Emu... зависает на постоянно прерыванию по RB4:7... почему - не понял!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484
зависает на постоянно прерыванию по RB4:7...

А зачем Вы написали вот эту строку ?

if (INTCON.RBIF=0) return; // Проверим, из-за чего произошло прерывание

И если проверяете флаг, то хотябы как минимум его нужно сбросить, а у Вас сразу возврат.

Вот он и виснет на этом месте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

Дык возврат если небыло прерывания по RB4:7, а если было то идет дальше обработчик!? ...?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
wowa    4

А кто вам сказал что вы сравниваете??? Я вижу что ты просто записываете 0!!! И как результат получите неизвестно что..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484

Ну во первых возврат не если не было прерывания, а если небыло изменений на RB4-7.

Любое изменение этих выводов приведёт к установке флага RBIF и не важно было разрешено прерывание или нет.

Во вторых, у Вас не условие получается, а присвоение биту INTCON.RBIF нуля.

Знак сравнения это два знака равно "==".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1
Знак сравнения это два знака равно "==".

Пасиб - недочитал! Вечером буду пробывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

У кого есть идеи:

- как определить изменение сигнала на выводе МК ?!

Поделиться сообщением


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

Да, код компилится в про-версии микроСи. И ещё в условиях надо знак = поменять на == как подсказал Alex.

Изменение сигнала на выводе можно определить либо по прерыванию от RB4-RB7 если нужно отслеживать 4 ноги ( в функции прерывания уже определять на какой именно ноге RB4 - RB7 произошло прерывание, либо в функции обработки прерывания выставить флаг, сбросить флаг прерывания и в основном цикле уже определить конкретный вход, сбросить флаг и всё), если одну то RB0 от входа INT, ну или тупо в условии делать проверку и крутить в основном цикле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

Так вот интересно, как определить на каком ИМЕННО выходе изменился сигнал? Мой пример с дополнительным регистром вроде работает, но может есть намного интересней идеи!?

... переделую прогу(правлю)... в PIC Emu IDE работает, но в Proteus - не совсем...

Поделиться сообщением


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

Можно сделать следующим образом, для определения на каком выводе RB4-RB7 произошло изменение сигнала, правда я ещё не проверял этот код т.к некогда было, чисто на бумаге "прогнал".

char flag = 0, j;
unsigned char sost_reg [4]; // массив куда будем записывать начальное состояние регистра
unsigned char sig_reg [4]; // массив куда будем записывать состояние регистра после изменения состояния на RB4-RB7
unsigned char tmp; //переменная для временного хранения
void zap_port ( unsigned char mass [] ); //функция для записи состояния битов порта в массив
void poisk_sig ( unsigned char mass [], unsigned mass2 [] ); //функция определения изменившегося бита
void copy_mass ( unsigned char mass [], unsigned mass2 [] );
void init ( void );//функция инициализации МК

void interrupt () // обработка прерывания по изменению уровня на RB4-RB7
  {
	 if ( INTCON.RBIF )
		  { 
				 flag = 1;
				 INTCON.RBIF = 0;
		   }
   }
int main () 
 {
	  init ();
	  zap_port ( sost_reg ); //записываем начальное значение PORTB RB4-RB7
	  while (1)
			{
				if ( flag == 1 )//было прерывание уровень изменялся на в каком либо входе RB4-RB7 
					   {
						   zap_port ( sig_reg ); //записываем изменённое состояние RB4-RB7
						   poisk_sig ( sost_reg, sig_reg ); //определяем на каком из входов произошло изменение уровня
							//обрабатываем ситуацию в зависимости от того где изменился уровень
							switch (j)
								   {
									   case 0: if ( tmp ) то-то и то-то else то-то и то-то //для RB4
									   case 1: if ( tmp ) то-то и то-то else то-то и то-то //для RB5
									   case 2: if ( tmp ) то-то и то-то else то-то и то-то //для RB6  
									   case 3: if ( tmp ) то-то и то-то else то-то и то-то //для RB7
									}
							 copy_mass ( sost_reg, sis_reg );
							 flag = 0;
						 }
				 }
   }

void zap_port ( unsigned char mass [] )
			 {
				 unsigned char temp;
				 int i;
				 temp = PORTB >> 4;
				 for ( i=0; i < 4; i++ )
						{
							mass [i] = temp & 0b0001;
							temp = temp >> 1;
						 }
				 }

void poisk_sig ( unsigned char mass [], unsigned mass2 [] )
			 {
				 int i;
				 for ( i=0; i < 4; i++ )
						 {
							 if ( mass [i] != mass2 [i] ) { j = i; tmp = mass2 [i]; }
						  }
			   }
void copy_mass ( unsigned char mass [], unsigned mass2 [] )
			 {
				 int i;
				 for ( i=0; i < 4; i++ )
						   {
							  mass [i] = mass2 [i];
							}
			   }

Тут я определяю изменение сигнала одновременно на каком-то одном входе, если надо определять на нескольких нужно функции немного изменить, что уже просто т.к основная концепция ясна.

Может где-то и есть ошибки, так что смотри внимательнее я проверял код только на бумаге, составляя трассировочные таблици в ручную, может компилятор где-то думает иначе :) Может вообще работать не будет :) .

Я ж тоже только учусь :P

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

Чесно?! Я ни х...Х... не понял! ... я так далеко еще не прочитал книжку! Мя покаместь +/- и тд.

Кста case - как я занего мог забыть!

Лады - задача усложняется! - Два энкодера + на них еще и по кнопке! Крутилки будут сидеть на RB4:7, а кнопки на RB1:2 и через диодную развязку на RB0... пошел писать.

Первые идеи:

Читаем порт В в доп регистр - R1 при прерывании X = PORTB XOR R1, узнаем по какой причине произошло изменение(RB0 или RB4:7) и в зависимости от этого заносим в доп рег R2 очищеную часть = X and 0000 1111(или 1111 0000) а дальше дело техники оператор case и тд...

Думаю получится...

ЗЫ. Компилятор действительно думает по другому! - нехочет работать... -

0 102 Finished (with errors): 10 дек 2009, 23:23:57 04.mcppi
Изменено пользователем Lev@

Поделиться сообщением


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

Я же сказал могут быть ошибки, вот исправленный

char flag = 0, j;
unsigned char sost_reg [4]; // массив куда будем записывать начальное состояние регистра
unsigned char sig_reg [4]; // массив куда будем записывать состояние регистра после изменения состояния на RB4-RB7
unsigned char tmp; //переменная для временного хранения
void zap_port ( unsigned char mass [] ); //функция для записи состояния битов порта в массив
void poisk_sig ( unsigned char mass [], unsigned mass2 [] ); //функция определения изменившегося бита
void copy_mass ( unsigned char mass [], unsigned mass2 [] );
void init ( void );//функция инициализации МК

void interrupt () // обработка прерывания по изменению уровня на RB4-RB7
  {
	 if ( INTCON.RBIF )
		  { 
				 flag = 1;
				 INTCON.RBIF = 0;
		   }
   }
int main () 
 {
	  init ();
	  zap_port ( sost_reg ); //записываем начальное значение PORTB RB4-RB7
	  while (1)
			{
				if ( flag == 1 )//было прерывание уровень изменялся на в каком либо входе RB4-RB7 
					   {
						   zap_port ( sig_reg ); //записываем изменённое состояние RB4-RB7
						   poisk_sig ( sost_reg, sig_reg ); //определяем на каком из входов произошло изменение уровня
							//обрабатываем ситуацию в зависимости от того где изменился уровень
							switch (j)
								   {
									   case 0: if ( tmp ) то-то  else то-то;break;//для RB4
									   case 1: if ( tmp ) то-то else то-то;break; //для RB5
									   case 2: if ( tmp ) то-то else то-то;break; //для RB6  
									   case 3: if ( tmp ) то-то else то-то;break; //для RB7
									}
							 copy_mass ( sost_reg, sig_reg );
							 flag = 0;
						 }
				 }
   }

void zap_port ( unsigned char mass [] )
			 {
				 unsigned char temp;
				 int i;
				 temp = PORTB >> 4;
				 for ( i=0; i < 4; i++ )
						{
							mass [i] = temp & 0b0001;
							temp = temp >> 1;
						 }
				 }

void poisk_sig ( unsigned char mass [], unsigned mass2 [] )
			 {
				 int i;
				 for ( i=0; i < 4; i++ )
						 {
							 if ( mass [i] != mass2 [i] ) { j = i; tmp = mass2 [i]; }
						  }
			   }
void copy_mass ( unsigned char mass [], unsigned mass2 [] )
			 {
				 int i;
				 for ( i=0; i < 4; i++ )
						   {
							  mass [i] = mass2 [i];
							}
			   }

Забыл про операторы break и название массива в функции написал sis_reg вместо sig_reg ;)

Счас попробовал скомпилить всё ок. И ещё функцию init () не забудь описать для своего МК.

Смысл кода такой. В начале мы записываем начальное состояние RB4-RB7 в массив zap_port ( sost_reg ); и уходим в цикл где ждём прерывания по изменению состояния RB4-RB7. Если произошло прерывание выставляем в обработчике флаг flag = 1; и начинаем выяснять на каком входе конкретно изменился уровень.Для этого мы в другой массив записываем состояние RB4-RB7 zap_port ( sig_reg ); Затем в функции poisk_sig ( sost_reg, sig_reg ); сравниваем массивы в одном из которых sost_reg записано начальное состояние в другом sig_reg действующее, находим номер изменённого входа, а также как он изменился с 1 на 0 или с 0 на 1, выполняем нужные действия в switch..case

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

copy_mass ( sost_reg, sig_reg );

flag = 0;

всё.

Изменено пользователем wowa
Для длинного кода используйте CODEBOX !!! Wowa.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lev@    1

Не обезательно знать как изменился сигнал: с 0 на 1 или с 1 на 0 - главно знать ГДЕ он изменился и в какой последовательности Вывод1 потом Вывод2 или наоборот - т.е. вращаем вправо или влево...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Не обезательно знать как изменился сигнал: с 0 на 1 или с 1 на 0 - главно знать ГДЕ он изменился и в какой последовательности Вывод1 потом Вывод2 или наоборот

Ну как раз тут мы и узнаём ГДЕ он изменился, а последовательность изменения и действия прописываем в switch..case. Ну как-то так.

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

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...

  • Похожие публикации

    • Автор: Артемон
      Всем привет. Просьба посодействовать в исправлении кода для термометра. Так как сам я в этом новичек, то код собирал из трех чужих проектов. Реализация такова, подключение термопары через микруху 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] редактора сообщений, кнопка <>
    • Автор: igoryan
      нужно ли обрабатывать RESET просто компилятор не видит RESET_vect?
    • Автор: P32L
      Натолкните на мысль пожалуйста.Смысл в следующем.Нужно изменять задержку(Delay) из EEPROM. Контроллер PIC , язык СИ.
      Как реализовать чтение числа из ипрома ? Если не затруднит, то кусочек кода был бы очень кстати.
    • Автор: Zver2011
      Здравствуйте! Недавно начал изучать МК AVR. Читаю книги Белова. Пользуюсь программами CVAVR и Proteus. По урокам, собирал все в железе. По готовым примерам кода конечно же мне легко учиться и все в принципе понятно из описания, хоть и в программировании не силен, но как только начинаешь создавать что то свое - начинаются проблемки.
      В общем я создаю что то вроде музыкального светильника, который должен включаться от звука (голоса). Датчик звука пытаюсь реализовать на компараторе, плавное включение света - ШИМ, а генерация мелодии (пищалки) благодаря таймеру Т1 и его прерыванию. Куски кода брал из разных чужих самоделок, вот только объединить не удается.
      В железе работает как будто цветомузыка какая-то. Мелодия не играет, Я думаю это из-за неправильной конфигурации компаратора, а также схемы. Вот это основной вопрос у меня. Ну и собственно основной цикл программы, там я думаю тоже накосячил.
      Помогите мне разобраться до конца, понять ошибки в коде, мне самому интересно вот только С - язык тяжеловатый на мой взгляд и без помощи знающих не обойтись))

      КОД.txt
    • Автор: 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
  • Сообщения

    • Обмоток только две: первичная и вторичная, на 24 В. Название: ЭЛИЗТрансформатор ОСМ1-01 1 50 Гц. Выпущен уже в конце девяностых, судя по ТУ. Никаких отводов от средней точки нету.
    • Скидка на 20%. В подарок доложу.   Сообщаю наличие. Отправлю заказ от 300р:
      1Ц1С Рефл. 72г. 30р.
      2Ц2С. Фотон. V-63г. 40р
      2Ц2С. Рефлектор. II-72, VI-74г. 3шт., V-74г. Всего 5шт. 30р.
      2Ц2С. ВП. Фотон. XI-1957г. 1964г. 2шт. 40р.
      3Ц22С 3шт. 10руб\шт
      3ц18п. 70гг. 10шт. 15р.
      3Ц18П. ВП. 1967г. 1шт. 15р
      5Ц12П. света. 73г. 1шт. 30р.
      6ц13п. света. 63г-2шт. 71г-1шт. 40р
      6А2П. Света.78г.1шт. 20р
      6Д14П = Янтарь = 70-80г.= 10шт = 10р 6Ж2П-ЕВ. 80х гг. 20шт. з\уп 15р
      6Ж2П и ЕВ = Света, Восход, Октябрь = 60-80гг. =россыпью 28шт = 10р\шт
      6Ж3П = Рефл. ВП = 64г = 25р
      6Ж3П. ВП. Рефлектор. 1956г. 1шт.20р
      6Ж3П. Рефлектор. 1964г. 1шт.20р
      6ж3п. Тантал. 54г. б\у. в коллекцию. 30р.
      6Ж3П = Рефл. = 55г.63г б\у=2шт =10р
      6Ж3П-ЕВ. Рефл. 74г. 1шт. 25р
      6Ж3П. Рефл. 70-80г. 4шт. 15р
      6Ж3П и 6Ж3П-Е. 1971,74,75 год. Рефлектор.з\уп.250 штук. 20р\шт.
      6Ж5П = Света, Янтарь= 60-70-80гг= 44шт = 15р
      6Ж9П и 6Ж9П-Е. Октябрь. 77,83г. 5шт. 20р
      6Ж9П. октябрь. 1979г. 3шт.20р
      6Ж9П-Е. Тантал.ВП. 67г. 1шт. 40р 6Ж10П. Рефлектор. 75г. 8шт. 15р.
      6Ж10П. ВП. Рефлектор. 1964г.1шт.30р
      6ж10п.рефлект.72г.1шт. 15р
      6Ж23П. ВП. Рефлектор. 1969г. упаковка. 1шт.100р
      6Ж38п и ЕВ.восход.70-80.4шт. 25р
      6Ж52П. Новосиб.83г. 1шт. 30р 6К13П. чуть б\у. 4шт. 60р за все 6С1П. Новосиб. 61г. 1шт. 20р
      6С1П. Новосиб. 65г. 1шт. 20р
      6С1П = Новосиб = 61г.68г.69г-2.= 4шт = 20р\шт
      6с1п - Новосиб - 69,70,81г - 3шт - 20р\шт
      6С1П. Новосиб. 1970г. упаковка. 2шт.30р
      6С2П. Новосиб. 1960г.1965г.1969г. упаковка. 3шт.40р
      6С2П.Новосибирск. 1961г.1970г. 2шт.30р
      6С3П-ЕВ. Рефлектор. 72г-1шт.75г-1шт.83г -1шт.84г-2шт. 40р
      6С3П-Е. Рефлектор. 1968Г. 1шт.40р.
      6С19П-В. Света. 72г.1шт. 35р\шт 6Н3П-Е. Рефлектор. 84г.1шт. 35р
      6Н3П.ВП. Рефлектор. 68г. 1шт. 50р
      6Н6П. Новосиб. 85г. чуть б\у. 50р
      6Н15П. ВП. Рефлектор. 1957г. 1шт.40р 6П3С.ВП. Фотон. 69г. 1шт. 250р.
      6П3С.ВП. Фотон. 67г. 1шт. чуть б\у. 150р.
      EL84 (6п14п-ев)TELAM/POLAM.1шт. 100р
      6П15П.и ЕВ. Рефл. 70-80г. 9шт. 25р
      6П18П. Рефлектор. 1965г. 1шт.30р
      6П43П-Е. Рефл.86.90г. 3шт. 30р 6р4п.октябрь.89г.1шт 10р
      6Х6С. 15шт. 60х гг. с болтанкой внутри цоколя, вроде новые. 15р 6Ф1П. ОРЗЭП. 72г. 1шт. 20р\шт
      6Ф4П. Октябрь. 1980г. упаковка. 1шт.20р
      6Ф4П. Октябрь. 1972г. 1шт.10р
      6Ф12П. Новосибирск. 05-81г. 04-05-87г. 3шт. 60р. 6Э15П. света. 67г. 1шт. 30р ИН-2. МЭЛЗ. 1971г. инд\упаковка. 2шт.40р
      ИВ-3А. Рефлектор. 82г. 4шт. 40р\шт.
      ИВ-6. Рефлектор.газотрон. 80х гг. 14шт.40р\шт.
      ИВ-12. Рефл.80г. б\у. 1шт. 50р
      ИН-12А. 70-80х. 4шт. 40р ТГ1П. ВП. Рефлектор. 1959г. упаковка. 1шт.140р
      ТГ3-0,1\1,3. 72г. 1шт. 20р
      ТГ1-0,1/0,3.ВП. Ульяновск. 1964г. 1шт. 30р\шт.
      ТГ1-0,1/0,3. Ульяновск. 1973г. 25шт. 
      ТГ1-0,1/0,3. Разряд.Орджоникидзе. 1980г. 3шт. 25р\шт.
      ТГ1-0,1/0,3. Светлана. 1962г. 1шт. 40р\шт.
      ТГ1-0,02/0,5 - 66г - 1шт - 30р СГ2П. Анод. 72г. 1шт. 20р
      СГ13П – (ВП) – 1963г – 18шт – 15р
      СГ15П-2. 70-80гг. 12шт. 15р.
      СГ1П-ЕВ. анод. 86г. 1шт. 20р
      СГ13П. анод. 68г. 1шт. 30р
      СГ16П. 70-80гг. 10шт. 15р.
      ТХ2. 62г. 2шт. 120р
      --------------------------------------------
      Фторопластовые направляюцие от военки 60х гг. Использовались под ГМИ-6, ГУ-29 и прочих подобных.
      Длина 7см, торец 8х15мм. С обоих торцов отверстия под два винта крепления. Отверстия 6мм, разнос по центрам 23мм. 7шт. 30р\шт.
      --------------------------------------------
      ГУ-50. 80е годы. 6шт. 90р
      Г-807. Ульяновск. б\у.1963г. 1шт. 60р
      СЦВ-3 - МЭЛЗ – 50-60гг – 4шт – 70р
      кварц 32кГц. 69г. 1шт. 30р.
      В1-0.03/13. 82г. 30р.
      СТ2С-В. 67г.1шт.30р
      ВИ3-70\32. 80г. 2шт. 120р
      панельки к ИН12, ПЛ31а-П - 74г, 83г - 6шт паяные хорошее состояние - 20р\шт
      ---------------------------------------------------------------------------
      - Переходник ПК-3.ВП.1967г.керамика.1шт. 80р.
      ПК-3 переходник распайка:
      Со стороны октальной части 8 восемь ног, 1 и 4 пустые.
      Со стороны пальчиковой 7 семь ног.
      Соединение октальная- пальчики:
      2-4
      3-6
      5-1
      6-5
      7-3
      8-2
      - Черный переходник-панелька. 50р. МИНИЛАМПЫ
      6Ж1Б-В. МЭЛЗ. 82,85г. 5шт. 20р.
      6Ж2Б. ВП мэлз. 1960г. 11 шт. 20р\шт.
      СГ301С-1. 68,75г 2шт. 35р.
      ТХ3Б. 70год. 11шт. з\уп 20р
      ТХ4Б. ВП 67,65г. 2шт.15р.
      ТХ4Б-1. 84г. 1шт.30р.
      СГ5Б. 74,76г. 3шт.40р.
      СГ202Б. ВП. 1980г. 2шт. 20р
      СГ20Г. 81г. 1шт.50р
      ИВЛМ1-1/7. 89г. б\у. 1шт.50р 
      кварц 128к 90г. 1шт. 20р
      6Ж45Б-В. 91г. 8шт. 30р.
    • Сообщаю наличие: 1. CD Plaeyr Sanyo CDF-P100. Состояние, функции на фото. Загружает диск и при нажатии кн. open выгружает. Datasheet http://files.webfile.ru/a609e15aa5dbbae ... 86ade64b87 500руб. 2. HITACHI FН410. Состояние, функции на фото. Тюнер поиск работает. Звука нет. Кассета - перемотки, воспроизведение, реверс, автореверс - работают. 400руб. 4. NATIONAL RM-7400. Состояние, функции на фото.Тюнер исправен. Звук есть, но не регулируется. ЛПМ требует профилактики, перемотка, воспроизведение, реверс работает. 400р. 6. KENWOOD DPX-511H. Проигрыватель CD, кассета, тюнер японский диапазон. Включается диск загрузки и выключается. Требуется ремонт и оживление. 600р. 7. PIONEER FH-P555MD Carrozzeria. CD,MD,TUNER.Требуется ремонт.При подаче питания не реагирует. Ток потребления 0.Предполагаю проблема +5в. 500р 10. PANASONIC CX-DX555. Питание подал, не реагирует. 300р. 11. ALPINE 7284JS. Кассета, тюнер - японский диапазон. Всё работает,звук есть, кроме : нет крышки кас.приемника, ЛПМ не довключает перемотки и рабочий хор, реверс рботает, как обычно бывает от растянутого пассика. Профилактика нужна. 400р. 12. ALPINE LV707. Трехдисковый чендлер. Не хочет выдвигать лоток, выдаёт ошибку. Продаю как неисправный. 500р. 15. HITACHI PCD-700. СД проигрыватель. Диск загружает, думает и выгружает. Двигатель вращения СД не пускается. 300р. 18. CLARION. Моделька на бирке затёрлась, практически не читается. Кассета, тюнер японский диапазон. Усилитель четыре канала. Исправное состояние. 500р. 20. TECHNICS CQ-LS266A. Кассета, тюнер японский диапазон.Усилитель четыре канала. Тюнер рабочий. Звук есть. Кассетник не работает. Основного разъема нет, на задней панели внутри разъёмы с распиновкой. На дисплее слева "бельмо". 400р. 21. FUJITSU TEN. AE-3320TLI, SP-5130TLI. Кассетник и тюнер блочные. Оба рабочие, звук регулируется но тихий. 500р. 22. PIONEER CARROZZERIA FH-P700. CD, кассета, тюнер японский диапазон. Тюнер и кассетник рабочие. Звук тихий, 4 канала. На CD нет шлейфа, исправность неизвестна. На дисплее картинка есть, но подсветка люм. не работает нет 200в, считаю инвертор не работает (собран на транзисторе).600р. 26. JVC KW-XZ72DA. Кассета, тюнер яп., СД. Чуть пошарпаная, но вполне смотрится. 40Wх4. хороший звук. эквалайзер, лин.выход и прочее. Полностью исправна, кроме СД (загружает диск, двиг. вращения не пускается и выгружает. Либо драйвер двиг. или механика.) Распиновку покажу покупателю. 700р. 27. SONY CDX-U30. СД проигрыватель с эквалайзером. Это блок от стойки. Можно подключить к др.аппаратам имеющим такой разъем маму, как у JVC KW-XZ72DA выше. неисправность та же (загружает диск, двиг. вращения не пускается и выгружает. Либо драйвер двиг. или механика.) индикации нет. 400р. 30. Старенький рабочий СВ тюнер FUJITSU AR-1076. Моно. 530 - 1600кГц. +12в. 200руб. 32. Ретро Mitsubishi Electric RX-128. Побитый жизнью. Кассета, тюнер ФМ 76-90мГц. Полурабочий - звук есть регулируется, один канал тише, все режимы включаются, скорость завышена, тюнер шипит, подсветка зеленая неконтачит вроде где-то. Ручки громкости нет - притулил иное. ALPS на громкости с ТК. Профилактика нужна старику. 300руб. 33. Китайский Addzest ARX5170. На запчасти. Кассету берет и выбрасывает. 200руб. 35. Старый потрепаный жизнью винтаж УС PIONEER GM-EO4zm. УС на м\с PIONEER РА3011. Нерабочий. 250р. http://antique-autoradio-madness.org/Pi ... 984_03.htm
    • Сообщаю наличие. Все фото и описание выше в теме :
      - Тюнер DENON TU-7V. 1985г. 800р.
      - Регулятор COSMOS TOKYO CAT-40H для акустических систем. L-pad. 8ом, 40dB. 250р.
      - Двигатели от кассетных дек и миниплееров. На фото типы. Все по 150руб.
      - Колодка зажимов для АС от УС Pioneer. 150руб.
      - Кулер охлаждения Matsushita 24в, 0,1А. 150р.
      - VICTOR RC-505. 1976года. Останки магнитолы на фото. 600руб.
      - Тюнер KENWOOD T-CD1. 800р.
      - Стойка минисистемы KENWOOD. Неисправная. 100в. На з\части. Состав - 3 блока. 
      1. Предусилитель-тюнер C-B5. 400р (плата регулировок,тюнера,индикации продана) остался корпус с платой основной внутри.
      2. Усилитель-эквалайзер В-В6. 2000р Готовый усилитель под предусилитель. режимы управляются. Сгорела м\с УНЧ LA4280 (стоит копейки, есть у меня подарю) - поэтому горит предохранитель 2А.
      3. Двухкассетная дека Х-В5. 1100р.
      - Кучка микриков OMRON и других. 200\кучка.
      - ИК приёмник SHARP GP1U501X. 100р.
      - Светодиоды японские + м\с управления B1423N. 150р за всё.
      - Кучка TOSHIBA - ламп накаливания и крупных светодиодов для подсветки автопанелей. Можно и для аудио. 200р\кучка. - Магнитола NATIONAL RQ-548. 1976г.  1800р.
      - Японские ШП динамики (вроде Matsushita) 8ом 3w на рабочих местах. Пара 600р.
    • Ожидаем видеообзор полученной покупки 
    • Сообщаю наличие : Тип - год - состояние - кол-во - цена за шт. РМ-4-К (10А, 24в) б\у - 1шт - 250р 8Д-53 ВП (5А, 26в) 1969г б\у - 1шт - 300р РЭС8 РС4.590.050 - 82г - новое - 1шт - 90р РЭС8 РС4.590.050 - 86г - б\у - 1шт - 50р РПС20 РС4.521.751 - 75г,76г - б\у - 6шт - 25р РЭВ18А РС4.569.800-01 - 89г,90г - б\у - 36шт - 20р РЭС79 набор из 6 штук б\у 80х годов, паспорта на фото (03,04,05,07,08,11).За все 150р. 2PDT (Польша) 5А, 12в - 2шт - 50р\шт (третья в подарок) РЭС15 РС4.591.001 - 82-84г - 9шт - новое - 10р РЭС32 РФ4500342 - 79г - 1шт - б\у - 20р РЭС32 РФ4500343 1987г. б\у 20р\шт РЭС47 РФ4500417 - 79г80г - 2шт - б\у - 30р РЭС47 0302 - 90г - 2шт - б\у - 30р РЭС47 0201 - 82г87 - 5шт - б\у - 30р РЭС43 РС4.569.203 - 80г - 1шт - б\у - 20р РЭС55А РС4.569.603 - 75г-4шт, 80г-4шт - 8шт - б\у - 10р РЭС55А 0001 - 90г - 1шт - б\у - 10р РЭС59 ХП4.500.020 - 81г - 1шт - б\у - 20р РЭС64А РС4.569.724 - 90г - 1шт - б\у - 20р РЭС55А РС4.569.603 - 75г-4шт, 80г-4шт - 8шт - б\у - 10р РПС36Б РС4520267 - 85г - 1шт - б\у - 50р РГК14 Бг4.569.001-03 - 87г,88г,89г-2шт - 4шт - б\у - 20р ТКЕ16ПД1У - ВП - 4шт - б\у - 50р ТКЕ24ПД1 - ВП - 7шт - б\у - 50р ТКЕ54ПД1У - ВП 63г - 7шт - б\у - 50р ТКЕ56ПД1У - новые 2шт - 100р ТКД12ПД1У - 5шт - б\у - 100р РМУГ РС4.523.402 - 79г - 1шт - нов - 60р РТС4 0401 - 83г - 1шт - 40р РЭН34 паспорт 000-01. 2шт. 120р\шт.

      РЭС47-ОС 0201. 1шт. 50р. РЭС15 002021 1шт. 89г. б\у 10р РЭС15 РС4.591.003 2шт. 82г. б\у 10р РЭС49 01260491 0202  4шт. б\у. 30р\шт РЭС49 30050390 0001 2шт. новые и 2шт. б\у.  30р\шт