Добавить форум Lasers.fonarevka.ru в Избранное ×
LASERS.FONAREVKA.RU - Всё о лазерах и лазерной технике  

Вернуться   Форум Lasers.fonarevka.ru > Электроника > Микроконтроллеры
Забыли пароль? Регистрация
Темы с вашим участием Новые сообщения Сообщения за день

  • Бесплатные розыгрыши призов
  • Для гостей форума
  • Пожертвования (Donate)
На форуме ежемесячно проходят бесплатные розыгрыши призов для зарегистрированных и активно общающихся форумчан. Вы можете выиграть не только различные лазерные указки и другое лазерное оборудование, но и фонарики, зарядные устройства, аккумуляторы и другие аксессуары известных брендов, а также фонари и компоненты от известных кастомщиков и мелкосерийных производителей. Также разыгрываются и другие призы, такие как мультитулы, ножи, рюкзаки и другое снаряжение. Все проходящие розыгрыши призов являются действительно абсолютно бесплатными для самих участников, т.к. все расходы берут на себя организаторы (т.е. владельцы данного форума) и сами спонсоры, которые предоставляют тот или иной приз для наших розыгрышей призов. Форумчане не несут никаких имущественных рисков, связанных с участием в данных розыгрышах (т.е. вы ничего не оплачиваете и ничем не рискуете). Вам достаточно нажать кнопку "Принять участие" и ждать результата!

На данный момент проходит 1 розыгрыш призов.

1. Зарядное устройство XTAR XP4 Panzer + 2 аккумулятора Panasonic NCR18650B 3400 мАч

Рекомендуем Вам подписаться на тему (оптимальнее с уведомлением на ваш E-mail), где публикуется информация о новых розыгрышах призов.
Подробная информация по ссылке
Искренне рады видеть Вас на нашем независимом проекте о лазерах и лазерной технике!

Что Вам даст регистрация на нашем проекте:


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

и много других приятных привилегий

Искренне надеемся, что Вам у нас понравится!
Если вы хотите финансово поддержать работу проекта LASERS.FONAREVKA.RU, будем искренне благодарны!
Даже самая малая сумма поможет дальнейшему развитию и прогрессу нашего с вами уже общего проекта.


Ответ
Просмотров в теме 30277   Ответов в теме 149   Подписчиков на тему 0   Добавили в закладки 0
Опции темы
Старый 03.10.2010, 13:51   21
chem_kot
Научный сотрудник
 
Аватар для chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 06:45
Адрес: Екатеринбург
Сообщений: 648
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Зато сравни цену FT232 и рассыпухи+мега8 в том программаторе и как говорится "почувствуй разницу"))
chem_kot вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 14:10   22
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

FT232RL и atmega8-16mu стоят у нас почти одинаково - 8$
Чего там я должен почувствовать?
SviMik вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 14:41   23
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

В Чип и Дипе ATMega8 стоит 450 руб!!!
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 15:25   24
chem_kot
Научный сотрудник
 
Аватар для chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 06:45
Адрес: Екатеринбург
Сообщений: 648
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Хм, странно....мега8 по идее стоит максимум 110руб, я ваще покупал за 80р
в чиде там ваще барыги цены на все накручены как минимум в 2-3раза

[Исправлено: chem_kot, 03.10.2010 в 15:59].
chem_kot вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 15:33   25
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Ребят, нужна помощь: хочу разобраться с работой АЦП на примере "Тестера для литиевых аккумуляторов". В зависимости от напряжения аккумулятора должен загораться определенный светодиод.

Цитата:
#include <built_in.h>
unsigned int adc_rd; // Объявляем переменную. Про это прочитал в хелпах, могу ошибаться. Я так понял переменная Integer, т.е. числовая. Или может нужен другой тип переменной?


void main() {
DDRB.F2 = 0; // Выставляем порт PB2 на вход.

while (1) { // Циклим прогу.
adc_rd = ADC_Read (PORTB.F2); // Считываем информацию с АЦП с порта PB2 в переменную.
}
}
Что делать дальше с этой переменной я не понял. Нужно что-то типа этого алгоритма:

Цитата:
If <напряжение на аккуме меньше 2.75В> then
{
PORTB.F0 = 0;
PORTB.F4 = 0; // Выключаем все светодиоды, кроме этого.
DDRB.F3 = 1; // Порт на выход.
PORTB.F3 = 1; // Включаем этот светодиод.
}
If <напряжение на аккуме равно 3В> then
{
PORTB.F3 = 0;
PORTB.F4 = 0; // Выключаем все светодиоды, кроме этого.
DDRB.F0 = 1; // Порт на выход.
PORTB.F0 = 1; // Включаем этот светодиод.
}
If <напряжение на аккуме больше 3В> then
{
PORTB.F0 = 0;
PORTB.F3 = 0; // Выключаем все светодиоды, кроме этого.
DDRB.F4 = 1; // Порт на выход.
PORTB.F4 = 1; // // Включаем этот светодиод.
}
}

Контроллер ATTiny13. Язык - C.
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 15:43   26
chem_kot
Научный сотрудник
 
Аватар для chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 06:45
Адрес: Екатеринбург
Сообщений: 648
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Вот статья, после прочтения которой отпадут многие вопросы
http://chipenable.ru/index.php/progr...asy-start.html
chem_kot вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 16:14   27
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от chem_kot :
Вот статья, после прочтения которой отпадут многие вопросы
http://chipenable.ru/index.php/progr...asy-start.html

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


Вот код:

Цитата:
#include <built_in.h>
unsigned int adc_rd;

void main() {

DDRB = 0xFF; // Set PORTB as output
DDRC = 0xFF; // Set PORTC as output

while (1) {
adc_rd = ADC_Read(2); // get ADC value from 2nd channel - что значит цифра 2 и откуда он ее взял? Я так понял это номер порта.
PORTB = adc_rd; // display adc_rd[7..0] - что за цифры - 7-0?
PORTC = Hi(adc_rd); // display adc_rd[9..8]
}
}
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 16:38   28
chem_kot
Научный сотрудник
 
Аватар для chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 06:45
Адрес: Екатеринбург
Сообщений: 648
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Цифра 2 - это канал АЦП(у МК их всего 8 вроде), цифры 7-0 это биты данных
Этот код скорее всего работать не будет, т.к . не объявлена функция ADC_Read и не произведена инициализация АЦП


ЗЫ а что за компилятор?

[Исправлено: chem_kot, 03.10.2010 в 16:47].
chem_kot вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 16:51   29
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от chem_kot :
Цифра 2 - это канал АЦП(у МК их всего 8 вроде), цифры 7-0 это биты данных
Этот код скорее всего работать не будет, т.к . не объявлена функция ADC_Read и не произведена инициализация АЦП


ЗЫ а что за компилятор?

Компилятор MicroC Pro.
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 16:54   30
chem_kot
Научный сотрудник
 
Аватар для chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 06:45
Адрес: Екатеринбург
Сообщений: 648
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Не слышал о таком...лучше сразу изучайте IAR/WinAVR+AVR Studio или на худой конец CodeVisionAVR
Возможно этот компилятор сам выполняет инициализацию, но я не думаю что код получается в итоге быстрый и малый... вин авр точно оптимизирует лучше
chem_kot вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 20:49   31
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Кто-нибудь может написать прошивку для вышепреведенной схемы, желательно с комментами? Никак не могу разобраться с АЦП.
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 21:25   32
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Проще комменты отдельно. Самое главное правило - никогда не писать программы "простыней". Если в школе изучали Паскаль, это очень хорошо поможет.

Попробуем мигать одним светодиодом, но сделаем это правильно. Компилятор - gcc (avr-gcc, WinAVR). Светодиод на PORTB.3. Я настоятельно не рекомендую пользоваться такими вещами, как IAR, потому что они сильно не соответствуют стандартам языка Си.
Код:
#include <avr/io.h>

void delay(void) {
    unsigned i;
    for (i = 0; i < 100000; ++i) {
        asm volatile ("nop");
    }
}

int main(void) {
    DDRB |= (1 << 3);
    while(1) {
        PORTB ^= (1 << 3);
        delay();
    }
    return 0;
}
Что здесь происходит. В программе мы используем регистры процессора PORTB и DDRB. Их можно было бы адресовать по прямым адресам, но мы прямых адресов не знаем (и знать не хотим), поэтому используем имена. Имена объявлены в файле avr/io.h, который мы и подключаем:
#include <avr/io.h>

Основная часть программы - функция main(). По стандарту языка Си она должна возвращать значение типа int:
int main(void)
Писать "void main(void)" стандарт запрещает (это наследие UNIX). Работа в main начинается с инициализации. В нашем случае инициализация сводится к одной строчке:
DDRB |= (1 << 3);
Строчка несколько неочевидна для начинающих. На самом деле это установка 3-го (если считать с 0) бита в DDRB. (1 << 3) - это единичка, сдвинутая влево на 3 двоичных разряда, то есть в двоичной системе 00001000. Знак |= обозначает побитовое "или" "на месте" - по аналогии с оператором +=. То есть, эта строчка делает "или" регистра DDRB с числом 00001000, что равноценно установке 3-го бита в 1. Скомпилируется это, разумеется, просто в инструкцию sbi. На некоторых компиляторах такую штуку пишут как DDRB.3 = 1, но на самом деле это строго запрещено стандартом Си и в "нормальных" компиляторах работать не будет. Если не нравится длинная запись - надо использовать функцию.

Далее идет основной цикл:
while (1)
внутри которого меняется бит на противоположный:
PORTB ^= (1 << 3);
Что такое (1 << 3) мы знаем, а ^= - это побитовый XOR. Операция XOR переворачивает бит 3 (тот, что против 1 в правой части) - меняет из 0 в 1 и из 1 в 0 соответственно. Как раз мигание.
Следующей строкой делается задержка:
delay();
Это вызов функции delay, объявленной выше. Сама по себе функция delay не содержит ничего магического - просто длинный цикл for. Тело цикла - оператор asm, вставляющий в код инструкцию nop:
asm volatile ("nop");
Без этой строки компилятор соптимизирует программу - удалит из нее "бесполезный" цикл, чтобы она работала быстрее. Нам это не надо.

Вопросы?

Если тут все ясно, пойдем дальше - будем разбираться с АЦП.
Gall вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 21:51   33
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Gall, ну прям личный репетитор . Не совсем разобрался со знаком "<<" - зачем нужен этот сдвиг? И чем "не правильна" такая мигалка:

Цитата:
void main () {
PORTB.F3 = 0; // Выставляем ноль на выходе порта. F3 - это порт PB3.
DDRB.F3 = 1; // Выставляем порт на выход.

while (1) // Циклим прогу.
{
PORTB.F3 = 1; // Включаем светодиод
Delay_ms (600); // Ждем 600 мСек.
PORTB.F3 = 0; // Выключаем светодиод.
Delay_ms (600);
}
}

[Исправлено: Lum1noFor, 04.10.2010 в 16:45].
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 22:43   34
AVSel
Глобальный модератор
 
Аватар для AVSel
 
Регистрация: 15.02.2010
Последняя активность: 26.05.2019 19:08
Адрес: Москва
Сообщений: 3138
Сказал(а) спасибо: 79
Поблагодарили 107 раз(а) в 76 сообщениях
По умолчанию

PORTB ^= (1 << 3); Стандарная для Си запись ( значение PORTB объявлено в .h файле идущем в комплекте с компилятором).
(1 << 3) то же что 0х08 , но компилятору для битовых операций лучше указывать (1 << 3)


while (1)
{
PORTB.F3 = 1; // Включаем светодиод
Delay_ms (600); // Ждем 600 мСек.
PORTB.F3 = 0; // Выключаем светодиод.
}

PORTB.F3 = 1 - нестандартная запись.
И непонятно, что произойдет ести я напишу например так: PORTB.F3 |= 0x9C;

Кстати светик будет гореть постоянно(почти)

[Исправлено: AVSel, 03.10.2010 в 22:52].
AVSel вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 23:30   35
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от AVSel :
PORTB ^= (1 << 3); Стандарная для Си запись ( значение PORTB объявлено в .h файле идущем в комплекте с компилятором).
(1 << 3) то же что 0х08 , но компилятору для битовых операций лучше указывать (1 << 3)


while (1)
{
PORTB.F3 = 1; // Включаем светодиод
Delay_ms (600); // Ждем 600 мСек.
PORTB.F3 = 0; // Выключаем светодиод.
}

PORTB.F3 = 1 - нестандартная запись.
И непонятно, что произойдет ести я напишу например так: PORTB.F3 |= 0x9C;

Кстати светик будет гореть постоянно(почти)

Действительно, горит постоянно. Вобщем, ни разу я ничего не понимаю. Хотя первая прога с бегущими светодиодами работает...

[Исправлено: Hobbi TV, 03.10.2010 в 23:45].
Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 03:29   36
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Вторую паузу забыл
SviMik вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 10:20   37
Ryazanec
Переводчик
 
Регистрация: 04.05.2010
Последняя активность: 13.03.2019 20:23
Адрес: Рязань
Сообщений: 2389
Сказал(а) спасибо: 6
Поблагодарили 7 раз(а) в 6 сообщениях
По умолчанию

угу как я понял - нужно установить время горения и время когда не горит.
Прошу не пинать я вообще на дельфх только умею, но общие принципы понял из написаного
Ryazanec вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 13:11   38
AVSel
Глобальный модератор
 
Аватар для AVSel
 
Регистрация: 15.02.2010
Последняя активность: 26.05.2019 19:08
Адрес: Москва
Сообщений: 3138
Сказал(а) спасибо: 79
Поблагодарили 107 раз(а) в 76 сообщениях
По умолчанию

Да все так начинали
AVSel вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 14:50   39
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от Lum1noFor :
Кстати, кто-нибудь может посоветовать схеку хорошего програматора? Чтобы шил ATTiny и ATMega.
ЭТУ тему читал?
Можешь кинуть то, что твоя Сишная программа выплюнула после компилирования в ассемблер? Интересно посмотреть на мигалку, написанную на Си, в том виде, в каком она зальётся в МК ...
INFERION вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 16:40   40
Lum1noFor
Модератор
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Адрес: Москва
Сообщений: 874
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 7 сообщениях
По умолчанию

Вобщем, мне нужно учиться С с нуля, а потом уже хвататься за микроконтроллеры... Что такое #define, void и т.д., я не знаю. Буду учить матчасть.


INFERION, вот. Там исходник, HEX-файл и заэмулированная схема в протеусе.
Вложения
Тип файла: rar Migalka.rar (40.0 Кб, 163 просмотров)
Lum1noFor вне форума   Ответить с цитированием Вверх
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекомедации для начинающих AVSel FAQ 59 07.12.2015 13:05
Микроконтроллеры серии STM32 (ARM Cortex M3) INFERION Микроконтроллеры 44 05.12.2012 23:03
Микроконтроллеры PIC и среда разработки MPLAB Lum1noFor Микроконтроллеры 0 15.09.2012 21:50
электроника для начинающих! spartanec Электроника для начинающих 24 16.11.2010 02:48


Текущее время: 23:28. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc. Перевод: zCarot
Template-Modifications by TMS

Copyright ©2010 - 2015, Hobbi.TV & FONAREVKA.RU.

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

При использовании материалов форума ссылка на Lasers.fonarevka.ru обязательна.

Украинский портАл CATALOG.METKA.RU
Каталог webplus.info Каталог сайтов Zabor.com