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

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

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

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

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

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


Ответ
Опции темы
Непрочитано 04.02.2014, 14:27   #261
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

1. Зачем нужен цикл именно от 0 до 99?
2. Почему измерений именно 300 (adc_counter › 300), а не, скажем, 99?
3. Сколько измерений АЦП произойдёт, прежде чем цикл от 0 до 99 закончится?
2. Чему изначально равен adc_counter?

Вот, например, можно без прерываний (код для CV):
PHP код:
 
#include ‹mega16.h›
#include ‹delay.h›

#define ADC_VREF_TYPE ((1‹‹REFS1) | (1‹‹REFS0) | (0‹‹ADLAR))
#define MEASURE_NUM     300

unsigned int adc_value  0;

unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input ADC_VREF_TYPE;
delay_us(10);
ADCSRA|=(1‹‹ADSC);
while ((
ADCSRA & (1‹‹ADIF))==0);
ADCSRA|=(1‹‹ADIF);
return 
ADCW;
}

unsigned int measure_ch(unsigned char ch)
{
unsigned int i;
unsigned long int result 0;
for(
MEASURE_NUMii--)  result += read_adc(ch);
return (
result MEASURE_NUM);
}

void init_adc(void)
{
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1‹‹ADEN) | (0‹‹ADSC) | (0‹‹ADATE) | (0‹‹ADIF) | (0‹‹ADIE) | (1‹‹ADPS2) | (1‹‹ADPS1) | (1‹‹ADPS0);
SFIOR=(0‹‹ADTS2) | (0‹‹ADTS1) | (0‹‹ADTS0);
}

void main(void)
{
init_adc();
begin:
adc_value measure_ch(0);
adc_value measure_ch(1);
goto 
begin;

Реклама:

Последний раз редактировалось Godzilla82; 04.02.2014 в 14:43.
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 04.02.2014, 15:10   #262
IOPA4
Почётный гражданин KAZUS.RU
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Godzilla82 Посмотреть сообщение
2. Почему измерений именно 300 (adc_counter › 300), а не, скажем, 99?
А где инкремент этой переменной у автора?
Я бы оставил init_adc() в main, делал все в while(1) {...} и избавился от goto.

Последний раз редактировалось IOPA4; 04.02.2014 в 15:15.
IOPA4 вне форума   Ответить с цитированием
Непрочитано 04.02.2014, 15:53   #263
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от IOPA4 Посмотреть сообщение
А где инкремент этой переменной у автора?
Логично, что в прерывании, там же, где и считывание результатов преобразования. По крайней мере, я на это надеюсь.

Сообщение от IOPA4 Посмотреть сообщение
Я бы оставил init_adc() в main, делал все в while(1) {...} и избавился от goto.
Дело вкуса с goto меньше скобок.
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 04.02.2014, 16:41   #264
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Godzilla82 Посмотреть сообщение
Дело вкуса с goto меньше скобок.

Пральна! Кому-как! А мне вот так!
Код:
void display( char );

void main( void ){
  for(;;){
    display(measure_ch(0));
    display(measure_ch(1));
  }
}

void display( char channel ){
// to do someting
}
Такшта можна и с ГОТУ.
__________________
С уважением,
Vic / ut1wpr

Последний раз редактировалось ut1wpr; 04.02.2014 в 16:45.
ut1wpr вне форума   Ответить с цитированием
Непрочитано 04.02.2014, 21:19   #265
IOPA4
Почётный гражданин KAZUS.RU
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Арктур Посмотреть сообщение
uses crt;
А за что спасибо? Как это в МК воткнуть? Можно целую поэму без скобок написать, но crt и поэма это для ББ. Да и begin...end это теже скобки, но вид сбоку.
IOPA4 вне форума   Ответить с цитированием
Непрочитано 04.02.2014, 21:22   #266
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

goto - дословный перевод - "пошёл на ..."
Джельтмены так не выражаются.
olc0267 вне форума   Ответить с цитированием
Непрочитано 04.02.2014, 22:46   #267
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Арктур Посмотреть сообщение
В Паскуале их ещё меньше!
То да, Паскаль - сила!
Код:
uses dos;
label aaa,10,20,30,40,44,45,46,47,48,50,60,70;
var hex_tmp,path :string;       {Ё¬п д*©«*}
var a,b,c:integer;      {*¤аҐб* Ї®ав®ў ЇаЁ*вҐа*}
var i,tt,t:integer;
var adr,razm:integer;
var ffdat:File;         {д*©«}
var la,sa,ha:byte;      {*¤аҐб ** иЁ*Ґ зЁЇ*}
var ld,dd,id,od:byte;   {¤***лҐ}
var q,tb,temp:byte;
var lt,ht,lh,hh:byte;
var qqq:byte;
{****************************************}
type
    fdat = record
          fd           : byte;
    end;
var
   fdatFile: file of fdat;
   fdatRec: fdat;
{****************************************}
procedure hex_wiev;
begin
hex_tmp:=hex_tmp+copy('0123456789ABCDEF',q,1);
end;{hex_wiev}
{**********************}
procedure rd_dat;
begin
asm
mov dx,c
mov al,$08
out dx,al
dec dx
in al,dx
shl al,1
shr al,1
shr al,1
shr al,1
shr al,1
mov ld,al
inc dx
mov al,$0f
out dx,al
dec dx
in al,dx
shr al,1
shr al,1
shr al,1
shl al,1
shl al,1
shl al,1
shl al,1
or al,ld
inc dx
mov id,al
xor al,al
out dx,al
end;

end;{rd_dat}
Более того, всё, что в скобках, воспримет как комментарии.
omercury вне форума   Ответить с цитированием
Непрочитано 05.02.2014, 09:15   #268
ALEX_1965
Прохожий
 
Регистрация: 30.06.2006
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ALEX_1965 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Ребята, есть у кого CV 2.05.6 c таблеткой?
Скиньте, пожалуйста, на мыло wm16@mail.ru
Заранее благодарен.
ALEX_1965 вне форума   Ответить с цитированием
Непрочитано 05.02.2014, 13:55   #269
foxii
Частый гость
 
Регистрация: 05.02.2014
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
foxii на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

И мне тоже скиньте проверенную версию CV 2.05.6 c таблеткой. А то до сих пор в версии 1.25.5 сижу. Пора бы обновиться )) Mail: foxii@bk.ru
foxii вне форума   Ответить с цитированием
Непрочитано 05.02.2014, 16:27   #270
vgtmaster
Прописка
 
Регистрация: 28.04.2008
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

[QUOTE=Godzilla82;730518]1. Зачем нужен цикл именно от 0 до 99?
2. Почему измерений именно 300 (adc_counter › 300), а не, скажем, 99?
3. Сколько измерений АЦП произойдёт, прежде чем цикл от 0 до 99 закончится?
2. Чему изначально равен adc_counter?


1. Зачем нужен цикл именно от 0 до 99? Это время (условно) вывода на индикацию значений АЦП0 по завершении цикла переходим в дугой цикл и выводим значения АЦП1 и так по кругу. Так вот у меня выполняется 1 цикл правильно, то есть на индикацию выводятся значения АЦП0.
Переходим в цикл 2, данный цикл выполняется и выводит значения АЦП1 вроде всё нормально. Но при завершении цикла 2 переходим в цикл 1 вот здесь и начинается проблемы, выводятся значения АЦП1 а нужно выводить АЦП0. Что я не так делаю?


while(1)
{

ADCSRA |= (1 ‹‹ ADEN) // разрешение АЦП
|(1 ‹‹ ADSC) // запуск преобразования
|(1 ‹‹ ADFR) // непрерывный режим работы АЦП
|(1 ‹‹ ADPS2)|(1 ‹‹ ADPS1)|(0 ‹‹ ADPS0) // предделитель на 64 (частота АЦП 125kHz)
|(1 ‹‹ ADIE); // разрешение прерывания
ADMUX |= (1 ‹‹ REFS1)|(1 ‹‹ REFS0) // внутренний ИОН 2,56V
|(0 ‹‹ MUX3)|(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(0 ‹‹ MUX0); // вход ADC0
sei(); //глобально разрешаем прерывания
_delay_ms(50);

for (i=0; i‹100; i=i+1) //Цикл 1
{
if (adc_counter › 300) // вычисляем среднее значение АЦП0
{
display = value/adc_counter;
adc_counter = 0;
value = 0;

}
_delay_ms(50);

} // конец цикла 1

cli(); // Запрет глобального прерывания

ADCSRA |= (1 ‹‹ ADEN) // разрешение АЦП
|(1 ‹‹ ADSC) // запуск преобразования
|(1 ‹‹ ADFR) // непрерывный режим работы АЦП
|(1 ‹‹ ADPS2)|(1 ‹‹ ADPS1)|(0 ‹‹ ADPS0) // предделитель на 64 (частота АЦП 125kHz)
|(1 ‹‹ ADIE); // разрешение прерывания
ADMUX |= (1 ‹‹ REFS1)|(1 ‹‹ REFS0) // внутренний ИОН 2,56V
|(0 ‹‹ MUX3)|(0 ‹‹ MUX2)|(0 ‹‹ MUX1)|(1 ‹‹ MUX0); // вход ADC1

sei(); //глобально разрешаем прерывания

_delay_ms(50);
for (i=0; i‹100; i=i+1) //Цикл 2
{
if (adc_counter › 300) // вычисляем среднее значение АЦП1
{
display = value/adc_counter;
adc_counter = 0;
value = 0;
}
_delay_ms(50);

} // конец цикла 2

cli(); // Запрет глобального прерывания

}

2. Чему изначально равен adc_counter? нулю.

Последний раз редактировалось vgtmaster; 05.02.2014 в 16:34.
vgtmaster вне форума   Ответить с цитированием
Ответ

Закладки


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CodeVisionAVR selevo Embedd С 11 26.02.2016 22:16
SD и CodeVisionAvr 2.04.4a sersne Микроконтроллеры, АЦП, память и т.д 29 24.03.2010 18:39
CodeVisionAVR V2.03.2 dimonbest Микроконтроллеры, АЦП, память и т.д 253 29.09.2009 22:37
New CodeVisionAVR 1.25.8 dimonbest Микроконтроллеры, АЦП, память и т.д 15 07.02.2008 12:56
Help CodeVisionAVR Serg79 Микроконтроллеры, АЦП, память и т.д 3 15.12.2005 23:32


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


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