Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.04.2012, 13:15
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Симуляция не поможет - ни один симулятор (ни AVR-Studio ни Proteus e.t.c.) не показывает, который из каналов включен.
Тут, в первую очередь, была ошибка в коде - при сложении по ИЛИ установленная "1" не сбросится никогда. А ожидание можно и по таймауту организовать... Некрасиво, но работоспособно.
Сообщение от OlegNZH
|
вставив всего 3 строчки
|
...скорее передвинув...
ДДН, старшие биты пишутся слева, младшие справа. Постарайтесь сразу выработать читабельный стиль.
|
|
|
|
18.04.2012, 21:03
|
#12
|
Временная регистрация
Регистрация: 20.01.2011
Адрес: Витебск
Сообщений: 38
Сказал спасибо: 6
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Сообщение от omercury
|
ДДН, старшие биты пишутся слева, младшие справа. Постарайтесь сразу выработать читабельный стиль.
|
я так понимаю это вы про эту строчку
ADMUX |= (0 ‹‹ MUX0) |(0 ‹‹ MUX1)|(0 ‹‹ MUX2)|(0 ‹‹ MUX3);
нужно так ADMUX |= (0 ‹‹ MUX3) |(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(0 ‹‹ MUX0);
|
|
|
|
18.04.2012, 21:13
|
#13
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Угу.
Работать-то будет одинаково, но разбираться в таком...
|
|
|
|
19.04.2012, 00:26
|
#14
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Сообщение от ДДН
|
ADMUX |= (0 ‹‹ MUX0) |(0 ‹‹ MUX1)|(0 ‹‹ MUX2)|(0 ‹‹ MUX3);
|
А зачем эти пляски с Муксом Меги8?
В этом регистре находятся еще два бита выбора опорного. Надеюсь, их можно определить как константу, вы же не будете во время выполнения менять опору? Там же есть бит выравнивания. Тоже вполне себе константа.
А биты номера канала - младшие биты этого регистра.
Вполне достаточно определить один раз
Код:
|
#define EXTRA_BITS 0xC0 + 0x20 // REFS=3 + ADLAR=1 |
А выбор номера канала выполнять без лишних OR-ов
Код:
|
ADMUX = EXTRA_BITS + Channel; // Где Channel имеет реальный номер канала. |
Если выбор опорного и бит выравнивания равны нулю, то тогда можно прямо использовать номер канала. Так ведь проще?
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
19.04.2012, 00:44
|
#15
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Это опять история про читабельность кода. Я для себя вообще часто константами хексовыми забиваю,зато потом через год бошку ломаю,опять по битам расписываю...А оно это надо? (Тем более код выложен на всеобщее обсуждение)
|
|
|
|
19.04.2012, 00:52
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Сообщение от OlegNZH
|
Это опять история про читабельность кода. Я для себя вообще часто константами хексовыми забиваю,зато потом через год бошку ломаю,опять по битам расписываю...А оно это надо? (Тем более код выложен на всеобщее обсуждение)
|
Да что там по битам расписывать? Порядковый номер канала? А опора и выравнивание - это ж ведь два слова в каменте... И хоть через столетия все будет ясно.
Впрочем, к собственно программированию это отношения не имеет. Стиль, читабельность - все это околопрограммное. Суть ошибки указали коллеге, а это главное. А понравится кому мой стиль, или стиль другого - малосущественно. Мы-то понимаем друг друга...
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
19.04.2012, 01:00
|
#17
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Консенсус достигнут? Кстати стиль программирования достаточно важен (я вот безобразно пишу,сам над собой издеваюсь) И даже вот этот случай ,с мультиплексором- куча программ с АЦП,всегда по-разному делаю (ненавижу себя!) ,хотя чего проще- взять стандарт из даташита (там настолько всё вылизано,разработчики постарались) и принять через силу за основу. (Просто дифайны тоже через год-два забудутся,и придётся освежать в памяти)
|
|
|
|
19.04.2012, 10:17
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Сообщение от OlegNZH
|
Просто дифайны тоже через год-два забудутся
|
Вот образчик, чему тут забываться? Для другого МК правда. И Асм...
PHP код:
|
.equ ADCin = 0b00100011 ;AREF=Vcc(00), Левая привязка(b5 - 1) Вход - ADC3(b3-0 - 011)
|
Придут ещё и дефайны и макросы. Да и нормально здесь ещё. Вон в соседней ветке каша и в голове и в коде.
|
|
|
|
19.04.2012, 10:46
|
#19
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Два канала АЦП Atmega8
ТОгда уж дальше идти,не останавливаясь
#define OPEN_CAN(Can) (ADMUX = 0xC0 + 0x20 + Can) // REFS=3 + ADLAR=1 +Can
...
OPEN_CAN(1);
...
("Ученого переучивать..." себе дороже бывает,если годами стиль вырабатывается.Другое дело изначально привыкать)
|
|
|
|
19.04.2012, 11:25
|
#20
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Два канала АЦП Atmega8
Сообщение от OlegNZH
|
#define OPEN_CAN(Can) (ADMUX = 0xC0 + 0x20 + Can) // REFS=3 + ADLAR=1 +Can
|
А вот в каментах я люблю себя на потом
Код:
|
#define OPEN_CAN(Can) (ADMUX = 0xC0 + 0x20 + Can) // Внешняя опора N вольт, равнение влево, номер канала |
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
ЦАП токовый, 4...20мА, два канала
|
ua_gruzin |
Микроконтроллеры, АЦП, память и т.д |
43 |
20.09.2012 11:34 |
Из 1 канала 0-5в получить 2 канала 0-5в и добавить deadtime
|
0day |
TTL и CMOS логика |
10 |
05.03.2011 22:20 |
АЦП ATmega8
|
ewgen404 |
Микроконтроллеры, АЦП, память и т.д |
20 |
24.11.2010 20:18 |
USB АЦП на ATmega16 переделать на ATmega8
|
98mildg1 |
Микроконтроллеры, АЦП, память и т.д |
12 |
25.09.2010 20:29 |
Проблема с прерыванием от АЦП, Atmega8
|
R-a-v-e-n |
Микроконтроллеры, АЦП, память и т.д |
11 |
24.06.2009 14:12 |
Часовой пояс GMT +4, время: 06:51.
|
|