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

Видеокурс по AVR-микроконтроллерам для начинающих


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

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

Видеоуроки, разумеется, не смотрел, но могу предположить что ADC - регистровая пара ADCH:ADCL, кои описаны в даташите на контроллер.

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

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

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

  • 3 месяца спустя...

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

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

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

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

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

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

Вот:

#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>

    

void set(){
    DDRB = 0xFF;
    DDRD = 0xFF;
    PORTD = 0x00;
    DDRC = 0x00;
    PORTC = 0x00;
    PORTB = 0b00000001;
}
int main(void)
{
    set();
    int t=0,i=0;
    int e=0b00000001;
   do
    {
        if (PINC&(1<<PC0))
        {
            i=i+1;    
            PORTB=(e << i);
            _delay_ms(100);
        }
        else {
        if (PINC&(1<<PC1))
        {
            e=(e << i);
            i=i-1;
            PORTB=(e >> i);
            _delay_ms(100);
        }
        }
    }
         while(1);
    }
 

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

Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

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

Допустим, сразу при включении нажата кнопка PC1. Первая же итерация:

e =(e<<i) = (1<<0) = 1
i = i-1 = 0-1 = -1;
PORTB = (e>>i) = (1>>-1) - что тут произойдет зависит от компилятора. Скорее всего, PORTB = 0;

Как вы вообще такое изобрели? Может проще было завести массив с возможными значениями и перебирать индексы?

const uint8_t values[8] = {(1<<0), (1<<1), (1<<2), (1<<3), (1<<4), (1<<5), (1<<6), (1<<7)};
uint8_t counter=0;
#define BTN_INC C,0,0
#define BTN_DEC C,1,0

while(1){
  if( PIN_ON( BTN_INC ) ){
    counter++;
  }else if( PIN_ON( BTN_DEC ) ){
    counter--;
  }
  if(counter >= 8)counter = 0; //поскольку тип беззнаковый, проверять на отрицательность не надо
  PORTB = values[counter];
  _delay_ms(100);
}

 

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

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

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

1. Сделал бы функцию rotete_left(uint8_t *state); которая двигает огонек на порту влево
2. Сделал бы функцию rotate_right(uint8_t *state); которая двигает огонек на порту вправо
3. Определил бы переменную состояния огонька, адрес которой затем передавал бы в вышеописанные функции
4. Сделал бы функцию get_button(void); которая возвращала бы номер нажатой кнопки
И в итоге получилось бы такое:

uint8_t state = 1;

while(1){
  switch(get_button()){
    case 0 : // не нажато
      	break;
    case 1: // влево
      	rotete_left(&state);
      	break;
    case 2: // вправо
      	rotete_right(&state);
      	break;
  }
}

Гораздо понятнее, чем сразу "сырой" код писать, не так ли? Я умышленно не раскрыл функции, т.к. это уже второстепенное дело. Да и макросами можно заменить их при желании...

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

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

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

Здравствуйте, вчера сидел до вечера и сегодня утром посидел и понял!

Вот как я сделал: 

#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>

    

void set(){
    DDRB = 0xFF;
    DDRD = 0xFF;
    PORTD = 0x00;
    DDRC = 0x00;
    PORTC = 0x00;
    PORTB = 0b00000001;
}
int main(void)
{
    set();
    int t=0,i=0,g=0;
    int e=PORTB;
   do
    {
        if (PINC&(1<<PC0))
        {
            if (PORTB>=0b00010000)
            {
            PORTB=0b00010000;
            }
                    i=1;
                    PORTB=(PORTB << i);
                    _delay_ms(100);
        }
        if (PINC&(1<<PC1))
        {    
            g=1;
            PORTB=(PORTB >> g);
            _delay_ms(100);    
    
        }
    }
         while(1);
    }

Но все равно спасибо вам за инфу.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Не будет работать. Нажмите на любую кнопку больше 7 раз - что будет?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

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

В протеусе все работает сколько бы кнопку не нажимал.

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

Всем привет!

Вопрос по уроку №3.

Поясните по выбору номиналов токоограничивающих резисторов, плиз. Напряжение - 5 вольт. Потребление 1 светодиода примерно 20 мА. Итого, падение напряжения на резисторе 220 Ом будет равняться 4,4 В. Т. е. светодиоду останется 0,6 В. Он от такого напряжения зажжется?

Или не так?

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

2 часа назад, goodkote сказал:

Всем привет!

Вопрос по уроку №3.

Поясните по выбору номиналов токоограничивающих резисторов, плиз. Напряжение - 5 вольт. Потребление 1 светодиода примерно 20 мА. Итого, падение напряжения на резисторе 220 Ом будет равняться 4,4 В. Т. е. светодиоду останется 0,6 В. Он от такого напряжения зажжется?

Или не так?

Разобрался. Ток потребления светодиода в данном случае - 10 мА. Так что все ОК.

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

  • 1 месяц спустя...

Здравствуйте. Подскажите где найти ПОЛНОЦЕННУЮ версию Avr (Atmel) Studio 6. Два раза устанавливал и оба раза она не запускалась, выдавалось сообщение: не установлены какие-то компоненты.

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

@RA3DTI  ,  версия студии полноценная , это винда у вас не полноценная , читайте каких компонентов не хватает , устанавливайте с сайта майкрософт . Да зачем вам 6 студия , когда есть 7-ая , практически все один в один .

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

12 часа назад, DmitryS сказал:

@RA3DTI  , ....... Да зачем вам 6 студия , когда есть 7-ая , практически все один в один .

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

 

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

  • 3 недели спустя...

Жалко, что тема видимо скоро совсем умрет! А как хотелось бы на основе полученных знаний сделать какой-либо блок питания с многофункциональным дисплеем, чтобы он кроме своей точности еще и выглядел стильно!!! Типа такого.

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

Пример.jpg

NokiaDisplay.zip

Изменено пользователем gogaze
Добавление файлов

Мир не без добрых людей!

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

Тема то не умрет, главное чтоб у тебя не пропало желание далее изучать мир МК.

А чем тебя не устраивает библиотека, которая использовалась в видеокурсе?

Если тебе нужен как на скрине большой и узкий шрифт(5х14), то в файле n5110.c ищем функцию - byte LcdChr ( LcdFontSize size, byte ch ) и закомментируем пару строчек:

            // Копируем две части в кэш
            LcdCache[tmpIdx++] = b1;
//            LcdCache[tmpIdx++] = b1;
//            LcdCache[tmpIdx + 82] = b2;
            LcdCache[tmpIdx + 83] = b2; 

там же чуть ниже правим так:

        // Обновляем x координату курсора
        LcdCacheIdx = (LcdCacheIdx + 5) % LCD_CACHE_SIZE;// было 11

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

Вот к примеру знак Ома и Цельсия, как на скрине твоем. В файле n5110.h:

{ 0x5C, 0x62, 0x02, 0x62, 0x5C },   //  0x7B 123 знак Ома вместо "{"
{ 0x01, 0x3C, 0x42, 0x42, 0x42 },   //  0x7D 125 знак Цельсия вместо "}" 

строки с символами: "{" и "}" закомментируем.

Вот мой БП рожденный после просмотра видеокурсов. 9 порогов срабатывания защиты при превышении тока, отключение сработанной защиты ручное или автоматическое. Пока ждал дисплей с алли немного изучил таймер и ШИМ, и прикрутил управление вент. охлаждения через ШИМ 30%, 60% и 100% при определенных температурах с настройкой через меню.

По поводу точности, думаю для БП оно прям суперское и не нужно, для этого существуют специальные приборы. Ну или использовать ОУ типа Rail to Rail MCP604

 

2017-10-13 03.33.33_micro.jpg

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

Огромное спасибо за попытку помочь! Пока наверняка понял только то, что мне еще читать и читать, пробовать и пробовать, чтобы осмыслить и понять! 

Еще раз спасибо!!!

Мир не без добрых людей!

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

Воспользовался твоими рекомендациями, спасибо за реальную помощь!!! Если я правильно понял мы немного изменили отображение шрифта  FONT_2X?

Поэкспериментировал, в протеусе получилось так, как на скрине.

Пока не до конца разобрался с позиционированием "правого" столбца.

Выводил так: 

  //Вольты
        Lcd_printf (0,1,FONT_2X,(readADC(0)*20.00/1023),1);
        Lcd_prints (5,1,FONT_1X,(unsigned char*)PSTR("V"));
   //Ток стабилизации
        Lcd_printf (0,3,FONT_2X,(readADC(1)*10.00/1023),1);
        Lcd_prints (5,3,FONT_1X,(unsigned char*)PSTR("As"));

  //Текущий ток
        Lcd_printf (0,5,FONT_2X,(readADC(2)*10.00/1023),1);
        Lcd_prints (5,5,FONT_1X,(unsigned char*)PSTR("А"));
  //Омы
        Lcd_printf (9,0,FONT_1X,((readADC(0)*20.00/1023)/(readADC(2)*10.00/1023)),1);
        Lcd_prints (15,0,FONT_1X,(unsigned char*)PSTR("{"));
        Lcd_update();

  

2017-10-18_180326.jpg

Изменено пользователем gogaze
Дополнение к тексту

Мир не без добрых людей!

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

Не понел про "правый" столбец.

Если имелось в виду, что при 100Ом затрется знак Ома, то я делал так:

float napryazh, tok, soprotivl; // объявляем глобально (перед функцией main)
...
napryazh =((readADC(1)*2.56*(30/2.56))/1023);
tok =((readADC(2)*2.56*(6/2.56))/1023);
if(tok > 0){
	soprotivl = napryazh / tok;
	if(soprotivl < 1){Lcd_printf(9,1,FONT_1X,soprotivl,2);}
	if(soprotivl >= 1 && soprotivl < 10){Lcd_printf(12,1,FONT_1X,soprotivl,0);}
	if(soprotivl > 9 && soprotivl < 100){Lcd_printf(11,1,FONT_1X,soprotivl,0);}
	if(soprotivl > 99 && soprotivl < 1000){Lcd_printf(10,1,FONT_1X,soprotivl,0);}
	if(soprotivl > 999 && soprotivl < 10000){Lcd_printf(9,1,FONT_1X,soprotivl,0);}
}
else{Lcd_prints(9,1,FONT_1X,(unsigned char*)PSTR("----"));}
Lcd_prints(13,1,FONT_1X,(unsigned char*)PSTR("{"));// знак Ома
...

Еще готовься к тому, что в железе измеренное напряжение будет "плясать" до безобразия, в зависимости от пульсаций БП, сотое значение так вообще "8" будет.

В этом поможет таймер, настраивай на миллисекунд так 60 и по флагу выводи значения на экран каждые 0.5сек. Так же этот таймер пригодится для опроса кнопок, если они планируются.

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

7 часов назад, Berg сказал:

Не понел про "правый" столбец.

С размещением показаний на дисплее немного разобрался (скрин1)

Идею 

7 часов назад, Berg сказал:

то я делал так:

я понял, спасибо, буду иметь ввиду.

7 часов назад, Berg сказал:

в железе измеренное напряжение будет "плясать" до безобразия

Ну там же еще много факторов, которые на это влияют: и конфигурация неиспользуемых портов, и разводка печатной платы, и размещение деталей на ней. С этим я уже сталкивался, когда делал "показометр" для переделанного в лабораторный БП  АТХ.  Только делал в CVAVR на дисплее 1602. Нормально получилось. (скрин2)

7 часов назад, Berg сказал:

В этом поможет таймер, настраивай на миллисекунд так 60 и по флагу выводи значения на экран каждые 0.5сек. Так же этот таймер пригодится для опроса кнопок, если они планируются.

100% согласен! Но до изучения таймеров ни как пока не дойду (со мной внуков трое:4, 6 и 8 лет - особо не разгуляешься).

Еще раз спасибо тебе за полезные советы!  

2017-10-19_090742.jpg

2017-10-19_091611.jpg

Изменено пользователем gogaze
Дополнения к ответу

Мир не без добрых людей!

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

Уважаемый @Berg! Снова обращаюсь с проблемой. Хотел сделать как у тебя

float napryazh, tok, soprotivl; // объявляем глобально (перед функцией main)

napryazh =((readADC(1)*2.56*(30/2.56))/1023);

tok =((readADC(2)*2.56*(6/2.56))/1023);

Для большего удобства в введении дополнительных функций, но проект не стал компилироваться - ошибки типа "конфликт tok," и

"tok =((readADC(2)*2.56*(6/2.56))/1023);"  не константа. В CVAVR это решалось установкой одной галочки "float, width, precision" в свойствах проекта. А в Atmel studio 7 ни как не получается. Все, что нашел в инете перепробовал - ни в какую!

Мир не без добрых людей!

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

@gogaze, старайтесь избегать использования чисел с плавающей точкой. В 90% случаев достаточно фиксированной.

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

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

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

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

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

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

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

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

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

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

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

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

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

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