|
|
|
|
49192 149 0 0 |
|
Опции темы | Поиск в этой теме |
03.10.2010, 13:51 | 21 |
Завсегдатай Фонарёвки
|
Зато сравни цену FT232 и рассыпухи+мега8 в том программаторе и как говорится "почувствуй разницу"))
|
03.10.2010, 14:10 | 22 |
Завсегдатай Фонарёвки
|
FT232RL и atmega8-16mu стоят у нас почти одинаково - 8$
Чего там я должен почувствовать? |
03.10.2010, 14:41 | 23 |
Увлеченный
|
В Чип и Дипе ATMega8 стоит 450 руб!!!
|
03.10.2010, 15:25 | 24 |
Завсегдатай Фонарёвки
|
Хм, странно....мега8 по идее стоит максимум 110руб, я ваще покупал за 80р
в чиде там ваще барыги цены на все накручены как минимум в 2-3раза |
03.10.2010, 15:33 | 25 | ||
Увлеченный
|
Ребят, нужна помощь: хочу разобраться с работой АЦП на примере "Тестера для литиевых аккумуляторов". В зависимости от напряжения аккумулятора должен загораться определенный светодиод.
Цитата:
Цитата:
Контроллер ATTiny13. Язык - C. |
||
03.10.2010, 15:43 | 26 |
Завсегдатай Фонарёвки
|
Вот статья, после прочтения которой отпадут многие вопросы
http://chipenable.ru/index.... |
03.10.2010, 16:14 | 27 | ||
Увлеченный
|
Цитата:
Спасибо, но там, мне кажется, что автор наворотил много лишнего, чего я не понимаю. Вот схема и код из хелпа, с которым я хочу разобраться: Вот код: Цитата:
|
||
03.10.2010, 16:38 | 28 |
Завсегдатай Фонарёвки
|
Цифра 2 - это канал АЦП(у МК их всего 8 вроде), цифры 7-0 это биты данных
Этот код скорее всего работать не будет, т.к . не объявлена функция ADC_Read и не произведена инициализация АЦП ЗЫ а что за компилятор? |
03.10.2010, 16:51 | 29 |
Увлеченный
|
|
03.10.2010, 16:54 | 30 |
Завсегдатай Фонарёвки
|
Не слышал о таком...лучше сразу изучайте IAR/WinAVR+AVR Studio или на худой конец CodeVisionAVR
Возможно этот компилятор сам выполняет инициализацию, но я не думаю что код получается в итоге быстрый и малый... вин авр точно оптимизирует лучше |
03.10.2010, 20:49 | 31 |
Увлеченный
|
Кто-нибудь может написать прошивку для вышепреведенной схемы, желательно с комментами? Никак не могу разобраться с АЦП.
|
03.10.2010, 21:25 | 32 |
Увлеченный
Регистрация: 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; } #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"); Без этой строки компилятор соптимизирует программу - удалит из нее "бесполезный" цикл, чтобы она работала быстрее. Нам это не надо. Вопросы? Если тут все ясно, пойдем дальше - будем разбираться с АЦП. |
03.10.2010, 21:51 | 33 | |
Увлеченный
|
Gall, ну прям личный репетитор . Не совсем разобрался со знаком "<<" - зачем нужен этот сдвиг? И чем "не правильна" такая мигалка:
Цитата:
|
|
03.10.2010, 22:43 | 34 |
Ветеран Фонарёвки
Регистрация: 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; Кстати светик будет гореть постоянно(почти) |
03.10.2010, 23:30 | 35 |
Увлеченный
|
Цитата:
Действительно, горит постоянно. Вобщем, ни разу я ничего не понимаю. Хотя первая прога с бегущими светодиодами работает... |
04.10.2010, 03:29 | 36 |
Завсегдатай Фонарёвки
|
Вторую паузу забыл
|
04.10.2010, 10:20 | 37 |
Ветеран Фонарёвки
|
угу как я понял - нужно установить время горения и время когда не горит.
Прошу не пинать я вообще на дельфх только умею, но общие принципы понял из написаного |
04.10.2010, 13:11 | 38 |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18
Сообщений: 1090
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Да все так начинали
|
04.10.2010, 14:50 | 39 | |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36
Сообщений: 1362
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
Цитата:
Можешь кинуть то, что твоя Сишная программа выплюнула после компилирования в ассемблер? Интересно посмотреть на мигалку, написанную на Си, в том виде, в каком она зальётся в МК ... |
|
04.10.2010, 16:40 | 40 |
Увлеченный
|
Вобщем, мне нужно учиться С с нуля, а потом уже хвататься за микроконтроллеры... Что такое #define, void и т.д., я не знаю. Буду учить матчасть.
INFERION, вот. Там исходник, HEX-файл и заэмулированная схема в протеусе. |