|
|
![]() ![]() |
|
|
![]() ![]() ![]() ![]() |
|
Опции темы | Поиск в этой теме |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]()
Зато сравни цену FT232 и рассыпухи+мега8 в том программаторе и как говорится "почувствуй разницу"))
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]()
FT232RL и atmega8-16mu стоят у нас почти одинаково - 8$
Чего там я должен почувствовать? ![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Увлеченный
|
![]()
В Чип и Дипе ATMega8 стоит 450 руб!!!
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]()
Хм, странно....мега8 по идее стоит максимум 110руб, я ваще покупал за 80р
в чиде там ваще барыги цены на все накручены как минимум в 2-3раза |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
||
Увлеченный
|
![]()
Ребят, нужна помощь: хочу разобраться с работой АЦП на примере "Тестера для литиевых аккумуляторов". В зависимости от напряжения аккумулятора должен загораться определенный светодиод.
Цитата:
Цитата:
Контроллер ATTiny13. Язык - C. |
||
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
|
Увлеченный
|
![]() Спасибо, но там, мне кажется, что автор наворотил много лишнего, чего я не понимаю. Вот схема и код из хелпа, с которым я хочу разобраться: ![]() Вот код: Цитата:
|
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]()
Цифра 2 - это канал АЦП(у МК их всего 8 вроде), цифры 7-0 это биты данных
Этот код скорее всего работать не будет, т.к . не объявлена функция ADC_Read и не произведена инициализация АЦП ЗЫ а что за компилятор? |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Увлеченный
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]()
Не слышал о таком...лучше сразу изучайте IAR/WinAVR+AVR Studio или на худой конец CodeVisionAVR
Возможно этот компилятор сам выполняет инициализацию, но я не думаю что код получается в итоге быстрый и малый... вин авр точно оптимизирует лучше |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Увлеченный
|
![]()
Кто-нибудь может написать прошивку для вышепреведенной схемы, желательно с комментами? Никак не могу разобраться с АЦП.
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 21.06.2010 Последняя активность: 01.08.2015 23:26
Сообщений: 179
Сказал(а) спасибо: 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; } #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, ну прям личный репетитор
![]() Цитата:
|
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18
Сообщений: 1034
Сказал(а) спасибо: 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; Кстати светик будет гореть постоянно(почти) ![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Увлеченный
|
![]() Цитата:
Действительно, горит постоянно. Вобщем, ни разу я ничего не понимаю. ![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]()
Вторую паузу забыл
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
|
![]()
угу как я понял - нужно установить время горения и время когда не горит.
Прошу не пинать я вообще на дельфх только умею, но общие принципы понял из написаного ![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18
Сообщений: 1034
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
Да все так начинали
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36
Сообщений: 1342
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]() Цитата:
Можешь кинуть то, что твоя Сишная программа выплюнула после компилирования в ассемблер? Интересно посмотреть на мигалку, написанную на Си, в том виде, в каком она зальётся в МК ![]() |
|
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Увлеченный
|
![]()
Вобщем, мне нужно учиться С с нуля, а потом уже хвататься за микроконтроллеры... Что такое #define, void и т.д., я не знаю. Буду учить матчасть.
INFERION, вот. Там исходник, HEX-файл и заэмулированная схема в протеусе. |
![]() |
![]() ![]() |