Jump to content

На чем писать  

560 members have voted

  1. 1. Что чаще используете в разработках?

    • Assembler
      156
    • C
      282
    • Что-то еще
      61


Recommended Posts

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

Share this post


Link to post
Share on other sites

ASM.

Почему? Ну, причин много.

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

2) AVR ассемблер несложен - всего-то, 118 команд.

3) У асмы очень простой синтаксис.

4) Из других языков знаю только Pascal. Синтаксис Си для меня крайне неудобоваримый.

Share this post


Link to post
Share on other sites

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

Простое, то оно простое, но задачи может решать достаточно сложные.

>>2) AVR ассемблер несложен - всего-то, 118 команд.

Если пересчитать количество "ключевых" слов СИ, то получаться меньше 118

>>3) У асмы очень простой синтаксис.

ldi r17,18

и потом ищи где r17 равен 18, а где регистр еще на что понадобился и было внесено новое значение.

unsigned char r17 = 18;

В зависимости от места объявления, очень четкие правила жизни и области видимости данной переменной.

>>4) Из других языков знаю только Pascal. Синтаксис Си для меня крайне неудобоваримый

не буду комментировать

Share this post


Link to post
Share on other sites

Конденсаторы Panasonic. Часть 4. Полимеры – номенклатура

В заключительной, четвертой статье из цикла «Конденсаторы Panasonic» рассматриваются основные достоинства и особенности использования конденсаторов этого японского производителя на основе полимерной технологии. Главной конструктивной особенностью таких конденсаторов является полимерный материал, используемый в качестве проводящего слоя. Полимер обеспечивает конденсаторам высокую электрическую проводимость и пониженное эквивалентное сопротивление (ESR). Номинальная емкость и ESR отличается в данном случае высокой стабильностью во всем рабочем диапазоне температур. А повышенная емкость при низком ESR идеальна для решения задач шумоподавления и ограничения токовых паразитных импульсов в широком частотном диапазоне.

Читать статью

А как вы на пример на асме делите на 10? Я на си пишу А=А/10; и не заморачиваюсь.

Посчитать и на си все можно, обычно все компиляторы генерят асм файл. Открой и посмотри нужный кусочек. Любой отладчик даже показывает время выполнения каждой команды (сам считает). В той же AVR Studio можно открыть окно дизасемблера и видно что наваял тебе компилятор. К стати ваяет вполне себе не плохо. Не надо думать о инициализации стека, о том какие регистры можно использовать для загрузки константы, какие нет. Все функции, что компилятор транслирует с Си на Асм (например for) писали такие же программисты на асме и не дурнее нас с вами. Разное написание одного и того же цикла на си дает конечно разные результаты на асме, ну так ведь можно поиграться и посмотреть, что для этого компилятора лучше использовать и т.о. писать оптимальный код.

Share this post


Link to post
Share on other sites
Где-то проскальзывала прикидка, что Ассемблер вчетверо быстрее С

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

В итоге, на С в принципе можно приблизится к быстродействию ассемблера - но при этом нужно знать 1) Сам язык, 2) поведение компилятора ... в некоторых случаях этот объем знаний становится сопоставимым с объемом работы по реализации алгоритма задачи на ассемблере. Это и есть пограничиный случай для выбора "на чем писать". На это все очень здорово влияет наличие библиотек функций, необходимых для решения задачи.

А как вы на пример на асме делите на 10? Я на си пишу А=А/10; и не заморачиваюсь.

И получаешь универсальный код на АСМе, который можно было бы во многих случаях сократить раза в 4.

В чем недостаток ЯВУ, так это в том что невозможно выбрать конкретную реализацию алгоритма в конкретных условиях. Ведь не векрет что одно и то же действие можно реализовать многими способами, которые обладают своими характеристиками 1) быстродействием 2) занимаемыми ресурсами 3) количеством программной памяти. И как правило они взаимоисключающие.

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

Share this post


Link to post
Share on other sites
                     

STM32G0 - средства противодействия угрозам безопасности

Результатом выполнения требований безопасности всегда является усложнение разрабатываемой системы. Особенно чувствительными эти расходы стали теперь, в процессе массового внедрения IoT. Обладая мощным набором инструментов информационной безопасности, микроконтроллеры STM32G0 производства STMicroelectronics, объединив в себе невысокую цену, энергоэффективность и расширенный арсенал встроенных аппаратных инструментов, способны обеспечить полную безопасность разрабатываемого устройства.

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

Кто то пробовал через пол года открыть собственную программу на Си или на асм, в которой скажем так около 2000 строк. Интересно сколько времени уйдет на редактирование и хотя бы вспоминание кода. Я Даже не говорю уже о чужом коде :ph34r:

Share this post


Link to post
Share on other sites

Свой код на Ассме (такого размера) обновляется в памяти минут через 30-ть (код все же СВОЙ). И сразу же бросаются в глаза алгоритмы, которые можно (и нужно) оптимизировать еще. Появляется мысль "чем думал, когда писАл". :)

Share this post


Link to post
Share on other sites

Открыл, посмотрел ... сразу пришло в голову мысль что можно было активно использовать макроподстановки и как-то упорядочить все. Идея алгоритма сразу обновилась в голове по коментариям. Написано все на АСМе. Правда строк всего 850.

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

Share this post


Link to post
Share on other sites
А как вы на пример на асме делите на 10? Я на си пишу А=А/10; и не заморачиваюсь.

И получаешь универсальный код на АСМе' date=' который можно было бы во многих случаях сократить раза в 4.

В чем недостаток ЯВУ, так это в том что невозможно выбрать конкретную реализацию алгоритма в конкретных условиях. Ведь не векрет что одно и то же действие можно реализовать многими способами, которые обладают своими характеристиками 1) быстродействием 2) занимаемыми ресурсами 3) количеством программной памяти. И как правило они взаимоисключающие.[/quote']

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

Свой код на Ассме (такого размера) обновляется в памяти минут через 30-ть (код все же СВОЙ). И сразу же бросаются в глаза алгоритмы, которые можно (и нужно) оптимизировать еще. Появляется мысль "чем думал, когда писАл". :)

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

Edited by Panda_y2k

Share this post


Link to post
Share on other sites

...почему же вы считаете, что тот кто писал эту библиотеку на асме идиот и не может ее оптимально написать...

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

Почему же? Про идиотизм библиотек никто не говорил. Люди, которые их пишут, совсем не идиоты (они прекрасно понимают, кто их библиотеками будет пользоваться). Именно поэтому библиотеки адаптируются под универсальность применения, чтобы чел не заморачивался вопросом КАК ЭТО СДЕЛАТЬ, а просто писАл A=B/10 и делал это спокойно в любых алгоритмах. Но какой бы программист-библиотечник не был, он не сможет предвидеть какими регистрами программист-пользователь будет пользоваться активно, а какие у него будут простаивать без дела. Поэтому библиотеки часто используют наиболее стандартный набор регистров во всех алгоритмах. Чего только стоит "жонглирование" со стеком при переходах из функции в функцию (многкратные сохранения и восстановления, без которых можно спокойно обойтись, выбери другой регистр для операции). Однако существует ряд причин, когда нужно принять именно решение КАК ЭТО СДЕЛАТЬ ПРОЩЕ (ОПТИМАЛЬНЕЕ). Например нехватка памяти МК или же жесткие требования к времени выполнения программы (алгоритма). Вот тут Асм может помочь и очень существенно.

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

Я не хвалю один язык перед другим. Оба хороши. Но ввиду того, что я некоторым образом эстет, что в электронике, что в программировании. Мне больше нравится Асм, потому как есть в нем путь к дальнейшему совершенствованию уже написАнного кода (как и в схемах). 

Edited by Геннадий

Share this post


Link to post
Share on other sites

Помогите народ. Пробую компилировать прогу в ICC for AVR, подключил файлы, которые даны сдесь для работы с графикой. При компиляции пишет:

!ERROR file 'ks_1.o': undefined symbol '_Delay_ms'

!ERROR file 'ks_1.o': undefined symbol '_Delay_mks'

C:\iccv7avr\bin\imakew.exe: Error code 1

В чем дело?

Share this post


Link to post
Share on other sites

ИМХО:

Пока не поздно перейдите на другой компилятор. Или поздно?

Например мои предпочтения:

IAR

GCC

Код вижен (куда же без него)

ICC - судя по форумам мало распространен. Еще бы, платный да с прибомбасами

Share this post


Link to post
Share on other sites

Пишу на ассемблере,на днях попробовал си мое мнение ассемблер намного понятнее там что написал то и получил а Си больше походит на магию,одни указатели чего стоят, а на ассемблере это всего лишь команда ldd.

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

Share this post


Link to post
Share on other sites

Возможно на си писать проше, но на асм зато понятно что и как делается (меняется понимание програмного кода).

Начинал писать на асм для компа еше под 95 винду, затем паскаль со вставками асм, теперь делфи. Потихоньку осваиваю си для мк. (так просто для себя)

P.C. И не считаю что время потерял.

Share this post


Link to post
Share on other sites
Чего только стоит "жонглирование" со стеком при переходах из функции в функцию (многкратные сохранения и восстановления, без которых можно спокойно обойтись, выбери другой регистр для операции). Однако существует ряд причин, когда нужно принять именно решение КАК ЭТО СДЕЛАТЬ ПРОЩЕ (ОПТИМАЛЬНЕЕ). Например нехватка памяти МК или же жесткие требования к времени выполнения программы (алгоритма). Вот тут Асм может помочь и очень существенно.

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

Я не хвалю один язык перед другим. Оба хороши. Но ввиду того, что я некоторым образом эстет, что в электронике, что в программировании. Мне больше нравится Асм, потому как есть в нем путь к дальнейшему совершенствованию уже написАнного кода (как и в схемах).

При написании программы на языке высокого уровня, в любом случае придется сохранять в стек регистры при вызове процедуры, от этого никуда не денешься, но как я уже говорил, ЯВУ позволяет в большей степени сосредоточиться на задаче. Компромис есть всегда. Контролееры предсавлены сейчас широкой линейкой, с различным (часто вполне достаточным)объемом памяти для решения большинства задач, если ее не хватает, так же часто проще сменить контроллер, чем вылизывать программу на ассемблере, тем более, что современные задачи очень часто связаны с вопросами коммуникации с другими устройствами и библиотеки для этого есть на ЯВУ, их легко использовать, не отрываясь от решения основной задачи.

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

Кто то пробовал через пол года открыть собственную программу на Си или на асм, в которой скажем так около 2000 строк. Интересно сколько времени уйдет на редактирование и хотя бы вспоминание кода. Я Даже не говорю уже о чужом коде :ph34r:

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

Share this post


Link to post
Share on other sites

Для этого существуют комментарии и макро-определения.

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

Edited by Alexeyslav

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

дайте ссылку на отладчик на С для atiny2313, чтобы немного весил или скорость скачки была нормальная. Желательно под SP2

Edited by john-339

Share this post


Link to post
Share on other sites

Ради интереса выкладываю простенькую программу написанную и отлаженную на Си примерно за 30 минут. Кто перепишет её на ассемблере? И за сколько времени?

/*****************************************************
Project : Comparator
Version : 1.0
Date	: 05.12.2011
Author  : mazzi
Company : Reanimator Extreme Edition

Chip type   			: ATtiny2313
AVR Core Clock frequency: 8.000000 MHz
Memory model        	: Tiny
External RAM size   	: 0
Data Stack size 		: 32
*****************************************************/

#include <tiny2313.h>

#define LED  PORTB.2
#define JMP1 PINB.6
#define JMP2 PINB.7

#define M_OFF_BLINK 0x00
#define M_ON_BLINK  0x01
#define T_BLINK 	0x10

#define LED_ON  0
#define LED_OFF 1

#define VOL_LO  1000
#define VOL_HI  5000
#define VOL_MAX 6000 

typedef unsigned char uchar;
typedef unsigned int  uint;

bit f_10ms;
uchar mode = M_OFF_BLINK;
uchar t_blink = 0;
uchar bit_blink = 0;
uint  volume;
void handler_blink(void);

//===============================================
// Timer1 overflow interrupt service routine
// период 10мс
interrupt [TIM1_OVF] void timer1_ovf_isr(void) {
  TCNT1H=0xFB1D >> 8;
  TCNT1L=0xFB1D & 0xff;
  f_10ms = 1;
}

void main(void) {
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Reset Source checking
  if (MCUSR & 1)   {   // Power-on Reset
  	MCUSR=0;
  	volume = 0;
  }
  else if (MCUSR & 2)   {   // External Reset
  	MCUSR=0;
  	volume = 0;
  }
  else if (MCUSR & 4)   {   // Brown-Out Reset
  	MCUSR=0;
  }
  else   {   // Watchdog Reset
  	MCUSR=0;
  // Place your code here
  };

// Input/Output Ports initialization
PORTA=0x00;
DDRA=0x00;
PORTB=0xC4;
DDRB=0x04;
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125.000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x03;
TCNT1H=0xFB;
TCNT1L=0x1D;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x80;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Global enable interrupts
#asm("sei")

  while (1)   {
  	if ( f_10ms ) {
       	f_10ms=0;
       	handler_blink(); 
       	if ( ACSR & 0x20 ) { //if ( Uin < Uop ) {
    			if (  volume < VOL_MAX ) volume++; 
    			if (( JMP1 == 0 )&&( volume < VOL_MAX )) volume++; 
    			if (( volume >= VOL_HI )&&( mode == M_OFF_BLINK )) mode = M_ON_BLINK;
       	}
       	else	{
    			if ( volume > 0 ) volume--;
    			if (( JMP1 == 0 )&&( volume > 0 )) volume--;
    			if (( volume < VOL_LO )&&( mode == M_ON_BLINK )) mode = M_OFF_BLINK;
       	} 	
       	if ( JMP2 == 0 ) {
    			if ( ACSR & 0x20 ) mode = M_ON_BLINK;
    			else   			mode = M_OFF_BLINK;
       	}
  	}
  	#asm("wdr")
  };
}

//========================================
void handler_blink(void) {
if ( mode == M_ON_BLINK ) {
   	if ( t_blink ) t_blink--;
   	else {
			t_blink = T_BLINK;
			bit_blink++;
			if ( bit_blink & 1 ) LED = LED_ON;
			else     			LED = LED_OFF;   
   	}
}
else LED = LED_OFF;
}

Share this post


Link to post
Share on other sites

Тоже за пол часа, не больше. Если конечно ЗАРАНЕЕ знать что должна делать программа.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. 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 Вячеслав_НС
      Здравствуйте ! подскажите , какую лучше библиотеку использовать (и где ее взять) для управления i2c atmega8 в atmel studio 7  .  задача - управлять atmega8 по i2c ,  цап  PCF8591T .
      понимаю , в интернете много примеров и библиотек , но хотелось бы пример максимально простой и точно рабочий . т.к. пока что все мои попытки не привели к успеху ... то Atmel Studio 7 при компиляции ругается на несуществующий файл ( к примеру - "stream.h") при использовании библиотеки i2c , то еще какие то грабли .
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • By LegionKC
      Добрый день.
      Экспериментирую с платой TP4056 и MK ATmega8, конкретнее - пытаюсь собрать простенькое зарядное устройство с выводом параметров при зарядке/разрядке на АЦП МК. Для измерения тока нашел ACS712. Думаю, что получится выводить ток при зарядке (т.е. когда идет питание на TP4056 и нагрузка отключена) и при разрядке (питание выключено, нагрузка подключена). Нагрузка - резистор. Возникла проблема с измерением напряжения на АКБ. Вернее, проблема с отсутствием идей как это сделать. Может какую-нибудь схему делителя напряжения нужно сделать? Прошу помочь советом. Схему из пэинта прилагаю.
      Спасибо.
       

    • By Cheshire Cat
      Здравствуйте, только начинаю изучать программирование мк. Я уже задавал этот вопрос в моих прошлых схемах мне отвечали что-то типа "любой стабилизрованый источник постоянного напряжения", или кидали схему такого источника. Можно назвать мне конкретное устройство? В общем то что я смогу забить в гугл и приписать купить. 

      Я уже больше двух месяцев жду пока мне придут с aliexpress детали для маленького лабараторного блока, но этот вариант может разбиться о кривизну моих рук.  Хочу просто купить такой источник и наконец заняться непосредственно МК. 
    • By Cheshire Cat
      Здравствуйте, только начал изучать программирование микроконтроллеров. В учебнике есть схема, но она не учитывает питание и землю. Скажите правильно ли я её дополнил.
      И еще дополнительный вопрос. Что можно использовать как источник постоянного питания на 5В? Из не дорогого и того, что можно купить в Казани. Знаю, что лучший вариант - лабораторный БП, но они дорогие.

×
×
  • Create New...