Устройство цифровой записи речи (цифровой диктофон)
p>   передачи

SPDR = 0x00;                           // не важно

while (!(SPSR & temp));            // ожидание завершения

   передачи

PORTB

else

PORTB

}

}

void playback(void)

{

unsigned int page_counter = 0;

unsigned int buffer_counter = 0;

unsigned char active_buffer = 1; // активный буфер = буфер 1

unsigned char temp = 0x80;

TCCR1A = 0x21;          // 8 бит ШИМ, используется COM1B

TCNT1 = 0x00;            // обнуление счётчика 1

TIFR = 0x04;                // сброс флага превышения  счётчика 1

TIMSK = 0x04;             // разрешение прерывания переполнения счётчика 1

TCCR1B = 0x01;          // коэф. Пересчёта счётчика 1 = 1

OCR1B = 0x00;                        // обнуление выходного регистра сравнения B

// прерывания запрещены, порт SPI включён, «ведущий» режим, первый MSB, 3 режим SPI, Fcl/4

SPCR = 0x5C;

next_page_to_next_buffer (active_buffer, page_counter); // чтение страницы 0

      в буфер 1

           

while (!(PINB & 0x02)); // ожидание завершения передачи данных из страницы 0

в буфер 1

while ((page_counter < 4095)&(!(PIND & 2))) // пока кнопка воспроизведения

(кнопка 1) нажата

{

page_counter++; // теперь берём следующую страницу

next_page_to_next_buffer (active_buffer, page_counter);

active_buffer_to_speaker (active_buffer);

if (active_buffer == 1) // если буфер 1 является активным буфером

{

active_buffer++;            // то устанавливаем буфер 2 в качестве активного

}

else                               // иначе

{

active_buffer--; // устанавливаем буфер 1 в качестве активного

}

}

TIMSK = 0x00;             // запрещаем все прерывания

TCCR1B = 0x00;          // останавливаем счётчик 1

SPCR = 0x00;               // отключаем SPI

}

void next_page_to_next_buffer (unsigned char active_buffer, unsigned int page_counter)

{

unsigned char temp = 0x80;

while(!(PINB & 0x02)); // ждём, пока флэш не освободится

PORTB &= ~DF_CHIP_SELECT; // включаем DataFlash

if (active_buffer == 1)   // если буфер 1 активный

{

SPDR = MM_PAGE_TO_B2_XFER; // то передаём следующую страницу в

   буфер 2

}

else                                                       // иначе

{

SPDR = MM_PAGE_TO_B1_XFER; // передаём следующую страницу в

                                                    буфер 1

           }

while (!(SPSR & temp)); // ожидаем завершения передачи

SPDR = (char)(page_counter >> 6);

while (!(SPSR & temp)); // ожидаем завершения передачи

SPDR = (char)(page_counter << 2);

while (!(SPSR & temp)); // ожидаем завершения передачи

SPDR = 0x00; // записываем не имеющий значения байт

while (!(SPSR & temp)); // ожидаем завершения передачи

PORTB |= DF_CHIP_SELECT; // выключаем DataFlash и начинаем передачу

}

void interrupt[TIMER1_OVF1_vect] out_now(void)

{

wait = 0; // возникновение прерывания

}

void active_buffer_to_speaker (unsigned char active_buffer)

{

// пока активный буфер не очистится воспроизводим его содержимое на динамике

unsigned int buffer_counter = 0;

unsigned char temp = 0x80;

PORTB &= ~DF_CHIP_SELECT; // включение DataFlash

if (active_buffer == 1)     // если буфер 1 активный буфер

{

SPDR = BUFFER_1_READ; // то читаем из буфера 1

}

else                                             // иначе

{

SPDR = BUFFER_2_READ; // читаем из буфера 2

}

while (!(SPSR & temp)); // ожидаем завершения передачи

SPDR = 0x00; // запись не имеющего значения байта

while (!(SPSR & temp)); // ожидаем завершения передачи

SPDR = 0x00; // запись не имеющего значения байта

while (!(SPSR & temp)); // ожидаем завершения передачи

SPDR = 0x00; // начать с адреса 0 буфера

while (!(SPSR & temp)); // ожидаем завершения передачи

SPDR = 0x00; // запись не имеющего значения байта

while (!(SPSR & temp)); // ожидаем завершения передачи

while (buffer_counter < 528)

{

SPDR = 0xFF; // записываем фиктивное значение в начало

   сдвигового регистра

while (!(SPSR & temp)); // ожидаем завершения передачи

while(wait); // ожидаем прерывание переполнения таймера 1

OCR1B = SPDR; // воспроизводим данные из сдвигового регистра

wait = 1; // сброс флага сигнала

buffer_counter++;

}

PORTB |= DF_CHIP_SELECT; // выключение DataFlash

}

void main(void)

{

setup();

for(;;)

{

if (!(PIND & 8)) // если кнопка записи нажата (кнопка 3)

{

PORTB &= 0xF7; // зажигаем LED

recording();

}

if (!(PIND & 4)) // если нажата кнопка очистки (кнопка 2)

{

PORTB &= 0xF7; // зажигаем LED

erasing();

while (!(PIND & 4)); // ждём пока кнопка очистки не

    отпущена (кнопка 2)

}

if (!(PIND & 2)) //если нажата кнопка воспроизведения(кнопка 1)

{

PORTB &= 0xF7; // зажигаем LED

playback();

while (!(PIND & 2)); // ждём пока кнопка воспроизведения

    не отпущена (кнопка 1)

              }

PORTB |= 0x08; // гасим LED во время «холостой» работы

}

}

DataFlash.h

// изменён 19.04.1999

// для использования 8535

#include “ina90.h”

#pragma language=extended

// DataFlash вывод сброса порта (PB 0)

#define DF_RESET 0x01

// DataFlash вывод состояния порта готов/занят (PB 1)

#define DF_RDY_BUSY 0x02

// DataFlash защита от записи загрузочного сектора (PB 2)

#define DF_WRITE_PROTECT 0x04

// DataFlash вывод порта выбора микросхемы (PB 4)

#define DF_CHIP_SELECT 0x10

// буфер 1

#define BUFFER_1 0x00

// буфер 2

#define BUFFER_2 0x01

// определение всех кодов операций

// запись буфера 1

#define BUFFER_1_WRITE 0x84

// запись буфера 2

#define BUFFER_2_WRITE 0x87

// чтение буфера 1

#define BUFFER_1_READ 0x54

// чтение буфера 2

#define BUFFER_2_READ 0x56

// Буфер 1 в основную страницу памяти программы с встроенным стиранием

#define B1_TO_MM_PAGE_PROG_WITH_ERASE 0x83

// Буфер 2 в основную страницу памяти программы с встроенным стиранием

#define B2_TO_MM_PAGE_PROG_WITH_ERASE 0x86

// Буфер 1 в основную страницу памяти программы без встроенного стирания

#define B1_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x88

// Буфер 2 в основную страницу памяти программы без встроенного стирания

#define B2_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x89

// Основная страница памяти программы сквозь буфер 1

#define MM_PAGE_PROG_THROUGH_B1 0x82

// Основная страница памяти программы сквозь буфер 2

#define MM_PAGE_PROG_THROUGH_B2 0x85

// автоматическая перезапись страницы через буфер 1

#define AUTO_PAGE_REWRITE_THROUGH_B1 0x58

// автоматическая перезапись страницы через буфер 2

#define AUTO_PAGE_REWRITE_THROUGH_B2 0x59

// сравнение основной страницы памяти с буфером 1

#define MM_PAGE_TO_B1_COMP 0x60

// сравнение основной страницы памяти с буфером 2

#define MM_PAGE_TO_B2_COMP 0x61

// передача основной страницы памяти в буфер 1

#define MM_PAGE_TO_B1_XFER 0x53

// передача основной страницы памяти в буфер 2

#define MM_PAGE_TO_B2_XFER 0x55

// регистр состояния DataFlash для чтения плотности, сравнения состояний,

// и состояния готов/занят

#define STATUS_REGISTER 0x57

// чтение основной страницы памяти

#define MAIN_MEMORY_PAGE_READ 0x52

// очистка 528 байт страницы

#define PAGE_ERASE 0x81

// очистка 512 страниц

#define BLOCK_ERASE 0x50

#define TRUE 0xff

#define FALSE 0x00


РАСЧЕТ ВРЕМЕНИ НАРАБОТКИ НА ОТКАЗ


Интенсивность отказов устройства, содержащего разнотипные элементы, определяется следующим соотношением:

Среднее время наработки на отказ устройства составляет:


Tср = 1/λ

 

Тип элемента

Число элементов Q

λ

Q*λ

1

К1401УД2

AT90S8535-8PI

AT45DB32

2

1

1

0.017*10-6

0.017*10-6

0.017*10-6

0.034*10-6

0.017*10-6

0.017*10-6

2

Паяные соединения

210

10-9

0.21*10-6

3

Конденсаторы

9

0.004*10-6

0.012*10-6

4

Резисторы МЛТ

15

0.02*10-6

0.30*10-6

5

Диод

4

0.02*10-6

0.08*10-6

6

Транзистор

1

0.05*10-6

0.05*10-6

7

Вилка разъема

1

0.011*10-6

0.011*10-6

8

Резонатор

1

0.09*10-6

0.09*10-6

9

Микрофон

1

10-5

10-5

10

Громкоговоритель

1

10-5

10-5

11

Переключатель

3

0.01*10-5

0.03*10-5

Суммарная интенсивность отказов

2.851*10-6

Перечень комплектующих элементов устройства и значений интенсивности их отказов:


























Время наработки на отказ разработанного устройства при этом составит:


Тотк=106/1.691=350754 час

ОЦЕНКА КОЛИЧЕСТВА ОШИБОК В ПРОГРАММЕ


N=ΣajZj

 

Z1- сложность условных операторов If

Z2 – общее число ветвей в программе

Z3 – число связей с прикладными программами

Z4 – число связей с системными программами

Z5 – число операций I/O

Z6 – число вычислительных операторов

Z7 – число операторов обработки данных

Z8 – число комментариев


a1

a2

a3

a4

a5

a6

a7

a8

0.4

0.02

0.4

0.07

0.05

0.03

0.02

-0.002


Z1

Z2

Z3

Z4

Z5

Z6

Z7

Z8

8

5

4

7

28

25

30

39



N=8.062


Т.о. при данной сложности ПО возможно проявление 9 ошибок


ЗАКЛЮЧЕНИЕ

В результате была разработана структурная и принципиальная схема цифрового диктофона для записи голосовой информации в течение 1 часа. Спроектированное устройство обладает следующими достоинствами: высокая надежность хранения записанной информации, высокая надежность самого устройства вследствие отсутствия движущихся механических деталей; звуковое сопровождение «на­жатий» клавиш; удобство работы с диктофоном.


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Гук М. Аппаратные средства IBM PC. - С.-Петербург: Издательство «Питер Ком» 999. -816с.

2. Аванесян Г. Р., Левшин В. П. Интегральные микросхемы ТТЛ, ТТЛШ: Справочник. - М.: Машиностроение, 1993

3. Воробьёв Е. П., Сенин К. В. Интегральные микросхемы производства СССР и их зарубежные аналоги - М.: 1990

4. www.atmel.ru


Страницы: 1, 2, 3, 4, 5



Реклама
В соцсетях
рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать