Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 21.04.2011, 12:09  
Uragan90
Почётный гражданин KAZUS.RU
 
Аватар для Uragan90
 
Регистрация: 20.09.2009
Сообщений: 1,899
Сказал спасибо: 470
Сказали Спасибо 408 раз(а) в 255 сообщении(ях)
Uragan90 на пути к лучшему
По умолчанию АЦП AT91sam7s256

Здравствуйте, уважаемые!!! Повесил я кнопочки на ацп мк через рез.делитель и пытаюсь выводить на экран значения АЦП преобразования, материал доётся очень сложно, дело в том что не знаю на сколько правильно настроил ацп и его инициализирую Ниже код:
Ошибок вроде как компилятор и не выдает, а выводится на экран не как не хочит... Может я напутал чего??? помогите разобраться...

PHP код:
#include ‹AT91SAM7S256.H›



const unsigned int Upit_mV 3298//напряжение питания в мВ (точное значение)


unsigned int data=0;     //результат АЦП в дискретах
unsigned int data_mV=0;     //результат АЦП в мВ 


unsigned int r1000=0;   //-----------------------------------
unsigned int r100=0;    // разряды десятичного числа
unsigned int r10=0;     //
unsigned int r1=0;      //-----------------------------------


              
void adc_init (void);                                  // Функция инициализации ADC
unsigned short int adc_read (unsigned char channel);   // функция запуска и получения результата ADC



/*
//-------------------------------------------------------------------------------
//--- Функция инициализации ADC -------------------------------------------------
//-------------------------------------------------------------------------------
*/

void adc_init (void)
{

    
AT91C_BASE_PMC-›PMC_PCER ‹‹ AT91C_ID_ADC;
    
AT91C_BASE_ADC-›ADC_CR AT91C_ADC_SWRST;       // Очистка результата АЦП
    
AT91C_BASE_ADC-›ADC_IDR 0xffffffff;           // Отключаем прерывания АЦП
    
AT91C_BASE_ADC-›ADC_MR 0;                     // Очищаем регистр

    
AT91C_BASE_ADC-›ADC_MR =                        // Задание параметров АЦП
        
(AT91C_ADC_SLEEP                 
        
| ((23 ‹‹ 8) & AT91C_ADC_PRESCAL)           // Такт АЦП ~= 1MHz
        
| ((‹‹ 16) & AT91C_ADC_STARTUP)           // Время запуска ~= 1us
        
| ((‹‹ 24) & AT91C_ADC_SHTIM));

}
 
/*
//--------------------------------------------------------------------------
//--- функция запуска и получения результата ADC  --------------------------
//--- (входной параметр - активный канал АЦП)     --------------------------
//--------------------------------------------------------------------------
*/

unsigned short int adc_read (unsigned char channel)
{
    
unsigned int data;


    
AT91C_BASE_ADC-›ADC_CHDR 0xffffffff;                          // Выключаем все каналы АЦП
    
AT91C_BASE_ADC-›ADC_CHER = (unsigned long int) (‹‹ channel);  // Включаем все каналы АЦП
    
AT91C_BASE_ADC-›ADC_CR AT91C_ADC_START;                       // Запуск АЦП преобразования

    
while (!(AT91C_BASE_ADC-›ADC_SR & (‹‹ channel))) ;            // Ожидание окончания АЦП преобразования

    
switch(channel)                                                    // Получаем данные!
    
{
        case 
0data AT91C_BASE_ADC-›ADC_CDR0; break;
        case 
1data AT91C_BASE_ADC-›ADC_CDR1; break;
        case 
2data AT91C_BASE_ADC-›ADC_CDR2; break;
        case 
3data AT91C_BASE_ADC-›ADC_CDR3; break;
        case 
4data AT91C_BASE_ADC-›ADC_CDR4; break;
        case 
5data AT91C_BASE_ADC-›ADC_CDR5; break;
        case 
6data AT91C_BASE_ADC-›ADC_CDR6; break;
        case 
7data AT91C_BASE_ADC-›ADC_CDR7; break;
    }


    return 
data;

        
AT91C_BASE_ADC-›ADC_CR AT91C_ADC_START;

  while(!(
AT91C_BASE_ADC-›ADC_SR&chanel));       // Ожидание окончания АЦП преобразования

        
data_mV = (data Upit_mV) / 256;        //вычисление результата АЦП в мВ
//-----------------------------------------------------------------------------------------
        
r1000 data_mV 1000;
        
data_mV data_mV 1000;
        
r100 data_mV 100;
        
data_mV data_mV 100;
        
r10 data_mV 10;
        
r1 data_mV 10;

...............
...............        
//Индикация резултата


Реклама:
__________________
Я бы изменил весь мир, но бог не дал исходников

Последний раз редактировалось Uragan90; 21.04.2011 в 12:19.
Uragan90 вне форума  
Непрочитано 22.04.2011, 22:59  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

в объявлении:
unsigned short int adc_read (unsigned char channel)
{
unsigned int data;
...

а в конце:
return data;

я бы написал:
return (unsigned short int)data;

в повторной строке (к чему она вообще?) наверное вместо:
while(!(AT91C_BASE_ADC-›ADC_SR&chanel));
должно быть так:
while(!(AT91C_BASE_ADC-›ADC_SR&(1 ‹‹ chanel)));

Судя по всему ("data_mV = (data * Upit_mV) / 256;"), используется 8-битное преобразование, поэтому в регистре режима должна быть соотв. "1":
AT91C_BASE_ADC-›ADC_MR = // Задание параметров АЦП
(AT91C_ADC_SLEEP
| AT91C_ADC_LOWRES_8_BIT // Иначе будет 10-битное преобразование
| ((23 ‹‹ 8 ) & AT91C_ADC_PRESCAL) // Такт АЦП ~= 1MHz
| ((4 ‹‹ 16) & AT91C_ADC_STARTUP) // Время запуска ~= 1us
| ((4 ‹‹ 24) & AT91C_ADC_SHTIM));

Последний раз редактировалось dadigor; 22.04.2011 в 23:29.
dadigor вне форума  
Сказали "Спасибо" dadigor
Uragan90 (22.04.2011)
Непрочитано 22.04.2011, 23:29  
Uragan90
Почётный гражданин KAZUS.RU
 
Аватар для Uragan90
 
Регистрация: 20.09.2009
Сообщений: 1,899
Сказал спасибо: 470
Сказали Спасибо 408 раз(а) в 255 сообщении(ях)
Uragan90 на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

Спасибо! Я уже разобрался! Запустил! Работает всё как планировал Теперь буду с тачпанелью дисплея разбираться и запускать...
__________________
Я бы изменил весь мир, но бог не дал исходников
Uragan90 вне форума  
Непрочитано 22.04.2011, 23:32  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

ну а что все-таки было-то?
dadigor вне форума  
Непрочитано 23.04.2011, 00:22  
Uragan90
Почётный гражданин KAZUS.RU
 
Аватар для Uragan90
 
Регистрация: 20.09.2009
Сообщений: 1,899
Сказал спасибо: 470
Сказали Спасибо 408 раз(а) в 255 сообщении(ях)
Uragan90 на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

Я устранил те недочеты что вы уже описали, и ещё была проблема с функцией вывода на дисплей значения в миливольтах...
__________________
Я бы изменил весь мир, но бог не дал исходников
Uragan90 вне форума  
Непрочитано 23.04.2011, 00:34  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

Попробуйте 10 битный - все ж точнее будет, раз опорное так точно задается - 3298 мВ.
Тем более, что переменная data 16-битная. Меняются только 2 строки, там где вставлялось AT91C_ADC_LOWRES_8_BIT и там, где данные делятся на 256.
dadigor вне форума  
Непрочитано 23.04.2011, 09:25  
Uragan90
Почётный гражданин KAZUS.RU
 
Аватар для Uragan90
 
Регистрация: 20.09.2009
Сообщений: 1,899
Сказал спасибо: 470
Сказали Спасибо 408 раз(а) в 255 сообщении(ях)
Uragan90 на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

При 10 битном режиме, последние цифры скачут 1-2 единицы.
__________________
Я бы изменил весь мир, но бог не дал исходников
Uragan90 вне форума  
Непрочитано 23.04.2011, 13:12  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

Зато 8 старших бит почти не дергаются. Я иногда делаю так - работаю с 10-битным АЦП, а учитываю только 8 бит:

case N: data = AT91C_BASE_ADC-›ADC_CDRN ›› 2; break;

получается немножко меньше дребезг результата - шум младшего бита уходит. ИМХО.
dadigor вне форума  
Сказали "Спасибо" dadigor
Uragan90 (23.04.2011)
Непрочитано 25.04.2011, 13:07  
Uragan90
Почётный гражданин KAZUS.RU
 
Аватар для Uragan90
 
Регистрация: 20.09.2009
Сообщений: 1,899
Сказал спасибо: 470
Сказали Спасибо 408 раз(а) в 255 сообщении(ях)
Uragan90 на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

А случаем нет у кого примерчика с использованием прирывания по уровню ацп? Или может ссылка какая по этому поводу...
__________________
Я бы изменил весь мир, но бог не дал исходников
Uragan90 вне форума  
Непрочитано 25.04.2011, 13:23  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: АЦП AT91sam7s256

Сообщение от Uragan90 Посмотреть сообщение
А случаем нет у кого примерчика с использованием прирывания по уровню ацп?
SAM7 так не умеет. Только периодически запускать преобразование и в обработчике прерывания по завершению анализировать данные.
kison вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Видео уроки dosikus Микроконтроллеры, АЦП, память и т.д 61 23.01.2012 21:06
Получение результата с АЦП xxparadoxx Электроника - это просто 2 28.12.2010 15:55
Конфликт прерываний таймера и АЦП ask_e Микроконтроллеры, АЦП, память и т.д 11 08.08.2010 01:28
Помогите с ЦАП AD7708/AD7718 или их аналогами ST_Senya Микроконтроллеры, АЦП, память и т.д 9 30.11.2009 19:03


Часовой пояс GMT +4, время: 08:25.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot