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

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

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

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

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

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

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

 
Опции темы

Изменить исходный код программы для ATMEGA8

Непрочитано 18.06.2011, 15:17  
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  
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  
MisterDi
Почётный гражданин KAZUS.RUN
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: Изменить исходный код программы для ATMEGA8

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

Сообщение от MisterDi Посмотреть сообщение
В старшем разряде порта Д формируется импульсная последовательность, для чего - вопрос к автору конструкции. .
Это же очевидно - автор зажигает децимальную точку. Я, кстати, тоже так делаю. А к вычислениям это действие действительно не имеет отношения
Ivan Panov вне форума  
Непрочитано 18.06.2011, 22:03  
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  
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  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
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 char) tmp;
 } 
То есть, входному напряжению от 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 int) tmp;
 }

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


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  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Изменить исходный код программы для ATMEGA8

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

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

Всем большое спасибо! Пока переписывал программу, немного изучил программирование, во всяком случае понял азы.
Dimitrij вне форума  
Непрочитано 19.06.2011, 14:09  
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, время: 07:53.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.