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

Язык СИ для микроконтроллеров


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

_http://www.kodges.ru/63890-mikrokontrollery-pic-24.-arxitektura-i.html

_http://www.kodges.ru/61234-primenenie-mikrokontrollerov-pic18.-arxitektura.html

_http://www.kodges.ru/2007/03/01/programmirovanie_na_jazyke_c_dlja_avr_i_.html

и часто внизу аннотации к книге перечислены книги близкой тематики

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

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

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

Не цитируите полностью предыдущее сообщение!!!

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

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

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

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

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

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

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

перестал.

почему я так сейчас говорю об этом? 99 процентов книг являются пересказом или переводом соответствующих хелпов, с той разницей, что в хелпе есть поиск, а в книге только пальцем листать.

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

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

в этот момент дисплеи EGA уже не производятся, а фирмы делавшей Voodoo не существует ;)

и так примерно в любом направлении.

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

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

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

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

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

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

Форумчане, помогите мне истолковать код этои программы , то как я понял я в коментариях НАПИСАЛ В ВЕРХНЕМ , а оригинальные коментарии без изменений.

//***** обработчик прерываний ***********************//
void interrupt _isr(void)  // МОЖНО ЖЕ ПРОСТО INTERRUPT(VOID)  ?
{
static unsigned char ind_num=0;	// Номер индикатора // ЗАЧЕМ СТАТИК?
static char cnt_ms=10;			// Счётчик mS для опроса кнопок


if(TMR1IF)	// Проверяем флаг И ЕСЛИ ИСТИНА(1), ТО СЛЕДУЮЩАЯ СТРОЧКА
{
	TMR1IF=0;	// Сбрасываем флаг
	TMR1 = 65537-2500 + TMR1;	// Переустанавливаем таймер на 1 mS
// ПОЧЕМУ НЕ 63073+TMR1 (ДЛЯ НАГЛЯДНОСТИ)
	ind_num++;	// Следующий индикатор
//ЭТА ИНСТРУКЦИЯ ИСПОЛНИТСЯ, ЕСЛИ ПРЕДЫДУЩАЯ IF ЛОЖЬ.
	if(ind_num>3)	ind_num=0;	// Если зашкалило, выбираем первый 

	PORTD &=0b11110000;	// Гасим индикаторы (КАТОДЫ)
	NOP();NOP();NOP();NOP();NOP();	// Небольшая задержка
	PORTC=buf_ind[ind_num];			// Выводим в порт значение текущего индикатора из буфера
	PORTD |=(1<<ind_num);			// Зажигаем текущий индикатор 

//ЛОЖЬ, ДЛЯ ПРЕДЫДУЩЕГО IF
	if(!--cnt_ms){	// Отсчитываем 10 mS
		cnt_ms=10;
		keyboard();	// Вызываем процедуру опроса кнопок
	}// ПОХОЖЕ, ЧТО ЕСЛИ ПРЕДЫДУЩАЯ ЛОЖЬ, ТО ВЫХОДИМ ИЗ ПРЕРЫВАНИЯ
}
}

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

Не цитируите полностью предыдущее сообщение!!!

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

МОЖНО ЖЕ ПРОСТО INTERRUPT(VOID) ?
Нельзя. interrupt это квалификатор, указывающий на то, что данная процедура лежит в области обработчика прерываний. А само название процедуры (_isr) уже можно писать как угодно.
// Номер индикатора // ЗАЧЕМ СТАТИК?
Что бы при следующем вызове процедуры она сохранила своё значение. Точнее чтобы при выходе не теряла.
//ЭТА ИНСТРУКЦИЯ ИСПОЛНИТСЯ, ЕСЛИ ПРЕДЫДУЩАЯ IF ЛОЖЬ.
Нет. Будут выполняться все инструкции до закрывающейся скобки.

Пример

if(a==1){// Если а равно 1

 if(b>0){ // Если b больше 0

 } // конец блока b>0


}// конец блока a==1
else{   // а не равно 1


}// конец блока else

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

TMR1 = 65537-2500 + TMR1; // Переустанавливаем таймер на 1 mS

// ПОЧЕМУ НЕ 63073+TMR1 (ДЛЯ НАГЛЯДНОСТИ)

потому, что значения

65536 = 0x10000

65537 = 0x10001

65535 = 0xFFFF

нужно на память среди ночи знать, они сами по себе образец наглядности :)

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

Как составляется алгоритм программы при использовании языка Си, мне кажется есть отличия с ассемблером.

Не цитируите полностью предыдущее сообщение!!!

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

Спасибо, где взять библиотеки готовых решений для HI-TECH, например как в MicroC Delay_us(30) -задержка на 30 мкс?

Не цитируите полностью предыдущее сообщение!!!

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

Я так же нашел на саите www.microchipc.com, скачал архив и распоковал в папку Microchip/library , в проект добавил delay.h но компилятор на него ругается

Не цитируите полностью предыдущее сообщение!!!

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

Спасибо, я воспользовался вашеи первои подсказкои, теперь компилятор ругается на все ( практически все что у меня написано в программе))), даже на главную функцию void main (void)???

#include <pic.h>
#include <htc.h>/* Памятка
	_delay(1000);		// delay for 1000 instruction cycles
	CLRWDT();
	__delay_us(400);	// delay for 400 microseconds
	CLRWDT();
	__delay_ms(2);		// delay for 2 milliseconds
*/
__CONFIG ( RC & WDTDIS & PWRTEN & BOREN & LVPDIS & DUNPROT &
WRTEN & DEBUGDIS & UNPROTECT );
unsigned char schet=0;     // Глобальная переменная
bit flag = 0               // Глобальный флаг
void main (void)
{
ADCON1  = 0x03;            // Порт А цифровои, 00000111
TRISA   = 0xFF;            // на вход (кнопки)
TRISB   = 0   ;            // на выход (датчик темп)
TRISC   = 0   ;            // На выход, подключен индикатор
TRISD   = 0   ;            // На выход  катод индикатора и зумер
OPTION_REG = b01000110 ;   // Подтяжка вкл(сидит датчик), 1:128 от TMR0
INTCON = 0;                // Выключить все прерывания//(10100000)включить от TMR0 
CMCON = 0b00000111;        // Comparator off
}
void init_DS1821(void)      // Инициализация DS1821
{                           /* Послать импульс сброса(<480мкс)
                              переключиться на вход и ждать импульс присутствия
                              измерить PRESENCE, если его нет,то
                              повторить сначала
                              Если есть, продолжить инициализацию
                            */
}                              
void interrupt timers (void) // прерывания от TMR0, каждые 32 мкс
{
if(flag=1)                   // Если установлен флаг, то 
{schet = schet--, flag = 0};// Декрементирую и сбрасываю флаг.
TMR0IF=0;                    // Сбрасываю флаг прерывания от TMR0
}

Не цитируите полностью предыдущее сообщение!!!

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

Спасибо, я воспользовался вашеи первои подсказкои, теперь компилятор ругается на все
Ну извините, я не хотел :unknw: Я всего лишь хотел сказать где лежит пример :umnik2:

bit flag = 0

; забыли.

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

Ура скомпилил, оказывается надо писать не OPTION_REG а просто OPTION, и ноль перед двоичным числом забыл и точку с запятои забыл и не там поставил( вторая строчка снизу с ошибкои)

Не цитируите полностью предыдущее сообщение!!!

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

Как мне передать по 1 wire баит? Я придумал такои алгоритм- записываю в порт баит, как раз у меня датчик на младшем разряде, жду 100мкс, потом уставлю на RB0 1 и сразу 0 , сдвигаю следующий разряд и декрементирую счетчик битов. Это закольцовываю пока счетчик битов не обнулится.

Не цитируите полностью предыдущее сообщение!!!

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

Ну вот что я написал

void out_ds1821(void)
 {char count_byte=7;       // счетчик битов
  char out_ds=0   ;        // то что буду отправлять в ds
out_ds=PORTB;TRISB=0;      // Загрузил, младший разряд пошел на передачу
  __delay_us(100);         // Жду пока закачается
do {RB0=1;RB0=0;PORTB<<1;  // Импульс восстановления, сдвигаю влево на один разряд
   __delay_us(100);}       // Задержка
while  (--count_byte) ;    // Зацикливается 7раз, потому-что один бит уже был отправлен

Не цитируите полностью предыдущее сообщение!!!

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

Компиль постоянно ругается на вторую строчку сверху. Уже ума не приложу что делать.

Error [314] C:\Program Files\Microchip\Project_C\Signpic_C2\Signpic_C2.c; 52.18 ";" expected

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

Не цитируите полностью предыдущее сообщение!!!

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

Ну вот что я написал

void out_ds1821(void)
 {char count_byte=7;       // счетчик битов
  char out_ds=0   ;        // то что буду отправлять в ds
out_ds=PORTB;TRISB=0;      // Загрузил, младший разряд пошел на передачу
  __delay_us(100);         // Жду пока закачается
do {RB0=1;RB0=0;PORTB<<1;  // Импульс восстановления, сдвигаю влево на один разряд
   __delay_us(100);}       // Задержка
while  (--count_byte) ;    // Зацикливается 7раз, потому-что один бит уже был отправлен

PORTB <<= 1;

или PORTB = PORTB << 1;

Компиль постоянно ругается на вторую строчку сверху. Уже ума не приложу что делать.

Error [314] C:\Program Files\Microchip\Project_C\Signpic_C2\Signpic_C2.c; 52.18 ";" expected

написано же: ожидается ; точка с запятой.

цифры думаю это номер строки и символа в ней.

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

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

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

989232.jpg[/img]

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

Не цитируите полностью предыдущее сообщение!!!

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

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

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

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

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

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

Я тут выкладывал, готовые функции на Си от самого производителя этих датчиков, там есть всё и чтение и запись, зачем изобретать велосипед заново если его уже изобрели до вас ?

Даже вот тебе ссылка: http://forum.cxem.net/index.php?app=core&module=attach&section=attach&attach_id=56666

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

Будьте проще и люди к вам потянутся.

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Сами же понимаете, что так не может быть. Или нет "сквозняка", или схема неправильно собрана, элементы не те, битые и пр., и схема защиты не работает. Проверьте сначала работу защёлки защиты при питании от 15 В, отпаяв R19 и подавая туда медленно увеличивающееся напряжение до 1,5 - 2 В (можно с потенциометра ом на 100-500). Добейтесь, чтобы работала. Порог срабатывания измерьте. Пересчитайте в ток через резистор 0,1 Ом. Соответствует ли "правильному"? Проверьте, что у этого резистора сопротивление действительно 0,1 Ом. Запаяйте 0,1 Ом обратно. Напишите, какая лампочка. А то мало ли какая, может она не от "сквозняка", а от броска тока заряда С18 С16 мигает. Транзисторы ключей проверьте. Впаяйте вместо первичной трансформатора резистор ом 150 - 300, чтобы ток с ключей в этот "эквивалент трансформатора" не больше 50-100 мА был. Посмотрите форму напряжения на выходе ключей, в точке соединения С16 и С18, на питании после лампочки. Ищите, где ляп. Умозрительно подсказать можно только по каким-то измеренным данным. Кроме вас никто их не добудет. В общем, как в анекдоте: - Молодой человек, ну делайте же уже хоть что-нибудь!
    • Ну так можно увеличить глубину ООС, тем самым понизив чувствительность и повысив линейность
    • Судя по этой картинке   в трухе передней панели под выступающие болты и шишки паек ЗК динамиков выковыряныфрезерованы выемки, иначе бы динамики так плотно не прилегали бы к ДВП.    А оно тебе надо? "Работает - не мешай"(с)/это уже аксиома, не требующая доказательств/ , пытаясь сделать лучше, чем сделано на заводе. Сanton-ят, т.е. поют, и лучше, чем есть, тебе не сделать. Ну перенесёшь ты динамики наружу, а что тебе это даст? Кроме того, что при попытке их продать(а продавать их когда-нибудь придётся, т.к. эта акустика бюджетного сегмента без потуг на высший класс Hi-Fi) , тебе придётся объяснять потенциальному покупателю причину, по которой какой-то умник заколхозил такую переделку с акустикой, ты ничего хорошего не получишь. Задуманная тобой переделка - это по сути возня ради возни. 
    • Малыш, чушь пока здесь мелешь только ты. Сидел бы лучше в своей оффтопной теме, лепил бы на своём 3D-пинтере куколок, и не лез бы в те темы, в которых ты - ноль. 
    • Там нашел. Вроде купил.  Спасибо всем
    • Вначале вместо 220 подал 15в ( неправильно выразился, извиняюсь, конденсатор С10 коротнул, чтоб микра заработала),как на картинке, посмотрел сигнал на затворах - есть, перемычку естественно отпаял, включаю 220, а лампочка страховочная загорается, Следовательно идёт сквозняк... Вот и хочу спросить у вас, Где искать подвох? Да кстати защита не срабатывала почему-то..
  • Похожий контент

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