Jump to content

    

Altera ADC core

Пытаюсь запустить ADC на MAX 10, что-то не очень (мягко говоря) получается...

 

Для начала, кто-нибудь знает, чем отличаются clock и adc_pll_clock ? Типа по clock идет общение с внешним миром, а adc_pll_clock только для преобразования A->D ? Если так, они должны быть как-то синхронизированы и т.д. ?

Share this post


Link to post
Share on other sites
Гхм. Подробный вопрос - подробный ответ.

Ну конечно кто-нибудь знает.

https://www.intel.com/content/dam/www/progr...10-adc-15.1.pdf

Просмотрите, там совсем немного - 60 страниц с картинками.

Мне кажется, я задал достаточно определенные вопросы, а не просто попросил рассказать вообще... А ADC UG у меня и так последние пару дней любимое чтиво...

 

Ладно, с clk я уже разобрался (все, как и предполагал), возник другой вопрос. Использую только один аналоговый вход - ANAIN, а выводы ADCx (пара из них) задействованы как обычные GPIOs. При этом в процессе генерации ADC core указал, что используется только channel 0, в sequencer указал, что slot 1, привязан к ch 0.

Тем не менее, при компиляции ругается, что "Can't place multiple pins..." именно на те ADCx, которые у меня задействованы, как GPIOs.

 

Где ему еще нужно сказать, что эти ноги нафиг для ADC не нужны ???

Share this post


Link to post
Share on other sites

И всё таки, настоятельно рекомендую вдумчиво покурить сей документ...

К примеру про ваш вопрос враги не скрывают истину:

Стр. 2-5

If you use bank 1A for ADC, you cannot use the bank for GPIO.

:)

Share this post


Link to post
Share on other sites

Они озверели !!!

 

"Bank 1A, 1B, 2, and 8—you cannot use GPIO pins in these banks." если ADC в принципе включен !!! И это в корпусе E144...

 

 

Вообще первоначальный восторг по поводу MAX 10 у меня начинает проходить - уже в который раз натыкаюсь на подобные засады... Да, понятно, что UG нужно читать внимательно, но...

 

 

И всё таки, настоятельно рекомендую вдумчиво покурить сей документ...

К примеру про ваш вопрос враги не скрывают истину:

Стр. 2-5

If you use bank 1A for ADC, you cannot use the bank for GPIO.

:)

Да я параллельно уже тоже нашел (только в другом месте), и высказал свое крайнее неудовольствие... Реально у MAX 10 слишком много таких ограничений...

 

If you use bank 1A for ADC, you cannot use the bank for GPIO.

:)

 

Кстати, именно это ко мне не имеет отношения - я же использую ANAIN, а не пин из обычного банка, поэтому и не ожидал такой засады... Ладно если бы использование пина из банка отрубало этот банк, но когда сам факт включения ADC отрубает чуть ли не половину GPIOs, это уже ни в какие ворота не лезет...

 

Share this post


Link to post
Share on other sites

Блин, вроде бы сделал, как нужно, но фигню какую-то читает неменяющуюся (при изменении напряжения на входе ADC). Никто не поделится кусочком работающего кода, инициализирующего ADC и получающего данные ?

 

Имел ввиду - код на С под NIOS...

Share this post


Link to post
Share on other sites
Блин, вроде бы сделал, как нужно, но фигню какую-то читает неменяющуюся (при изменении напряжения на входе ADC). Никто не поделится кусочком работающего кода, инициализирующего ADC и получающего данные ?

Имел ввиду - код на С под NIOS...

Ловите весь проект целиком.

Кстати, какой версией квартуса пользуетесь? НЯП, в первых версиях, где появилась поддержка MAX 10, bsp для ниоса создавался с ошибкой:

если в проекте использовались прерывания от АЦП, то в bsp все равно соответствующий парамер имел значение -1.

Приходилось врукопашную его править.

Только после этого все работало.

max10_adc_test.zip

Share this post


Link to post
Share on other sites
Ловите весь проект целиком.

 

Спасибо !!!

 

У меня версия 17.1 lite, там уже нормально ?

 

И еще вопрос, если можно - судя по коду, который удалось найти в интернете, в какой-то момент названия были изменены, типа вместо MODULAR_AD1C_0_SEQUENCER_CSR_BASE стало ADC_SEQUENCER_CSR_BASE

Это действительно так ?

 

Share this post


Link to post
Share on other sites
Блин, вроде бы сделал, как нужно, но фигню какую-то читает неменяющуюся (при изменении напряжения на входе ADC). Никто не поделится кусочком работающего кода, инициализирующего ADC и получающего данные ?

 

Имел ввиду - код на С под NIOS...

 

const float adc_vref = 3.0f;
const volatile int* const adc_sample_array = (int*) ADC_SAMPLE_STORE_CSR_BASE;
float adc_voltage;

*(unsigned*)ADC_SEQUENCER_CSR_BASE = 1;

adc_voltage = adc_vref * adc_sample_array[0] / 4095;

Драйвер ADC выкинул, экономия 600 байт.

Share this post


Link to post
Share on other sites
И еще вопрос, если можно - судя по коду, который удалось найти в интернете, в какой-то момент названия были изменены, типа вместо MODULAR_AD1C_0_SEQUENCER_CSR_BASE стало ADC_SEQUENCER_CSR_BASE

Это действительно так ?

ХЗ. Я всегда по актуальному bsp проверяю, как оно там называется.

 

Share this post


Link to post
Share on other sites
const float adc_vref = 3.0f;
const volatile int* const adc_sample_array = (int*) ADC_SAMPLE_STORE_CSR_BASE;
float adc_voltage;

*(unsigned*)ADC_SEQUENCER_CSR_BASE = 1;

adc_voltage = adc_vref * adc_sample_array[0] / 4095;

Драйвер ADC выкинул, экономия 600 байт.

А не поделитесь ещё и инициализацией ?

Share this post


Link to post
Share on other sites
А не поделитесь ещё и инициализацией ?

А это всё, там нет никакой инициализации. Записывается 1 в CSR, и он начинает работать.

Share this post


Link to post
Share on other sites
А это всё, там нет никакой инициализации. Записывается 1 в CSR, и он начинает работать.

Блин, и оно при этом работает ! С ума сойти, это именно то, что мне нужно было, еще раз спасибо !

 

P.S. А как драйвер нафиг выбросить ?

 

P.P.S. Ну, и если еще кто столкнется - самым простым решением убрать прерывание ADC (которое просто все подвешивало, хотя специально не разрешал) было просто отключение соответствующей линии IRQ в Platform Designer'е

 

Share this post


Link to post
Share on other sites

Драйвер отключается в BSP Edtor убиранием соответствующей галочки в закладке "Drivers".

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now