|  | 
| 
 | ||||||||
|     | 
 | 
|  |  80525  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   | 
| Завсегдатай Фонарёвки |   | 
|   |     | 
|  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 
					Сообщений: 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"); Без этой строки компилятор соптимизирует программу - удалит из нее "бесполезный" цикл, чтобы она работала быстрее. Нам это не надо. Вопросы? Если тут все ясно, пойдем дальше - будем разбираться с АЦП. | 
|   |     | 
|  03.10.2010, 21:51   |  33   | |
| Увлеченный |   
			
			Gall, ну прям личный репетитор   . Не совсем разобрался со знаком "<<" - зачем нужен этот сдвиг? И чем "не правильна" такая мигалка: Цитата: 
 | |
|   |     | 
|  03.10.2010, 22:43 |  34   | 
| Ветеран Фонарёвки Регистрация: 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; Кстати светик будет гореть постоянно(почти)   | 
|   |     | 
|  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 
					Сообщений: 1034
 Сказал(а) спасибо: 0 
		
			
				Поблагодарили: 0 раз(а) в 0 сообщениях
			
		
	 |   
			
			Да все так начинали   | 
|   |     | 
|  04.10.2010, 14:50 |  39   | |
| Ветеран Фонарёвки Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36 
					Сообщений: 1342
 Сказал(а) спасибо: 0 
		
			
				Поблагодарили: 0 раз(а) в 0 сообщениях
			
		
	 |   Цитата: Можешь кинуть то, что твоя Сишная программа выплюнула после компилирования в ассемблер? Интересно посмотреть на мигалку, написанную на Си, в том виде, в каком она зальётся в МК  ... | |
|   |     | 
|  04.10.2010, 16:40   |  40   | 
| Увлеченный |   
			
			Вобщем, мне нужно учиться С с нуля, а потом уже хвататься за микроконтроллеры... Что такое #define, void и т.д., я не знаю. Буду учить матчасть. INFERION, вот. Там исходник, HEX-файл и заэмулированная схема в протеусе. | 
|   |     |