реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Tiny 2313, АЦП
Menen
сообщение Apr 17 2007, 16:01
Сообщение #1


Участник
*

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



Только взялся за BASCOM-AVR. Подскажите как организовать измерение напряжения на встроенном АЦП? Заранее благодарен.
Go to the top of the page
 
+Quote Post
aai_m
сообщение Apr 17 2007, 16:11
Сообщение #2


Участник
*

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



В ATiny2313 встроенного ADC отродясь не водилось.
Go to the top of the page
 
+Quote Post
AVR
сообщение Apr 17 2007, 16:13
Сообщение #3


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Menen @ Apr 17 2007, 17:01) *
Только взялся за BASCOM-AVR. Подскажите как организовать измерение напряжения на встроенном АЦП? Заранее благодарен.

Скачал даташит на ATtiny2313: про встроенный АЦП там не упоминается...


--------------------
Go to the top of the page
 
+Quote Post
Menen
сообщение Apr 17 2007, 16:22
Сообщение #4


Участник
*

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



Понял. Спасибо. А какой МК пойдет? С наименьшей ценой?
Go to the top of the page
 
+Quote Post
aai_m
сообщение Apr 17 2007, 16:51
Сообщение #5


Участник
*

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



Цитата(Menen @ Apr 17 2007, 16:22) *
Понял. Спасибо. А какой МК пойдет? С наименьшей ценой?


Вопрос не полный. Какой частотный диапазон измеряемого сигнала? Какой требуется динамический диапазон? Часто бывает что встроенный ADC проблемы не решает. К сожалению. Что вы собираетесь измерять?
Go to the top of the page
 
+Quote Post
Menen
сообщение Apr 17 2007, 17:13
Сообщение #6


Участник
*

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



Необходимо мерять напряжение на аккумуляторе, и в зависимости от напряжение моргать 3 светодиодами.... Т. е. требования минимальны, а вот подходящего кода нийти не мог...
Go to the top of the page
 
+Quote Post
aai_m
сообщение Apr 17 2007, 17:25
Сообщение #7


Участник
*

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



Цитата(Menen @ Apr 17 2007, 17:13) *
Необходимо мерять напряжение на аккумуляторе, и в зависимости от напряжение моргать 3 светодиодами.... Т. е. требования минимальны, а вот подходящего кода нийти не мог...


Тогда пожалуй Tiny13 или Tiny26. Они выпускаются и доступны по цене.

Уважаемый Mener, напишите в личное письмо. Попытаюсь помочь

Сообщение отредактировал aai_m - Apr 17 2007, 17:47
Go to the top of the page
 
+Quote Post
Menen
сообщение Apr 17 2007, 17:29
Сообщение #8


Участник
*

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



А как включить АЦП, и получать данные о напряжении?
Go to the top of the page
 
+Quote Post
rumit2000
сообщение Apr 17 2007, 19:08
Сообщение #9


Частый гость
**

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



Цитата(Menen @ Apr 17 2007, 18:13) *
Необходимо мерять напряжение ....


А насколько дискретен посчёт напряжения? Если 3 светодиода - это типа уровень напряжения... может 3 компаратора на ОУ дешёвеньких поставить? Типо напряжение в диапазоне 0-12В если 10-12 - все три горят если 7-10 - два если 4-7 - один если 0-4 - ни один не горит - тогда и МК не нужён wink.gif


--------------------
Быстро, Дёшево, Качественно-выбери любые 2 пункта
Go to the top of the page
 
+Quote Post
sadat
сообщение Apr 17 2007, 23:01
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 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;
Обязательно при считывании сначала младший (он нам не нужен), затем - старший....
Считывать данные можно и по флагу окончания преобразования,ИМХО, ждать как-то нехорошо простаивать ресурсы...
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2007, 23:40
Сообщение #11


дятел
*****

Группа: Свой
Сообщений: 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;
Обязательно при считывании сначала младший (он нам не нужен), затем - старший....
Считывать данные можно и по флагу окончания преобразования,ИМХО, ждать как-то нехорошо простаивать ресурсы...

Раскажите пожалуйста откуда Вы взяли это "Обязательно при считывании сначала младший"

В моем даташите написано вот так smile.gif

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.
Go to the top of the page
 
+Quote Post
Menen
сообщение Apr 18 2007, 09:35
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 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...
Go to the top of the page
 
+Quote Post
sadat
сообщение Apr 18 2007, 10:39
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 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

Желаю удачи!

+ Менен-у - вроде как мат на этом форуме не используется (см. посл. сообщение). Аккуратнее...
Go to the top of the page
 
+Quote Post
Menen
сообщение Apr 18 2007, 11:02
Сообщение #14


Участник
*

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



Огромное спасибо буду разбираться!!! cheers.gif

Описался На одну букву там, должно быть ДЛЯ..... Прикладываю небольшую статью про описки...
Прикрепленные файлы
Прикрепленный файл  ______.txt ( 2.71 килобайт ) Кол-во скачиваний: 97
 
Go to the top of the page
 
+Quote Post
Menen
сообщение Apr 18 2007, 14:25
Сообщение #15


Участник
*

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



Еще раз спасибо. Разбираюсь... Чет немогу отредактировать сообщение с ругательством.... unsure.gif

Сообщение отредактировал Menen - Apr 18 2007, 14:29
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 02:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01501 секунд с 7
ELECTRONIX ©2004-2016