Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Схема измерителя напряжения в пакете ISIS Proteus VSM

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

 Задание:

Спроектировать схему измерителя напряжения в пакете ISIS Proteus VSM. В качестве датчика использовать делитель напряжения на переменном резисторе. Предусмотреть светодиодную пороговую сигнализацию. Схему снабдить светодиодным семисегментным индикатором показаний напряжения. Микроконтроллер – Atmega 8. Программу написать на языке Си в Code Vision AVR.

 Решение.

Схема измерителя представлена на рисунке 1 и рисунке 2.

Рисунок 1. Измеритель напряжения.

На вход ADC0 порта С подаётся измеряемое напряжение с движка резистора RV1. С порта В на вход ABCDEFG светодиодного индикатора подаётся комбинация сигналов высокого и низкого уровней, соответствующая десятичной цифре либо первого, либо второго, либо третьего, либо четвёртого разрядов. На вход DP светодиодного индикатора подаётся сигнал десятичной запятой. Низкий уровень сигналов на этих входах соответствует включенному светодиоду. С выходов PD0…PD3 порта D микроконтроллера подаются стробирующие импульсы на входы 1, 2, 3, 4 светодиодного индикатора. Высокий уровень сигнала соответствует включенной цифре.

Если на входе ADC0 порта С уровень напряжения больше 1 В, то с помощью транзисторного ключа Q1 загорается диод D1 (рисунок 2).

Рисунок 2. Измеритель напряжения: индикация перегрузки.

Составим алгоритм работы микроконтроллера (см. рисунок 3).

 

 

По алгоритму создадим программу на языке Си в Code Vision AVR:

/*****************************************************

This program was produced by the

CodeWizardAVR V1.25.8 Standard

Automatic Program Generator

© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date    : 25.04.2010

Author  : F4CG                            

Company : F4CG                            

Comments:

Chip type           : ATmega8

Program type        : Application

Clock frequency     : 1,000000 MHz

Memory model        : Small

External SRAM size  : 0

Data Stack size     : 256

*****************************************************/

#include <mega8.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage

delay_us(10);

// Start the AD conversion

ADCSRA|=0x40;

// Wait for the AD conversion to complete

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

// Declare your global variables here

void main(void)

{

// Declare your local variables here

  unsigned int x,a1,a2,a3,a4;

// Input/Output Ports initialization

// Port B initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTB=0x00;

DDRB=0xFF;

// Port C initialization

// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00;

DDRD=0xFF;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=0x00;

TCNT0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 500,000 kHz

// ADC Voltage Reference: AVCC pin

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x81;

while (1)

     {

     // Place your code here

     x=read_adc(0);                       //Запись величины.   

     if (x>1000)                             //Установление порога сигнализации.

       PORTD.4=1;                         //Включить диод.

     else

       PORTD.4=0;                         //Выключить диод.

     a1=x/1000;                             //Первая цифра.

     a2=x-a1*1000;                        

     a2=a2/100;                             //Вторая цифра.

     a3=x-(a1*1000+a2*100);

     a3=a3/10;                                              //Третья цифра.

     a4=x-(a1*1000+a2*100+a3*10);         //Четвёртая цифра.

     switch (a1)                                            //Вывод первой цифры...

       {

       case 0: PORTB=0b00000001; break;

       case 1: PORTB=0b01001111; break;

       case 2: PORTB=0b00010010; break;

       case 3: PORTB=0b00000110; break;

       case 4: PORTB=0b01001100; break;

       case 5: PORTB=0b00100100; break;

       case 6: PORTB=0b00100000; break;

       case 7: PORTB=0b00001111; break;

       case 8: PORTB=0b00000000; break;

       case 9: PORTB=0b00000100; break;

       }

     PORTD.0=1;                                         //...в первую позицию.

     delay_ms(10);

     PORTD.0=0;

     switch (a2)                                            //Вывод второй цифры...

       {

       case 0: PORTB=0b10000001; break;

       case 1: PORTB=0b11001111; break;

       case 2: PORTB=0b10010010; break;

       case 3: PORTB=0b10000110; break;

       case 4: PORTB=0b11001100; break;

       case 5: PORTB=0b10100100; break;

       case 6: PORTB=0b10100000; break;

       case 7: PORTB=0b10001111; break;

       case 8: PORTB=0b10000000; break;

       case 9: PORTB=0b10000100; break;

       }

     PORTD.1=1;                                       //...во вторую позицию.

     delay_ms(10);

     PORTD.1=0;

     switch (a3)                                          //Вывод третьей цифры...

       {

       case 0: PORTB=0b10000001; break;

       case 1: PORTB=0b11001111; break;

       case 2: PORTB=0b10010010; break;

       case 3: PORTB=0b10000110; break;

       case 4: PORTB=0b11001100; break;

       case 5: PORTB=0b10100100; break;

       case 6: PORTB=0b10100000; break;

       case 7: PORTB=0b10001111; break;

       case 8: PORTB=0b10000000; break;

       case 9: PORTB=0b10000100; break;

       }

     PORTD.2=1;                                        //...в третью позицию.

     delay_ms(10);

     PORTD.2=0;

     switch (a4)                                           //Вывод четвёртой цифры...

       {

       case 0: PORTB=0b10000001; break;

       case 1: PORTB=0b11001111; break;

       case 2: PORTB=0b10010010; break;

       case 3: PORTB=0b10000110; break;

       case 4: PORTB=0b11001100; break;

       case 5: PORTB=0b10100100; break;

       case 6: PORTB=0b10100000; break;

       case 7: PORTB=0b10001111; break;

       case 8: PORTB=0b10000000; break;

       case 9: PORTB=0b10000100; break;

       }

     PORTD.3=1;                                        //...в четвёртую позицию.

     delay_ms(10);

     PORTD.3=0;

     };

}

PAGE  8


Начало

аписать значение напряжения Х на входе в регистр АЦП..

Выключить сигнализацию.

Найти первую цифру. сигнализацию.

Найти вторую цифру. сигнализацию.

Найти третью цифру. сигнализацию.

Найти четвёртую цифру. сигнализацию.

Вывести первую цифру в первую позицию. сигнализацию

Вывести вторую цифру в первую позицию. сигнализацию.

Вывести третью цифру в первую позицию. сигнализацию.

Вывести четвёртую цифру в первую позицию. сигнализацию.

Включить сигнализацию.

Х>1.000

Да

Нет

Рисунок 3. Алгоритм работы контроллера.

Инициализация микроконтроллера.




1. Понятие качества и организация системы управления качеством
2. і Яка організація зобов~язана розслідувати скласти акт за формою Н1 та взяти на облік цей нещасний випад
3. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ для студентов педиатрического факультета ВВЕДЕНИЕ В КУРС СТОМАТОЛОГИИМЕТ
4. Определение понятий здоровье болезнь предболезнь Согласно ВОЗ здоровье это состояние полного физиче
5. . Сутність види та форми МЕД 2.
6. Я Свами Садчитананда Эту игру в Индии называютЛила Leel а играет в нее наше Высшее Я создающее
7. Отчет по лабораторной работе Определение коэффициента фильтрации мелкозернистого песка Студ
8. картина висит и
9. олигополия введено английским гуманистом и государственным деятелем Томасом Мором 14781535 в ставшем всемирн
10. шести лет Позднее в XIX веке стали принимать учеников с десятилетнего а потом с четырнадцатилетнего возраст
11. Стратегическая роль и позицианирование службы по работе с персоналом
12. Введение Социальная реабилитация ~ это комплекс мер направленных на восстановление разрушенных или утрач
13. Социальная политика североевропейских стран
14. по теме Аристотель ВОПРОСЫ Что такое софизм софистика Что такое эристика Как правил
15. тематичних алгоритмів які знаходять вжиток як в задачах чистого програмування так і в статистичних методах.
16. Реферат- Компьютеризованная реклама
17. Структура, апаратне забезпечення системи клієнт-банк
18. между сетей на латинском языке Inter означает между
19. Манси
20. нет Самая верхняя оболочка Земли простирающаяся от ее поверхности до 90 тыс