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

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

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

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

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

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

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

Закрытая тема
Опции темы
Непрочитано 18.06.2011, 15:17   #11
sansan_51
Частый гость
 
Регистрация: 21.03.2008
Сообщений: 28
Сказал спасибо: 77
Сказали Спасибо 1 раз в 1 сообщении
sansan_51 на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

Менять 255 на 511 в коде i_read и u_read нельзя, т.к. вы выйдите за пределы разрядности temp, которая до передачи в вызывающую программу сдвигается вправо на 10 разрядов и обрезается до байта. Результат будет тот, что вы уже видели - до 2,5 вольт все нормально, а потом все начинается с нуля. Если хотите удвоить показания, советую уменьшить в два раза ADC_U_DIV и ADC_I_DIV: в шапке программы задать их значения равными 511 (#define ADC_U_DIV 511 #define ADC_U_DIV 511). Возможно и ADCSETDIV тоже д.б. равна 511. Правда, не вник в ее роль, но возможно, что она связана с калибровкой.
Реклама:
sansan_51 вне форума  
Непрочитано 18.06.2011, 18:14   #12
Dimitrij
Временная регистрация
 
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
Dimitrij на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

Сообщение от sansan_51 Посмотреть сообщение
(#define ADC_U_DIV 511 #define ADC_U_DIV 511).
Это я то же менял, результат одинаков, до 2,5 вольт все нормально, а потом все начинается с нуля. Как бы я не менял коэффициенты, больше 25.5 не получал.
Уже почти разобрался в коде, но не понятна эта часть
Код:
// Reinitialize Timer 0 value
TCNT0=0xFA;   
PORTB &= 0xF8;
	PORTD = font[d[dig-1]];
	if (settimei›1500) if (dig==4) PORTD|=128; 
	if (dig==2) PORTD|=128; 
		        
	if (count›350){
        	//if (dig==2) PORTD|=128; 
        	if (dig==4) PORTD|=128; 

	}
	PORTB |=dig;
	dig++; 
	if (dig==7) dig=1;
	if (++count›700) count=0;
        if (settimei‹1500) settimei++; 
        else settimei=65535;

}
Не может быть причина в этом?
Dimitrij вне форума  
Непрочитано 18.06.2011, 19:25   #13
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

В старшем разряде порта Д формируется импульсная последовательность, для чего - вопрос к автору конструкции. К коэффициентам преобразования АЦП тут ничего не относиться. Этот участок отвечает только за отображение цифр на 7-сегментном индикаторе.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 18.06.2011, 21:46   #14
Ivan Panov
Частый гость
 
Регистрация: 02.02.2010
Адрес: Одесская обл.
Сообщений: 32
Сказал спасибо: 0
Сказали Спасибо 24 раз(а) в 12 сообщении(ях)
Ivan Panov на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

Сообщение от MisterDi Посмотреть сообщение
В старшем разряде порта Д формируется импульсная последовательность, для чего - вопрос к автору конструкции. .
Это же очевидно - автор зажигает децимальную точку. Я, кстати, тоже так делаю. А к вычислениям это действие действительно не имеет отношения
Ivan Panov вне форума  
Непрочитано 18.06.2011, 22:03   #15
Dimitrij
Временная регистрация
 
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
Dimitrij на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

Сообщение от Ivan Panov Посмотреть сообщение
Это же очевидно - автор зажигает децимальную точку. Я, кстати, тоже так делаю.
С этим ясно, в подробности не вникаю, и так голова кругом.
Тут мне подсказали, что беззнаковый тип char это от 0 до 255 и никак большее число в восьми битах не сохранить. Но регистры ATMEGA8 8-битовые, значит с большими числами я не смогу работать?
А как же тогда обработать 5 вольт и вывести на индикатор число 50.0?
Dimitrij вне форума  
Непрочитано 18.06.2011, 22:38   #16
Ivan Panov
Частый гость
 
Регистрация: 02.02.2010
Адрес: Одесская обл.
Сообщений: 32
Сказал спасибо: 0
Сказали Спасибо 24 раз(а) в 12 сообщении(ях)
Ivan Panov на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

Вам совершенно правильно подсказали. Изменения надо ввести в определения функций: void iindf(unsigned char il) переделать на void iindf(unsigned int il), void uindf(unsigned char ul) на void uindf(unsigned int ul). Далее изменить возвращаемый параметр на unsigned int в следующих функциях: unsigned char u_read(void), unsigned char i_read(void), unsigned char iset_read(void). В последних трёх функциях не забудьте убрать явное приведение возвращаемого типа к unsigned char. Вместе с этим, как Вам ранее и советовали, вдвое уменьшить значения #define ADC_U_DIV и #define ADC_I_DIV. Вышеописанные изменения я добавил в приложенный файл. Отпишитесь, если компилятор выдаст ошибку, я этот файл не компилировал.
Вложения:
Тип файла: rar ch8_new.rar (1.5 Кб, 54 просмотров)
Ivan Panov вне форума  
Сказали "Спасибо" Ivan Panov
Dimitrij (19.06.2011)
Непрочитано 18.06.2011, 22:52   #17
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,439
Сказал спасибо: 97
Сказали Спасибо 314 раз(а) в 230 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Изменить исходный код программы для ATMEGA8

Изучите типы данных Си.
char (8 бит): [-128..127]
unsigned char (8 бит): [0..255]
int (16 бит): [-32768..32767]
unsigned int (16 бит): [0..65535]
long int (32 бита): [-2147483648..2147483647]
unsigned long int (32 бита): [0..4294967295]

PHP код:
 unsigned char u_read(void)
 {
        
tmp=read_adc(ADCMUX_U);   // считывается АЦП канала 0: [0..1023]
        
tmp *=255;                        // умножается на 255: [0..260865]
        
tmp /=ADC_U_DIV;              // делитсня на 1023: [0..255]
        
return (unsigned chartmp;
 } 
То есть, входному напряжению от 0..5 вольт соответствуют числа от 0 до 255. Результат функции - как раз это число.

Если надо, чтобы напряжению от 0 до 5 вольт соответствовали числа от 0 до 50, то надо ещё менять и функцию обработки результата.

PHP код:
#define ADC_U_DIV 511
#define ADC_I_DIV 511

unsigned char j,imax;
insigned int iind,uind;

 
unsigned int u_read(void)
 {
        
tmp=read_adc(ADCMUX_U);
        
tmp *=255
        
tmp /=ADC_U_DIV;
        return (
unsigned inttmp;
 }

unsigned int i_read(void
{
        
tmp=read_adc(ADCMUX_I);
        
tmp *=255;
        
tmp /=ADC_I_DIV;
        return (
unsigned inttmp;
}


void uindf(unsigned int ul)
{
    
d[0]= ul/100;
    
ul %=100;
    
d[1]=  ul/10;
    
ul %=10;
    
d[2]= ul 
}

void iindf(unsigned int il)
{
    
d[3]= il/100;
    
il %=100;
    
d[4]= il/10;
    
il %=10;
    
d[5]=il;



Последний раз редактировалось Godzilla82; 18.06.2011 в 22:59.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
Dimitrij (19.06.2011)
Непрочитано 18.06.2011, 22:54   #18
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,439
Сказал спасибо: 97
Сказали Спасибо 314 раз(а) в 230 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Изменить исходный код программы для ATMEGA8

пока писал - опередили
Godzilla82 вне форума  
Непрочитано 19.06.2011, 13:13   #19
Dimitrij
Временная регистрация
 
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
Dimitrij на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

Сообщение от Ivan Panov Посмотреть сообщение
Отпишитесь, если компилятор выдаст ошибку, я этот файл не компилировал.
Все нормально, только Godzilla82 немного подправил, в определениях переменных тоже поставил int.

Всем большое спасибо! Пока переписывал программу, немного изучил программирование, во всяком случае понял азы.
Dimitrij вне форума  
Непрочитано 19.06.2011, 14:09   #20
Dimitrij
Временная регистрация
 
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
Dimitrij на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

Думал, что все закончилось, ан нет.
В Proteus все нормально, а в реалях очень прыгает младший разряд +-1.
Пробовал уменьшать тактовую частоту, реже, но все равно скасет.
Что можно сделать для стабилизации показаний?
Кстати, он прыгал и в начальном коде программы, который был приложен к схеме.
Dimitrij вне форума  
Закрытая тема

Закладки


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
из DVD в DVD-player реально? Altalimir Микроконтроллеры, АЦП, память и т.д 14 17.09.2007 21:21
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


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


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