Светодиодные фонари и световые приборы. Всё о светотехнике.
Изображения Дневники Группы Поиск
Вернуться   Форум FONAREVKA.RU Лаборатория Электроника и схемотехника Электроника Микроконтроллеры
Расширенный поиск
Забыли пароль? Регистрация

  • О нашем проекте
  • Светотехника и световые приборы
  • Правила форума
Проект FONAREVKA.RU специализируется на предоставлении всей необходимой информации по светотехнике:

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

Если у вас есть вопросы по выбору фонарей, аккумуляторов и зарядных устройств ознакомьтесь с FAQ от наших экспертов:

F.A.Q. по выбору фонарей различных типов;
F.A.Q. по выбору аккумуляторов;
F.A.Q. по выбору зарядных устройств.
Ответ  Создать новую тему
Просмотров в теме 49192   Ответов в теме 149   Подписчиков на тему 0   Добавили в закладки 0
Опции темы Поиск в этой теме
Старый 03.10.2010, 13:51   21
lasers_chem_kot
Завсегдатай Фонарёвки
 
Аватар для lasers_chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 05:45
Сообщений: 522
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_chem_kot с помощью ICQ
По умолчанию

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

Отправить сообщение для SviMik с помощью ICQ Отправить сообщение для SviMik с помощью MSN
По умолчанию

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

Отправить сообщение для lasers_Lum1noFor с помощью ICQ
По умолчанию

В Чип и Дипе ATMega8 стоит 450 руб!!!
lasers_Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 15:25   24
lasers_chem_kot
Завсегдатай Фонарёвки
 
Аватар для lasers_chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 05:45
Сообщений: 522
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_chem_kot с помощью ICQ
По умолчанию

Хм, странно....мега8 по идее стоит максимум 110руб, я ваще покупал за 80р
в чиде там ваще барыги цены на все накручены как минимум в 2-3раза
lasers_chem_kot вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 15:33 Автор темы   25
lasers_Lum1noFor
Увлеченный
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Сообщений: 482
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_Lum1noFor с помощью ICQ
По умолчанию

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

Цитата:
#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.
lasers_Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 15:43   26
lasers_chem_kot
Завсегдатай Фонарёвки
 
Аватар для lasers_chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 05:45
Сообщений: 522
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_chem_kot с помощью ICQ
По умолчанию

Вот статья, после прочтения которой отпадут многие вопросы
http://chipenable.ru/index....
lasers_chem_kot вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 16:14 Автор темы   27
lasers_Lum1noFor
Увлеченный
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Сообщений: 482
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_Lum1noFor с помощью ICQ
По умолчанию

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

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


Вот код:

Цитата:
#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]
}
}
lasers_Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 16:38   28
lasers_chem_kot
Завсегдатай Фонарёвки
 
Аватар для lasers_chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 05:45
Сообщений: 522
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_chem_kot с помощью ICQ
По умолчанию

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


ЗЫ а что за компилятор?
lasers_chem_kot вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 16:51 Автор темы   29
lasers_Lum1noFor
Увлеченный
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Сообщений: 482
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_Lum1noFor с помощью ICQ
По умолчанию

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


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

Компилятор MicroC Pro.
lasers_Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 16:54   30
lasers_chem_kot
Завсегдатай Фонарёвки
 
Аватар для lasers_chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 05:45
Сообщений: 522
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_chem_kot с помощью ICQ
По умолчанию

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

Отправить сообщение для lasers_Lum1noFor с помощью ICQ
По умолчанию

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

По умолчанию

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

Попробуем мигать одним светодиодом, но сделаем это правильно. Компилятор - 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
lasers_Lum1noFor
Увлеченный
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Сообщений: 482
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_Lum1noFor с помощью ICQ
По умолчанию

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);
}
}
lasers_Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 22:43   34
lasers_AVSel
Ветеран Фонарёвки
 
Аватар для lasers_AVSel
 
Регистрация: 15.02.2010
Последняя активность: 05.09.2022 18:18
Сообщений: 1090
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

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;

Кстати светик будет гореть постоянно(почти)
lasers_AVSel вне форума   Ответить с цитированием Вверх
Старый 03.10.2010, 23:30 Автор темы   35
lasers_Lum1noFor
Увлеченный
 
Регистрация: 14.02.2010
Последняя активность: 25.11.2018 13:03
Сообщений: 482
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_Lum1noFor с помощью ICQ
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от 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;

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

Действительно, горит постоянно. Вобщем, ни разу я ничего не понимаю. Хотя первая прога с бегущими светодиодами работает...
lasers_Lum1noFor вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 03:29   36
SviMik
Завсегдатай Фонарёвки
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 18:47
Сообщений: 810
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для SviMik с помощью ICQ Отправить сообщение для SviMik с помощью MSN
По умолчанию

Вторую паузу забыл
SviMik вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 10:20   37
lasers_Ryazanec
Ветеран Фонарёвки
 
Регистрация: 04.05.2010
Последняя активность: 15.11.2019 11:47
Сообщений: 1409
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_Ryazanec с помощью ICQ
По умолчанию

угу как я понял - нужно установить время горения и время когда не горит.
Прошу не пинать я вообще на дельфх только умею, но общие принципы понял из написаного
lasers_Ryazanec вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 13:11   38
lasers_AVSel
Ветеран Фонарёвки
 
Аватар для lasers_AVSel
 
Регистрация: 15.02.2010
Последняя активность: 05.09.2022 18:18
Сообщений: 1090
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Да все так начинали
lasers_AVSel вне форума   Ответить с цитированием Вверх
Старый 04.10.2010, 14:50   39
lasers_INFERION
Ветеран Фонарёвки
 
Аватар для lasers_INFERION
 
Регистрация: 15.02.2010
Последняя активность: 24.08.2019 11:36
Сообщений: 1362
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

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

Отправить сообщение для lasers_Lum1noFor с помощью ICQ
По умолчанию

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


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





Copyright ©2007 - 2024, FONAREVKA.RU

Powered by vBulletin®
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot

Правила форума | Отказ от ответственности

Время генерации страницы 0.12675 секунды с 17 запросами