|
Tiny 2313, АЦП |
|
|
|
Apr 17 2007, 16:01
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 4-02-07
Пользователь №: 25 043

|
Только взялся за BASCOM-AVR. Подскажите как организовать измерение напряжения на встроенном АЦП? Заранее благодарен.
|
|
|
|
|
Apr 17 2007, 16:11
|
Участник

Группа: Новичок
Сообщений: 25
Регистрация: 29-11-05
Из: Донецк
Пользователь №: 11 548

|
В ATiny2313 встроенного ADC отродясь не водилось.
|
|
|
|
|
Apr 17 2007, 16:22
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 4-02-07
Пользователь №: 25 043

|
Понял. Спасибо. А какой МК пойдет? С наименьшей ценой?
|
|
|
|
|
Apr 17 2007, 16:51
|
Участник

Группа: Новичок
Сообщений: 25
Регистрация: 29-11-05
Из: Донецк
Пользователь №: 11 548

|
Цитата(Menen @ Apr 17 2007, 16:22)  Понял. Спасибо. А какой МК пойдет? С наименьшей ценой? Вопрос не полный. Какой частотный диапазон измеряемого сигнала? Какой требуется динамический диапазон? Часто бывает что встроенный ADC проблемы не решает. К сожалению. Что вы собираетесь измерять?
|
|
|
|
|
Apr 17 2007, 17:13
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 4-02-07
Пользователь №: 25 043

|
Необходимо мерять напряжение на аккумуляторе, и в зависимости от напряжение моргать 3 светодиодами.... Т. е. требования минимальны, а вот подходящего кода нийти не мог...
|
|
|
|
|
Apr 17 2007, 17:25
|
Участник

Группа: Новичок
Сообщений: 25
Регистрация: 29-11-05
Из: Донецк
Пользователь №: 11 548

|
Цитата(Menen @ Apr 17 2007, 17:13)  Необходимо мерять напряжение на аккумуляторе, и в зависимости от напряжение моргать 3 светодиодами.... Т. е. требования минимальны, а вот подходящего кода нийти не мог... Тогда пожалуй Tiny13 или Tiny26. Они выпускаются и доступны по цене. Уважаемый Mener, напишите в личное письмо. Попытаюсь помочь
Сообщение отредактировал aai_m - Apr 17 2007, 17:47
|
|
|
|
|
Apr 17 2007, 17:29
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 4-02-07
Пользователь №: 25 043

|
А как включить АЦП, и получать данные о напряжении?
|
|
|
|
|
Apr 17 2007, 19:08
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 16-03-07
Из: Москва
Пользователь №: 26 228

|
Цитата(Menen @ Apr 17 2007, 18:13)  Необходимо мерять напряжение .... А насколько дискретен посчёт напряжения? Если 3 светодиода - это типа уровень напряжения... может 3 компаратора на ОУ дешёвеньких поставить? Типо напряжение в диапазоне 0-12В если 10-12 - все три горят если 7-10 - два если 4-7 - один если 0-4 - ни один не горит - тогда и МК не нужён
--------------------
Быстро, Дёшево, Качественно-выбери любые 2 пункта
|
|
|
|
|
Apr 17 2007, 23:01
|

Частый гость
 
Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575

|
Человек хочет AVR освоить, а вы ему вернуться на аналоговую базу.... Вот код инициализации АЦП для Tiny13: Измеряемое напряжение на вход PB2 (DDR=0) ;блок включения АЦП ldi R16, 0b00000100; выключили цифровой вход PB2 (ADC1) out DIDR0,R16;
ldi R16,0b00100001 ; привязка к 5 в питания, выравнивание "меньше", MUX = 01 - PB2 ввод ; ADLAR=1 - т.е. выравнивание "влево" по ADCH-ADCL (ADCH - 0-255). out ADMUX,R16; ldi R16, 0b11001110; разрешили прерывание, режим одиночного с делением тактовой на 64 out ADCSRA, R16;
И по выполнению преобразования выполнится прерывание от АЦП (внимательно читать даташит - т.е. RTFM).
В обработчике прерывания считываешь ADCH - 0-0вольт, 255 - Vdd на входе. in R16, ADCL; nop nop in R16, ADCH; Обязательно при считывании сначала младший (он нам не нужен), затем - старший.... Считывать данные можно и по флагу окончания преобразования,ИМХО, ждать как-то нехорошо простаивать ресурсы...
|
|
|
|
|
Apr 17 2007, 23:40
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(sadat @ Apr 18 2007, 00:01)  ldi R16,0b00100001 ; привязка к 5 в питания, выравнивание "меньше", MUX = 01 - PB2 ввод ; ADLAR=1 - т.е. выравнивание "влево" по ADCH-ADCL (ADCH - 0-255). .......................................... В обработчике прерывания считываешь ADCH - 0-0вольт, 255 - Vdd на входе. in R16, ADCL; nop nop in R16, ADCH; Обязательно при считывании сначала младший (он нам не нужен), затем - старший.... Считывать данные можно и по флагу окончания преобразования,ИМХО, ждать как-то нехорошо простаивать ресурсы... Раскажите пожалуйста откуда Вы взяли это "Обязательно при считывании сначала младший"В моем даташите написано вот так If the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read ADCH. Otherwise, ADCL must be read first, then ADCH, to ensure that the content of the Data Registers belongs to the same conversion. Once ADCL is read, ADC access to Data Registers is blocked. This means that if ADCL has been read, and a conversion completes before ADCH is read, neither register is updated and the result from the conversion is lost. When ADCH is read, ADC access to the ADCH and ADCL Registers is re-enabled.
|
|
|
|
|
Apr 18 2007, 09:35
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 4-02-07
Пользователь №: 25 043

|
Цитата(sadat @ Apr 18 2007, 00:01)  Человек хочет AVR освоить, а вы ему вернуться на аналоговую базу.... Вот код инициализации АЦП для Tiny13: Измеряемое напряжение на вход PB2 (DDR=0) ;блок включения АЦП ldi R16, 0b00000100; выключили цифровой вход PB2 (ADC1) out DIDR0,R16;
ldi R16,0b00100001 ; привязка к 5 в питания, выравнивание "меньше", MUX = 01 - PB2 ввод ; ADLAR=1 - т.е. выравнивание "влево" по ADCH-ADCL (ADCH - 0-255). out ADMUX,R16; ldi R16, 0b11001110; разрешили прерывание, режим одиночного с делением тактовой на 64 out ADCSRA, R16;
И по выполнению преобразования выполнится прерывание от АЦП (внимательно читать даташит - т.е. RTFM).
В обработчике прерывания считываешь ADCH - 0-0вольт, 255 - Vdd на входе. in R16, ADCL; nop nop in R16, ADCH; Обязательно при считывании сначала младший (он нам не нужен), затем - старший.... Считывать данные можно и по флагу окончания преобразования,ИМХО, ждать как-то нехорошо простаивать ресурсы... Это код бля Баском? Побегу за тини 13...
|
|
|
|
|
Apr 18 2007, 10:39
|

Частый гость
 
Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575

|
MENEN-у - чистый асм - это основа, без которой более "интеллектуальные" языки программирования - фикция (ИМХО). singlskv - считывать младший байт перед считыванием старшего - будь то ADC или 16-ти разрядный таймер - это универсально и стоит использовать всегда (тоже ИМХО) - чтобы не наступать на грабли, когда захочется использовать сдвоенный регистр полностью, а по привычке "сначала старший, затем младший..." Менен-у - извини, просмотрел, что ты хотел BASCOM - а на BASIC (т.е. основа). Но, если быть честным, у меня ушло 5 минут, чтобы найти нужный тебе код в инете... But the ATTiny can do more. It has a 10-bit ADC on pins 1, 2, 3 and 7. An example program to read one ADC channel: readadc.bas 'The ATTiny13 is used. $regfile = "ATtiny13.dat" $crystal = 1200000 Config Portb.2 = Output Led Alias Portb.2 Config Adc = Single , Prescaler = Auto , Reference = Internal Dim Adcin As Word Open "comb.1:9600,8,n,1" For Output As #1 Open "comb.0:9600,8,n,1" For Input As #2 Start Adc Do Set Led Waitms 500 'get adc reading on channel 3 (pin 2 on attiny13) Adcin = Getadc(3) Print #1 , "adc ch#3: " ; Adcin Reset Led Waitms 500 Loop End Ссылка на примеры в BASC-е. http://www.qsl.net/pa3ckr/Откуда часть http://www.qsl.net/pa3ckr/bascom%20and%20a...avrs/index.htmlЖелаю удачи! + Менен-у - вроде как мат на этом форуме не используется (см. посл. сообщение). Аккуратнее...
|
|
|
|
|
Apr 18 2007, 11:02
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 4-02-07
Пользователь №: 25 043

|
Огромное спасибо буду разбираться!!! Описался На одну букву там, должно быть ДЛЯ..... Прикладываю небольшую статью про описки...
Прикрепленные файлы
______.txt ( 2.71 килобайт )
Кол-во скачиваний: 97
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|