на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Программатор микросхем I2С BUS
p align="right">Таблица 2.1

Стандартное подключение СОМ порта

Сигнал

Описание сигнала

1

DCD

Data Carry Detect

2

SIN

Serial In or Receive Data

3

SOUT

Serial Out or Transmit Data

4

DTR

Data Terminal Ready

5

GND

Ground

6

DSR

Data Set Ready

7

RTS

RequestToSend

8

CTS

Clear To Send

9

Rl

Ring Indicate

Рис. 2.8 - Преобразователь уровней MAX232

Преобразованные сигналы подключим к стандартному разъему COM порта, который имеет следующую конфигурацию:

Из всех сигналов достаточно подключить три: 2-SIN, 3-SOUT, 5-GND.

Естественно, что данная таблица приведена со стороны ПК, поэтому SIN, или прием данных, подключается к линии TxD (передача данных). И, следовательно, RxD к SOUT.

Микросхема MAX232 предусматривает защиту входов, поэтом нет нужды в дополнительном схемном решении.

Для программирования микросхем серии AT17xxx производитель рекомендует такую схему:

Стандарт шины указывает на то, что сигнал передается двумя состояниями 0В и третье состояние (источник сигнала отключен). При такой схеме на стороне получателя информации должен быть установлен подтягивающий к плюсу резистор. Номинал резистора отвечает за ток, протекающий при нулевом уровне.

Рис. 2.9 - Рекомендованная производителем схема программатора для AT17

Для подключения шины I2C можно использовать аппаратный модуль TWI контроллера.

Рис 2.10 - Использование портов модулем TWI.

Выбор номинала представляет собой компромисс межу экономичностью (большое сопротивление, малый ток) и помехозащищенностью (отношение наведенного, шумового тока к сигнальному току будет меньше). Для надежной связи зададимся протекающим током в 0,1 от максимального тока нуля микроконтроллера.

Ires = 0,1 * Imax;

Imax = 20mA - максимальный ток ноля микроконтроллера,

Ires - ток протекающей через резистор в сигнальной цепи.

Ires = 2mA.

Рассчитаем сопротивление подтягивающего резистора по закону Ома:

R=U/I;

U = 5В, I=2*10-3;

R=5/0,002=2500;

Сопротивление подтягивающего резистора - 2500 Ом.

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

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

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

Защитная цепь на диодах выглядит следующим образом (Рис. 2.11).

Схема работает таким образом: при подаче на выход напряжения больше чем 5,7В диод VD1 открывается и через резистор течет повышенный ток, приводящий к падению избыточного напряжения на нем. При подаче отрицательного напряжения открывается диод VD2, что также приводит к увеличению тока, протекающего через резистор и стабилизации обратного напряжения на порте контроллера на уровне -0,7В. При коротком замыкании резистор будет ограничивать ток протекающий через источник и таким образом защитит его от повреждения.

Рис. 2.11 - Схема защиты на диодах с токоограничителем

Сопротивление такого резистора должно быть не больше 0,1 от входного сопротивления приемника. Таким образом, максимальное сопротивление должно составлять 250 Ом (если подтяжка будет 2500 Ом). Выберем сопротивление с двойным запасом и номиналом 100 Ом.

В пользу такой схемы можно добавить, что диоды VD1 и VD2 интегрированы в каждый порт микроконтроллера. Таким образом, достаточно добавить всего по одному резистору на порт. Это также позволит без опасения программировать микросхемы с напряжением питания +2,7В.

Для программирования микросхемы АТ17010 также используются дополнительные сигналы: RESET/OE, /CE, /SER_EN. Их можно подключить к любому порту контроллера и использовать для защиты резистор. Для этих сигналов будем использовать PORTC(1:3). Это облегчит трассировку платы, т.к. они физически расположены рядом с шиной TWI.

Для индикации процесса программирования достаточно использовать один светодиод, который инвертирует свое состояние при приеме каждого 128 бита информации. Его можно подключить к PORTC(0) через резистор 270 Ом.

Рис. 2.12 - Использование портов для подключения АТ17010

Рис. 2.13 - Использование портов для индикации состояния программирования

2.2.3. Проектирование схемы сброса

Существует много способов обеспечить микроконтроллер надежным, своевременным сбросом. Схема сброса должна:

a) сбрасывать контроллер по включению питания;

b) сбрасывать контроллер при заниженном питании (когда его работа не гарантируется);

c) не сбрасывать от наводимых помех извне.

Пункты (а) и (с) можно реализовать с помощью RC-цепочки такого вида:

При подаче питающего напряжения конденсатор начинает заряжаться через резистор и напряжение на выводе сброса некоторое время (зависящее от параметров цепочки) находиться на уровне логического нуля и удерживает контроллер в сброшенном состоянии. При наличии помех конденсатор поддерживает напряжение, и контроллер не сбрасывается. Однако при полном пропадании напряжения на короткое время конденсатор не успеет разрядиться, контроллер останется не сброшенным, но работа его нарушиться.

Рис. 2.14 - Схема сброса с RC-цепочкой

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

Рис. 2.15 - Схема сброса с RCVD-цепочкой

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

Рис. 2.16 - Схема сброса с супервизором питания

Но в случае применения контроллеров серии AVR все эти элементы включены в состав микросхемы. Поэтому допускается работа контроллера с полностью отключенным выводом сброса или подтяжкой к питанию.

Такое решение позволяет упростить схему и снизить стоимость устройства.

2.2.4 Реализация внутрисхемного программатора

Под реализацией внутрисхемного программатора понимается вывод разъема под программатор STK200 - распространенный и доступный.

Таблица 2.2

Разъем программирования STK200

№ вывода разъема

№ вывода контроллера

Название

1

15

MOSI

2

4

VCC

3

-

LED

4

3

GND

5

29

RESET

6

4

GND

7

17

SCK

8

4

GND

9

16

MISO

10

4

GND

Рис. 2.17 - Использование портов для внутрисхемного программирования

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

Рис. 2.18 - Принципиальная схема устройства.

3. Проектирование программного обеспечения микроконтроллера

3.1 Анализ поставленных программе задач и проектирование алгоритма

Задачи программы:

- прием данных по протоколу RS-232;

- инициализация программатора при приеме данных и отключение программатора при отсутствии входных данных;

- передача данных по протоколу TWI;

- индикация процесса программирования;

- защита от зависания программы;

Для реализации программы подойдет алгоритм приведенный далее.

Работа устройства начинает работу после подачи питания и инициализирует переменные и порты. Затем, первым делом, настраивается UART. Таким образом, устройство уже готово к приему данных в буфер. Следующим инициализируется таймер приема, который считает время после приема последнего байта. Эту информацию будем использовать для определения окончания приема. Если последний байт был получен больше чем 4*tUART назад, т.е. с интервалом в три байта, значит, передача завершена. Далее инициализируется модуль TWI, затем WatchDogTimer.

После инициализации оборудования ожидаем приема первого байта информации, который послужит сигналом начала программирования. После того как это произошло, инициализируем AT17xxx (переводим в режим программирования) установив адрес ячейки в нулевое значение. Далее переписываем принятое значение в регистр данных модуля TWI и активируем передачу. Т.к. передатчик аппаратный, программа может не ждать окончания передачи и переходить к следующему этапу - ожидание следующего байта.

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

Рис. 3.1 - Алгоритм работы программы

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

Предложенный же алгоритм после завершения программирования моментально переведет устройство в рабочее состояние и сбросит адрес в ноль.

3.2 Проектирование процедур обработки прерываний (при необходимости)

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

- вход в прерывание может произойти в любой момент и тем самым поменять ход программы;

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

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

В результате принято решение не использовать прерывания.

3.3 Создание проекта. Расчет делителей периферийных устройств

Напишем программу на языке С, при помощи компилятора IAR C/C++ Compiler for AVR.

Рис. 3.2 - Создание проекта совместимого с AVRStudio

Для того чтобы проинициализировать устройства необходимо провести некоторые расчеты.

Рассчитаем делитель модуля UART:

UBRR = fosc/16/baud - 1

где fosc - частота тактового генератора

baud - скорость передаваемых данных (по заданию 2400)

UBRR = 3686400/16/2400 - 1 = 95

Ошибка равна 0%, так как число получилось не дробное.

Следовательно, в регистр UBRR необходимо записать число 95 или 0х5F

Для расчета скорости TWI зададимся байтовой скоростью в 2 раза быстрее модуля UART, чтобы данные успевали переписываться, но не в ущерб надежности (высокая скорость - выше вероятность ошибки).

Байтовая скорость UART: 2400/(8+1+1) = 240 байт/сек;

Байтовая скорость TWI: 240*2 = 480 байт/сек;

Битовая скорость TWI: SCL = 480*(8+1) = 4320 бит/сек.

Рассчитаем делитель модуля TWI по формуле:

TWBR = (fosc/SCL - 16) / 2 / 4^(0,1,2,3);

TWBR = (3686400/4320 - 16) / 2 / 4^0 = 418,6666667;

Значение больше 255 и поэтому не подходит. Необходимо изменить значение предделителя.

TWBR = (3686400/4320 - 16) / 2 / 4^1 = 104,6666667;

Округлим значение до 105.

Рассчитаем таймер приема на частоту 240/4=60 Гц и проверим правильность расчета в AVR Studio. Для этого добавим точку останова при срабатывании таймера и при запуске таймера, чтобы обнулить счетчик тактов в симуляторе.

Рис. 3.3 - Окно симулятора, где видно, что период таймера равен 16669,11 uS

Пересчитаем период в частоту

f=1/T; f=1/16,66911E-3= 59,99121 Гц.

Это доказывает, что таймер рассчитан правильно.

3.4 Листинг программы с комментариями

Ниже приведем листинг программы с комментариями:

#define ENABLE_BIT_DEFINITIONS

#include <iom8.h>

#define AT17 0xa6 команда АТ17 на программирование

#define bytemax 128 число байт в странице памяти

#define adressmax 1024 число страниц памяти

#define SEREN (1<<3) номер порта С к которому подключен сигнал

#define RESET (1<<2) номер порта С к которому подключен сигнал

#define CE (1<<1) номер порта С к которому подключен сигнал

#define LED (1<<0) номер порта С к которому подключен светодиод

макрос ожидания передачи TWI

#define waitTWI(); while (!(TWCR & (1<<TWINT)));

void main( void )

{

//otklyuchit preryvaniya

asm("CLI");

// inicializaciya portov

PORTB = 0x00;

DDRB = 0x00;

PORTC = 0xFF;

DDRC = 0x0F;

PORTD = 0x00;

DDRD = 0x00;

// nastroyka RS232/UART 2400 8,n,1

UCSRB = 0x00; //disable while setting baud rate

UCSRA = 0x00;

UBRRL = 0x5F; //set baud rate lo

UBRRH = 0x00; //set baud rate hi

UCSRC = 0x86;

UCSRB = 0x18;

// nastroyka taymera na 4bayta UART

TCCR1B = 0x00; //stop

TCNT1H = 0x00; //setup

TCNT1L = 0x00;

OCR1AH = 0x03;

OCR1AL = 0xBF;

OCR1BH = 0xE0;

OCR1BL = 0xFF;

ICR1H = 0xE0;

ICR1L = 0xFF;

TCCR1A = 0x00;

//TWI initialize

// bistree na 25% chem UART

TWCR= 0x00; //disable twi

TWBR= 105; //set bit rate

TWSR= 0x01; //set prescale

TWAR= 0x00; //set slave address

TWCR= 0x44; //enable twi

asm("WDR"); включение WatchDogTimer

WDTCR = 0x09; //WATCHDOG ENABLED

//while ((UCSRA&(1<<RXC))==0) asm("WDR"); // jdem dannyh

TCCR1B = 0x03; //start Timer

unsigned int adress=0;

while (adress<adressmax) цикл записи страниц

(1<<TWEN);

waitTWI(); //jdem okonchaniya peredachi

TWDR = adress>>1; TWCR = (1<<TWINT)

по окончанию программирования выполняем переход по нулевому адресу, чем выводим АТ17 из режима программирования (инициализация портов в начале программы)

asm("JMP 0");

Вывод: использовав аппаратные блоки контроллера в полной мере можно значительно сократить размер кода и повысить производительность программы. К примеру в данной программы не используется ни одно прерывание т.к нет необходимости сохранять принятые данные в программный буфер сразу при приеме - они сохраняются в аппаратном. А скорость вывода данных выбрана в два раза выше, что обеспечит своевременную вычитку из буфера. При зависании программы счетчик WatchDog'а не будет сброшен (сбрасывается при приеме после передачи данных) и контроллер перезагрузится.

4. Проектирование печатной платы устройства (PCad, OrCad)

Для трассировки воспользуемся пакетом PCAD

Как предполагалось программатор желательно сделать компактным для удобства эксплуатации, поэтому применим корпуса элементов для поверхностного монтажа (SMD). В связи с этим контроллер будет не PDIP (28pin), а TQFP (32pin). Также желательно сделать плату односторонней, для упрощения производства.

Неиспользуемое место «зальем» землей. Такой метод позволяет повысить технологичность изготовления платы, а также может выступать экраном.

Важное место занимает расположение элементов, ведь от этого зависит не только удобство эксплуатации (следует располагать разъемы по краям платы, элементы управления и индикации должны быть понятно расположены), но и сложность трассировки. При неправильном расположении трассировка усложняется, плата становиться больше (если нет заданного размера), становиться невозможным применение односторонней трассировки, влечет к увеличению длины дорожек и количества переходных отверстий.

Результатом трассировки схемы проекта стала односторонняя плата, рисунки которой приведены ниже.

Рис. 4.1 - Рисунок печатного проводника программатора АТ17ххх

5. Рекомендации по разработке программных и аппаратных диагностических средств для проверки работоспособности устройства

Проверку работоспособности платы производить в такой последовательности:

- подать на плату питание 6В при отсутствии предохранителя (должны гореть оба светодиода питания)

- вставить предохранитель

- подключить программатор STK200

- прочитать контроллер для проверки его работоспособности

- запрограммировать FuseBits (настроечные биты) на кварцевый генератор и включение схемы BOD (BrownOutDetector аналог SuperVisor'a питания)

-запрограммировать тестовую программу, которая определяет по отдельности все узлы программатора (UART, индикатор, таймер и т.д.)

- запрограммировать рабочую программу

- проверить работоспособность с реальной микросхемой АТ17ххх

Заключение

Целью этой работы было разработать программатор для микросхем АТ17ххх на контроллере ATMEGA8 с заданным питающим напряжением и входным интерфейсом. В ходе разработки стало ясно, что применение контроллера ATMEGA8 является излишним, можно тот же программатор реализовать и на более младших и дешевых моделях, однако наличие аппаратных модулей у ATMEGA8 дает ему несомненное преимущество. Также существует возможность усложнить устройство с целью повышения функциональности. Например: Индикация процесса программирования (процент выполнения, наличие АТ17ххх и т.д.). Однако это не целесообразно, т.к. на сам процесс программирования (основная цель) это никак положительно не влияет.

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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.