на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


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


Выходной фильтр сглаживает выходной сигнал и удаляет высокочастотную несущую ШИМ сигнала. Результирующий выходной сигнал для сигнала из примера похож на тот, что изображён на рисунке 8. Если исключить ошибку квантования и отсутствующее усиление, то сигнал полностью похож на входной аналоговый сигнал (Рисунок 1).


Рис 8. Выходной ШИМ сигнал


Пользователь может управлять устройством через три кнопки: «Очистка», «Запись» и «Воспроизведение». Если кнопки не нажаты, то внутренний нагрузочный резистор обеспечивает VCC на PС4…PС6. Нажатие кнопки переключает входную линию на GND.

В качестве обратной связи для пользователя выступает светодиод, отображающий состояние системы. 

Кварцевый резонатор с двумя развязывающими конденсаторами (22 пФ) генерирует системные тактовые импульсы.

Микрофонный усилитель является простым инвертирующим усилителем. Коэффициент усиления устанавливается через R1 и R9 (коэффициент усиления = R1/R9). R4 предназначен для питания микрофона, а C1 блокирует любые DC составляющие на входе усилителя. R2 и R3 устанавливают смещение. R5 и С8 формируют простой фильтр нижних частот первого порядка. Также R5 защищает усилитель от любых повреждений, если выходная цепь закорочена.

C3 блокирует любую DC составляющую на входе динамика.


Настройка

Когда программа запущена, порты должны быть настроены. Это делается в подпрограмме «setup» (установка).

Протокол SPI определяет одно устройство как «ведущее», а другие устройства, подключенные к «ведущему», как «ведомые». В данном примере, микроконтроллер AVR выступает в роли «ведущего», а DataFlash в роли «ведомого».

SPI интерфейс AT90S8535 определён как альтернативная функция PortB (PB0…PB4). В данном примере, управляющие сигналы для DataFlash являются также настроечными на PortB (PB0…PB2 и PB4). Для установок «ведущего», сигналы Serial Clock(SCK), Master Out/Slave In(MOSI), Chip Select(#CS), Write Protect(#WP) и Reset(#RST) являются выходами, тогда как Master In/Slave Out(MISO) и Ready/Busy(RDY/#BSY) являются входами. Состоянием по умолчанию PortB является: всех выходы в высоком состоянии, а на всех входах - внутренние нагрузочные резисторы.

АЦП AT90S8535 подключено к PortA. Поэтому PortA определён как вход в высокоимпедансном состоянии.

PortС служит в качестве входа для кнопок.

.


ОПИСАНИЕ ПРИНЦИПИАЛЬНОЙ СХЕМЫ

УСТРОЙСТВА

Микропроцессор MCU (AT90S8535) управляет через порт В работой FLASH - памяти DD1 Так как в процессоре имеется аппаратная поддержка SPI протокола, то микросхема памяти, работающая по этому протоколу непосредственно подключается к выводам микроконтроллера DD2 miso, mosi, sck.

В режиме хранения информации микроконтроллер и микросхема памяти переключаются в спящий режим - микроконтроллер путем выполнения специальной команды, а микросхема памяти путем удержания микроконтроллером сигнала #cs в высоком уровне.

Микросхема памяти и микропроцессор выполнены по КМОП - технологии, что позволяет их непосредственно питать от аккумуляторных батарей небольшой емкости, которые подключаются через разъем Х1.

Для обеспечения работы процессора на частоте 8 МГц примене­ны элементы BQ1 - кварцевый резонатор и конденсаторы С8 и С9.

Опорное напряжение для АЦП берется напрямую с шины питания. Изменение его значения не приведет к структурному искажению сигнала, а только к его масштабированию.

Сигнал от микрофона усиливается микросхемой DA1 и подается на вход АЦП. Усилитель DA1 также охвачен частотно- зависимой отрицательной обратной связью, для того чтобы ограничить верхнюю частотную границу входного сигнала до 4 кГц.

К порту С микроконтроллера подключаются кнопки управления и светодиоды для индикации режимов работы устройства.

К разъему Х1 подключается аккумуляторная батарея для питания устройства. Конденсаторы С1 и С2 служат для сглаживания пульсаций по цепи питания, которые могут возникнуть при протекании динамических процессов внутри микросхем.


Главный цикл

В главном цикле, отслеживается состояние всех трёх кнопок. Если одна из них нажата, то LED загорается и показывает, что система занята, и вызывается соответствующая подпрограмма.

Дополнительный цикл выполняется до тех пор, пока кнопка нажата, в качестве программной противодребезговой защиты для функций «Очистка» и «Воспроизведение».

Во время главного цикла, LED погашен, это значит, что система работает в холостом режиме.


Рисунок 11. Главный цикл

Очистка

Data Flash может быть предварительно очищена.


Рисунок 12. Очистка

При вызове подпрограммы «erase» (очистка), устанавливается флаг, который показывает, что в следующем цикле записи новые данные могут быть сохранены в начале DataFlash.

SPI должен быть установлен для доступа к DataFlash. Здесь не используются прерывания. Порядок данных для DataFlash следующий: MIB является первым, а AT90S8535 - «ведущим».

DataFlash принимает либо сигнал SCK, который находится в низком состоянии, когда #CS переключается из высокого в низкое состояние (SPI режим 0), либо сигнал SCK, который находится в высоком состоянии, когда #CS переключается из низкого в высокое состояние (SPI режим 3), во время положительной фазы тактовых импульсов. В данном примере SPI установлен в режим 3. Для того чтобы получить наибольшую скорость передачи данных, выбирается наименьшее деление тактовой частоты, шина SPI запускается на частоте 2 МГц, если используется кварцевый генератор с частотой 8 МГц.

Для выполнения очистки блока, линия #CS переводится в низкое состояние и в DataFlash, следом за двумя зарезервированными битами (нулями), загружается код операции 0x50, затем 9-разрядный адрес блока и 13 не имеющих значения бит. Эта последовательность передаётся побайтно «ведомому». После каждого байта, регистр состояния SPI (SPSR) проверяется до тех пор, пока флаг прерываний SPI не покажет, что передача завершена. После записи всей последовательности, сразу после перевода линии #CS в высокое состояние, начинается очистка блока. Вывод Ready/Busy переводится памятью DataFlash в низкое состояние, до тех пор, пока блок не очиститься. Затем следующий блок будет очищен тем же самым способом, что и текущий. Очистка будет продолжаться, пока все 512 блоков не очистятся. Очищенные зоны читаются как 0xFF.

Запись

Подпрограмма записи состоит из установки АЦП и пустого цикла, который продолжается пока нажата кнопка «Запись». В данном примере используется вывод ADC0, для которого требуется, чтобы регистр выбора мультиплексора АЦП (ADMUX) был установлен в нуль. В регистре управления и состояния АЦП (ADCSR) разрешается работа с коэффициентом деления тактовой частоты 32, устанавливается режим одиночного преобразования, разрешаются прерывания, а также сбрасываются флаги прерываний. Аналого-цифровое преобразование начинается сразу. Первое преобразование занимает больше времени, чем последующие преобразования (832 тактовых импульса вместо 448). После этого времени, возникает прерывание АЦП, показывающее, что преобразование закончено, и результат может быть прочитан из регистра данных АЦП.

Аналоговый сигнал из цепи микрофона выбирается на частоте 15.686 Гц. Это та же самая частота, что и выходная (ШИМ) частота.

Для достижения частоты выборки 15.686 Гц, выборка должна происходить каждые 510 циклов (15.686 Гц x 510 = 8 МГц). Для получения одного результата АЦП, нужно каждые 510 циклов запускать АЦП в режиме одиночного преобразования с коэффициентом деления частоты 32. Одиночное преобразование занимает 14 циклов АЦП. Поэтому преобразование будет готово после 14 x 32 = 448 циклов.

Когда преобразование закончено, возникает прерывание. Процедура прерывания выполняет цикл для заполнения пустых 62 циклов (510–448), перед началом нового преобразования.

Результатом 10-разрядного преобразования является величина на входе АЦП, которая появляется через 2 цикла после начала преобразования. Эти 10 бит перекрывают диапазон от AGND до AREF (в данном примере от 0 до 5В). Выходной сигнал цепи микрофона ограничен диапазоном 2.3В…3.5В. Поэтому из результата 10-разрядного преобразования вычитается минимальное входное напряжение. Это 0x1D5 для 2.3В. Часть данных, представляющих сигнал величиной выше 3.5В, убирается путём удаления двух MSB. Это делается автоматически, когда результат преобразования передаётся в подпрограмму «запись во флэш», так как эти переменные «flash_data» определяются типом «char» (8-бит). Последние 8-бит данных должны быть записаны в DataFlash перед следующим прерыванием преобразования.


Рисунок 13. Запись

Запись данных в DataFlash


Рисунок 14. Запись в DataFlash

Запись данных в DataFlash производится путём записи сначала в буфер, а, когда этот буфер будет заполнен, его содержимое запишется в одну страницу главной памяти.

В подпрограмме «write_to_flash» переменная «j» соответствует номеру байта в буфере, а переменная «k» номеру страницы, в которую будет записываться содержимое буфера. Если флаг новых данных показывает, что DataFlash пуста, то оба счётчика устанавливаются в нуль.

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

Для того чтобы защитить содержимое этих переменных при двух вызовах функций, они объявляются статическими переменными.

Для записи данных в буфер, линия #CS переводится в низкое состояние и в DataFlash загружается операционный код 0x84. Это следует за 14 не имеющими смысла битами и 10-битовым адресом положения внутри буфера. Затем вводятся 8-бит данных.

Эта последовательность передаётся «ведомому» побайтно. После каждого байта проверяется регистр состояния SPI (SPSR), пока флаг прерывания SPI не покажет, что последовательная передача завершена. После записи всей последовательности линия #CS переводится в высокое состояние.

Если буфер заполнен и остались пустые страницы, то буфер копируется на следующую страницу DataFlash. Так как память была очищена раньше, то данные могут быть записаны без дополнительного стирания.

Если память заполнена, то цикл выполняется, пока нажата кнопка «запись». Любые данные, записанные в то время, когда память уже заполнена, будут потеряны.

Воспроизведение

В процедуре «воспроизведения», содержимое DataFlash считывается и модулируется как 8-разрядная ШИМ на частоте 15.686 Гц. Для достижения большей скорости, данные не читаются напрямую из основной памяти, а передаются в один из двух буферов и затем читаются из буфера. В это время копируется следующая страница памяти в другой буфер. Для ШИМ, 16-разрядный Таймер/Счётчик 1 используется с выходом ШИМ на OC1B. Это описывается в регистре управления Таймера/Счётчика A и B (TCCRA/TCCRB). Для запуска ШИМ с возможной наибольшей частотой, делитель тактовой частоты ШИМ устанавливается в 1.

Когда установка завершена, первая страница копируется в буфер 1, посредством перевода линии #CS в низкое состояние и передачей соответствующих команд в DataFlash. Передача страницы в буфер начинается, когда линия #CS переводится снова в высокое состояние. Когда состояние на выводе Ready/Busy меняется памятью DataFlash на высокое, то это означает, что буфер 1 содержит действительные данные. Затем начинается передача следующей страницы в буфер 2. Так как оба буфера независимы друг от друга, то данные могут всегда читаться из буфера 1, пока DataFlash остаётся занятой копированием данных из второй страницы в буфер 2.

Для чтения байта из буфера, в DataFlash должна быть записана фиктивная величина. Операция записи «ведущего» в SPI «ведомого» приводит к тому, что содержимое его регистра данных SPI (SPDR) будет изменено. После записи фиктивного байта в DataFlash, регистр SPDR микроконтроллера AVR содержит выходные данные из DataFlash.


Рисунок 15. Воспроизведение

Когда значения ШИМ счётчика равно «0», Таймер 1 вызывает прерывание переполнения. Это прерывание используется для синхронизации выходных данных из DataFlash частотой ШИМ. Когда значение из буфера сдвигается в микроконтроллер AVR, цикл выполняется до тех пор, пока Таймер 1 не вызовет прерывание переполнения. Затем данные записываются в выходной регистр сравнения Таймера/Счётчика 1 B (OCR1B), автоматически защёлкивая выход ШИМ, когда счётчик ШИМ достигнет максимального значения (255 для 8-разрядной ШИМ).

После того как считается последнее значение из буфера, активный буфер переключится.

Если воспроизведена вся память, то все прерывания отключены и Таймер/Счётчик 1 остановлен.


Рисунок 16. Следующая страница в следующий буфер


Рисунок 17. Активный буфер в динамик

Изменение и оптимизация

Сигнал с выхода микрофона может изменяться в зависимости от типа используемого микрофона. Для достижения лучших результатов важно выбрать такой коэффициент усиления микрофонного усилителя, который обеспечит максимальный сигнал, наиболее близкий к AREF.

Данные, записанные в DataFlash, полностью соответствуют данным, считанным с АЦП. В случае записи в течение большого промежутка времени или записи стерео сигнала может потребоваться упаковка этих данных.

В этом примере приведены два способа применения флага состояния.

Первый способ – использование глобальной переменной (т.е. переменная «wait» используется в подпрограмме «playback»). Второй способ – использование незадействованного бита в регистре. В подпрограмме «стирания», используется бит ACIS1 (регистра управления и состояния аналогового компаратора (ACSR))для отображения того, что следующими этапом должно быть сохранение новых данных.

Частота выборки равная 15.686 Гц (приблизительно 510 циклов), генерируется с помощью прерывания АЦП и цикла задержки. Она может быть заменена независимым таймером (Таймер/Счётчик 0 или Таймер/Счётчик 2), если он не используется для других целей.


Пример программы на языке C

/* Очистка всех страниц в случае необходимости. Запись данных в буфер 1. Если буфер заполнен,

то его содержимое записывается в страницу памяти. Чтение DataFlash через буфер 1 и буфер 2 в

регистр данных.

*/

 

#include “io8535.h”

#include

#include “stdlib.h”

#include “dataflash.h”

 

// прототипы

void setup (void);

void erasing (void);

void recording (void);

void interrupt[ADC_vect] sample_ready (void);

void write_to_flash (unsigned char ad_data);

void playback (void);

void next_page_to_next_buffer (unsigned char active_buffer, unsigned int page_counter);

void interrupt[TIMER1_OVF1_vect] out_now(void);

void active_buffer_to_speaker (unsigned char active_buffer);

 

// глобальные переменные

volatile unsigned char wait = 0;

 

 

void setup(void)

{

DDRB = 0xBD;                       // Инициализация порта SPI

// SCK, MISO, MOSI, CS, LED, WP , RDYBSY, RST

// PB7, PB6, PB5, PB4, PB3, PB2 , PB1, PB0

//  O    I    O    O    O    O     I    O

//  1    0    1    1    1    1     0    1

PORTB = 0xFF;          // все выходы в высоком состоянии, на входах

   нагрузочные резисторы (LED погашен)

DDRA = 0x00;                         // Port A определяется как вход

PORTA = 0x00;

DDRD = 0x10;                         // Port D определяется как вход (D4: выход)

 

_SEI();                         // прерывания разрешены

}

 

 

void erasing(void)

= 0x02;            // установка флага, показывающего, что следующим 

   этапом должна быть запись данных

 

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

SPCR = 0x5C;

 

while (block_counter < 512)

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

SPDR = BLOCK_ERASE;

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

SPDR = (char)(block_counter>>3);

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

SPDR = (char)(block_counter<<5);

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

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

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

PORTB

SPCR = 0x00;                          //отключение SPI

 

 

void recording(void)

{

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

 

SPCR = 0x5C;

ADMUX = 0x00; // номер входного вывода АЦП = 0

ADCSR = 0xDD; // одиночное АЦ преобразование, fCK/32, старт

    преобразования

while (!(PIND & 8)); // цикл продолжается пока нажата кнопка записи

    (кнопка 3)

 

ADCSR = 0x00; // выключение АЦП

SPCR = 0x00;  // выключение SPI

}

 

 

void interrupt[ADC_vect] sample_ready(void)

unsigned char count = 0;

 

while (count < 6) count++; // ожидание в течение нескольких циклов

ADCSR

 

 

void write_to_flash(unsigned char flash_data)

{

static unsigned int buffer_counter;

static unsigned int page_counter;

unsigned char temp = 0x80;

 

if((ACSR & 0x02)) // если флаг установлен, то новые данные должны быть

 установлены

{

buffer_counter = 0;

page_counter = 0;   // сброс счётчика если должны быть записаны

   новые данные

ACSR &= 0xFD;         // очистка флага сигнала

}

 

while(!(PINB & 0x02));            // проверка занятости флэша

 

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

 

SPDR = BUFFER_1_WRITE;

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

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

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

 

SPDR = (char)(buffer_counter>>8); // не важно + первые два бита буфера

    адреса

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

 

SPDR = (char)buffer_counter;  // буфер адреса (макс. 2^8 = 256

    страниц)

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

SPDR = flash_data;                 // запись данных в регистр данных SPI

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

 

 

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

 

buffer_counter++;

 

if (buffer_counter > 528)          // если буфер заполнен, то его

  содержимое записывается в страницу памяти

{

buffer_counter = 0;

if (page_counter < 4096) // если память не заполнена

PORTB &= ~DF_CHIP_SELECT;      // включить DataFlash

 

SPDR = B1_TO_MM_PAGE_PROG_WITHOUT_ERASE; // записать

данные из буфера 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

else

= 0x08;           // погасить LED

while (!(PIND & 8)); // ждать пока кнопка записи

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

}

}

 

 

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


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое.


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.