Будь умным!


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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 9.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. 13-30 Регистрация участников Время Спортивный зал А Спорт
2. Педиатрия I Общая дерматовенерология Дерматовенерология как самостоятельная клиническая дисципли
3. Ostdeutschlnd ht in den letzten Jhren enorme Fortschritte gemcht
4. строительный колледж имени Ленинского комсомола Белоруссииrdquo; Методические указ
5. Тема деревни в современной литературе (по произведениям В. Распутина
6. Расчет перемычки
7. Исследование правового института судебного решения
8. Введение Доказывание в гражданском процессе Понятие цель и предмет доказывания Характерис
9. темах Организационноправовые формы предприятий
10. Международные перевозки
11. Русскiй Мурабитунъ Шейх Усман Дан Фодио Книга основ религии Китаб ~Усуль адДин Перевод С
12. Глобус расположенном на Черноморском побережье Кавказа городкурорт Анапап
13. Доказательства
14. Возникновение и развитие идеи правового государства
15. Тема не обязательно из этих разделов можно выбрать и свою тему.html
16. Научно-технический анализ методической литературы по технологии изготовления каминов
17. Системное изложение этой концепции в русском переводе книги Вумека и Джонса Бережливое производство появи
18. Виноград
19. Управление персоналом 4 курс очной формы обучения 8 семестр 2013-14 уч
20. тематика розум до порядку приводить ці слова належать великому М