05.02.2014, 16:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: CodeVisionAVR 2.60
А почему бы не делать это последовательно, без ожиданий?
Настройте сначала вход, а уж потом запускайте АЦП.
|
|
|
|
05.02.2014, 17:11
|
|
Прописка
Регистрация: 28.04.2008
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от omercury
|
А почему бы не делать это последовательно, без ожиданий?
Настройте сначала вход, а уж потом запускайте АЦП.
|
Что только не делал, не чего не получается.
|
|
|
|
05.02.2014, 18:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от vgtmaster
|
1. Зачем нужен цикл именно от 0 до 99? Это время (условно) вывода на индикацию значений АЦП0 по завершении цикла переходим в дугой цикл и выводим значения АЦП1 и так по кругу.
|
1. Вывод информации на дисплей у вас где?
2. Переменная adc_counter где и когда меняется?
3. Время 1 цикла (из 99) примерно сколько (в мкс)?
4. Время одного измерения АЦП какое (в мкс)?
|
|
|
|
05.02.2014, 19:17
|
|
Частый гость
Регистрация: 24.03.2008
Сообщений: 38
Сказал спасибо: 4,145
Сказали Спасибо 39 раз(а) в 13 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Saadov
|
Я знаю только одно место где эта программа находится на лечении. 2.05.6 там последняя.
|
Буду очень признателен, если кто-нибудь положит ее мне на мыло ab12@list.ru
|
|
|
|
05.02.2014, 20:52
|
|
Прописка
Регистрация: 28.04.2008
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Godzilla82
|
1. Вывод информации на дисплей у вас где?
2. Переменная adc_counter где и когда меняется?
3. Время 1 цикла (из 99) примерно сколько (в мкс)?
4. Время одного измерения АЦП какое (в мкс)?
|
1. Вывод информации на дисплей у вас где? обычный семисегментный индикатор.
2. Переменная adc_counter где и когда меняется?
// Прерывание по окончанию преобразования АЦП
ISR (ADC_vect)
{
value = value + (ADC*11/4);
adc_counter++;
}
3. Время 1 цикла (из 99) примерно сколько (в мкс)?
Это время условное, в дальнейшем будет 2 - 3сек. То есть 3сек выводим на дисплей результат АЦП0, далее 3сек АЦП1 и так по переменно. Так вот, по переменно у меня не получается сделать. И я прошу помощи, кто мог бы помочь мне решить данную проблему.
4. Время одного измерения АЦП какое (в мкс)? Я думаю это непринципиально.
|
|
|
|
05.02.2014, 21:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
|
Re: CodeVisionAVR 2.60
1. Переменная adc_counter объявлена как volatile?
2. Перед установками параметров АЦП его надо выключать.
3. После установки всех настроек - включить.
4. И только после этого - запустить.
5. На момент сравнения переменной adc_counter прерывания надо запрещать, так как переменная двухбайтовая. Какой у неё тип, кстати?
6. В начале цикла value и adc_counter надо обнулять. На этот момент прерывания тоже надо запретить.
7. Какой тип имеет переменная value?
8. Выбора канала 2 надо делать не логическим "ИЛИ" с предыдущим значением регистра ADMUX.
Чем вам не нравится мой вариант?
Что такое ADC в прерывании?
P.S. А как на дисплее отличить 1 канал от 2-го? Никак?
Последний раз редактировалось Godzilla82; 05.02.2014 в 21:49.
|
|
|
|
06.02.2014, 00:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Если уж хотите через прерывания, тогда предлагаю так:
Код:
|
#include ‹mega16.h›
#include ‹delay.h›
#define ADC_VREF_TYPE (1 ‹‹ REFS1 ) | (1 ‹‹ REFS0)
unsigned char adc_counter = 0;
unsigned int value = 0;
unsigned int display = 0;
...
interrupt [ADC_INT] void adc_isr(void)
{
value += ADCW;
adc_counter++;
if(adc_counter›63) {
display = ((unsigned long int)value*11)››8;
adc_counter = 0;
value = 0;
}
}
void start_ch(unsigned char ch)
{
#asm("cli");
adc_counter = 0;
value = 0;
ADCSRA &= ~(1 ‹‹ ADEN);
ADMUX = ADC_VREF_TYPE | ch;
ADCSRA |= (1‹‹ADIF) | (1‹‹ADEN) | (1‹‹ADSC);
#asm("sei");
delay_ms(5000);
}
void init_adc(void)
{
ADMUX = ADC_VREF_TYPE;
ADCSRA = (1‹‹ADEN) | (1‹‹ADATE) | (1‹‹ADIE) | (1‹‹ADPS2) | (1‹‹ADPS1);
SFIOR &= 0x1F;
}
void main(void)
{
init_adc();
begin:
start_ch(0);
start_ch(1);
goto begin;
} |
Последний раз редактировалось Godzilla82; 06.02.2014 в 10:48.
|
|
|
|
06.02.2014, 09:49
|
|
Прописка
Регистрация: 28.04.2008
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Godzilla82
|
1. Переменная adc_counter объявлена как volatile?
2. Перед установками параметров АЦП его надо выключать.
3. После установки всех настроек - включить.
4. И только после этого - запустить.
5. На момент сравнения переменной adc_counter прерывания надо запрещать, так как переменная двухбайтовая. Какой у неё тип, кстати?
6. В начале цикла value и adc_counter надо обнулять. На этот момент прерывания тоже надо запретить.
7. Какой тип имеет переменная value?
8. Выбора канала 2 надо делать не логическим "ИЛИ" с предыдущим значением регистра ADMUX.
Чем вам не нравится мой вариант?
Что такое ADC в прерывании?
P.S. А как на дисплее отличить 1 канал от 2-го? Никак?
|
Переменные объявлены так:
volatile unsigned long value;
volatile unsigned int adc_counter;
Чем вам не нравится мой вариант? Уважаемый Godzilla82 буду пробовать ваш вариант и прислушаюсь вашим советам, спасибо.
Что такое ADC в прерывании? Вектор прерывание по окончанию преобразования АЦП
|
|
|
|
17.02.2014, 20:21
|
|
Прохожий
Регистрация: 04.09.2012
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Привет.
Как получить hex-файл в CodeVisionAVR 1.25.9?
Если кто может, поделитесь плз, версией 2.60 + таблетка...
|
|
|
|
18.02.2014, 09:21
|
|
Частый гость
Регистрация: 05.02.2014
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Подскажите, как подключить файл ресурса (например file.c) без использования заголовочного файла *.h, в проект в CodeVisionAVR V2.05.3. Работал в CodeVision 1.25.5 там просто добавил в проект файл си и объявил его в главном файле и всё. А CodeVisionAVR V2.05.3 ругается.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:36.
|
|