Главная страница
Навигация по странице:

  • Инструкция sector erase – “Очистка одного сектора в масси­ве памяти”

  • Инструкция read — “Чтение данных из массива памяти”

  • Инструкция wren — “Установка триггера разрешения записи”

  • Протокол интерфейса USART

  • Приложение 2. Листинг программы

  • Контрольная по ТОЭ. Заказ_202275. 1. Общая характеристика и описание компонентов 4 Микропроцессорный модуль 4


    Скачать 0.67 Mb.
    Название1. Общая характеристика и описание компонентов 4 Микропроцессорный модуль 4
    АнкорКонтрольная по ТОЭ
    Дата06.06.2022
    Размер0.67 Mb.
    Формат файлаdocx
    Имя файлаЗаказ_202275.docx
    ТипРеферат
    #571737
    страница2 из 3
    1   2   3


    Инструкция chip erase — “Очистка всех секторов в массиве памяти”

    Последовательность выполнения инструкции CHIP ERASE иллюстрирована на рис.1.7.



    Рисунок 1.7. Последовательность выполнения инструкции chip erase
    Перед очисткой микросхемы памяти необходимо выполнить инст­рукцию WREN (разрешить запись). После очистки разрешение записи автоматически сбросится.
    1. На вывод /CS памяти подать 0 В.

    2. Передать инструкцию ОНО Х010.

    3. На вывод /CS памяти подать +5 В.

    Инструкция sector erase – “Очистка одного сектора в масси­ве памяти”

    Последовательность выполнения инструкции SECTOR ERASE ил­люстрирует рис.1.8.

    Перед очисткой сектора микросхемы памяти необходимо выпол­нить инструкцию WREN (разрешить запись). После очистки разрешение записи автоматически сбросится.
    1. На вывод /CS памяти подать 0 В.

    2. Передать инструкцию 0101 Х010.

    3. Передать три байта, указывающие адрес сектора.

    4. На вывод /CS памяти подать +5 В.


    Рисунок 1.8. Последовательность выполнения инструкции sector erase

    Инструкция read — “Чтение данных из массива памяти”
    Последовательность выполнения инструкции READ иллюстрирует рис.1.9.


    Рисунок 1.9. Последовательность выполнения инструкции read

    1. На вывод /CS памяти подать 0 В.

    2. Передать инструкцию.0000 Х011.

    3. Передать три байта, указывающие адрес, с которого необходимо начать чтение данных.

    4. Прочитать байт данных. Микросхема автоматически перейдет к сле­дующему адресу памяти. Таким образом, одной инструкцией можно прочитать всю память.

    5. На вывод /CS памяти подать +5 В.

    Инструкция wren — “Установка триггера разрешения записи”

    Последовательность выполнения инструкции READ иллюстрирует рис.1.10.


    Рисунок 1.10. Последовательность выполнения инструкции wren

    Каждая операция записи памяти должна начинаться с инструкции разрешения записи.

    1. Установить на выводе /CS 0 В.

    2. Передать микросхеме памяти инструкцию 0000 Х110.

    3. Установить на выводе /CS +5 В.
    2. Характеристика и принцип работы USART
    USART - самый распространенный интерфейс последовательной связи. Через него к микроконтроллеру можно подключать множество различных устройств: от миниатюрных таких как цифровые микродатчики до персональных компьютеров. Даже локальные сети можно создавать на основе USART.

    Протокол интерфейса USART

    Данные передаются в асинхронном последовательном коде.



    Рисунок 1 - Структура кадра [1]

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

    Чтобы получатель понимал, что передача начинается, к данным добавляют специальные биты: start и stop.

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

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

    Стандарт передачи данных USART устанавливает значение для погрешности в скорости передачи не более 5% (при этом рекомендовано не выше 1,5%). Здесь мы рассматриваем наиболее распространенный формат протокола USART. Есть варианты с разным количеством бит данных, где их количество варьируется от 5 до 9. Существуют форматы USART где число стоповых бит равно двум, также могут включаться биты четности, однако данные варианты не получили широкого распространения.

    Основная информация по протоколу приема/передачи USART сводится к следующим пунктам:

    • Если установлен неактивный режим (ожидание), на выходе передатчика USART устанавливается высокий уровень;

    • Перед началом передачи байта данных передается стартовый бит, значение которого всегда равно 0, то есть низкому уровню;

    • По окончании передачи байта данных передается стоповый бит, значение которого всегда равно 1, то есть высокому уровню;

    • Передача данных начинается с младшего бита;

    • Количество бит требуемых передачи байта равно 10;

    • Временный интервал, требуемый для передачи одного байта, рассчитывается на основе скорости обмена и количества бит одного пакета, равного 10 битам на один передаваемый байт.

    Интерфейс USART допускает ряд стандартных скоростей передачи данных, среди которых широко используются представленные в таблице 1 [1].

    Таблица 1 – Стандарты передачи интерфейса USART

    Скорость передачи, бод

    Время передачи одного бита, мкс

    Время передачи байта,
    мкс

    4800

    208

    2083

    9600

    104

    1042

    19200

    52

    521

    38400

    26

    260

    57600

    17

    174

    115200

    8,7

    87

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

    Интерфейс USART имеет два сигнала RX и TX, которые часто обозначают как RXD и TXD, чтобы подчеркнуть, что данные сигналы относятся к передаче данных.

    Если подключаются два устройства USART, то порты RX одного устройства соединяются с портами TX другого (см. рис.2), применяется перекрестное соединение [2].



    Рисунок 2.1 – Обмен данными между устройствами по интерфейсу USART
    3. Разработка схемы соединения компонентов
    Схема соединение микроконтроллера ATmega16 с микросхемой FLASH памяти AT25F2048 представлена на рис.3.1, а также в приложении 1.


    Рисунок 3.1. Схема соединения компонентов МПК и FLASH памяти

    4. Разработка алгоритма и управляющей программы
    Алгоритм



    Рисунок 4.1. Блок-схема алгоритма считывания/записи/изменения содержимого FLASH

    Программа

    К интерфейсу SPI микроконтроллера подключена микросхема Flash памяти AT25F2048 объемом 256 Кбайт (262 144 байт). Пространство адресов поделено на четыре сектора по 64 Кбайт (64 х 1 024 = 65 536 байт) каждый — 256 страниц на сектор (65 536 байт / 256 = 256 байт од­на страница). Микросхема памяти может обмениваться данными в од­ном из двух режимов: SPI MODE 0 или SPI MODE 3. Максимальная частота тактового сигнала SCK – 20 МГц.

    Для наглядности операций с памятью (чтение, запись, очистка) используем интерфейс USART микроконтроллера, подключен­ный к COM-порту компьютера. Микроконтроллер через USART передает меню работы с Flash-памятью. В зависи­мости от того, какой пункт выбран (на компьютере), выполняется то или иное действие с памятью через интерфейс SPI.

    В начале программы инициализируются два интерфейса микроконтроллера: USART (функция USART_INIT ()) и SPI (функция

    SPl_MasterInit ()).

    В функции инициализации интерфейса SPI назначаем выводы:

    • /SS — выбор подчиненной, микросхемы;

    • SCK — тактовая частота SPI-интерфейса;

    • MOSI — настраиваем как выход (для подчиненного устройства — вход);

    • MISO — настраиваем как вход (для подчиненного устройства — выход).

    Поскольку микроконтроллер управляет подчиненным устройством с помощью регистра SPCR, задаем режим “Master”. Используя регистр SPCR и SPSR, задаем тактовую частоту на выводе SCK/ск /4=10 МГц /4 = 2,5 МГц.

    В бесконечном цикле с помощью функции printf_P выводим че­рез USART микроконтроллера в COM-порт компьютера меню для рабо­ты с Flash-памятью. Функция print f_P выводит данные, которые хра­нятся в памяти программ, чтобы не занимать ОЗУ микроконтроллера. Данные объявлены как PSTR (). Это тип, объявленный в файле как ((const PROGMEM char *) (s)), т.е. данные, которые находятся в памяти программ микроконтроллера.

    После вывода меню функция getchar () ожидает передачи сим­вола от компьютера, т.е. выбора пункта меню. Принятый символ запи­сывается в переменную choose. В зависимости от ее содержимого, оператор switch выполняет ту или иную последовательность дейст­вий.

    Если принят символ “1”, то вызывается функция RDID (), которая передает по интерфейсу SPI Flash-памяти) инструкцию 0001 XI01. После передачи инструкции, которая занимает восемь циклов (тактовых сигналов SCK), мы принимаем от микросхемы памяти ответ (код изго­товителя и идентификационный код) и передаем его через USART мик­роконтроллера в COM-порт компьютера.



    Рисунок 4.2. Схема соединения компонентов в Proteus



    Рисунок 4.3. Виртуальный терминал

    Листинг программы приведен в приложении 2.


    Заключение

    В ходе выполнения данного курсового проекта нами были рассмотрены:

    • основные технические характеристики и архитектура микроконтроллера ATmega16

    • инструкции управления FLASH памятью микросхемы AT25F2048

    • характеристика и принцип работы последовательного интерфейса USART

    Мы разработали:

    • электрическую принципиальную схему соединения компонентов;

    • блок-схему алгоритма считывания/записи данных FLASH памяти;

    • Управляющую программу для микроконтроллера

    • Проект устройства считывания/записи в САПР Proteus

    В результате выполнения курсового проекта было разработано считывающее/записывающее цифровое устройство, на микроконтроллере ATmega16 с внешней FLASH памятью на микросхеме AT25F2048 по интерфейсу USART.

    Библиографический список
    1. Г.С. Воробьева Микроконтроллеры семейства AVR Лабораторный практикум Методические рекомендации к выполнению цикла лабораторных работ по дисциплине «Основы микропроцессорной техники» для студентов направлений 210100 «электроника и микроэлектроника» и 200300 «биомедицинская инженерия». – Томск, 2009 – 90 с.

    2. https://www.alldatasheet.com/datasheet-pdf/pdf/255831/ATMEL/AT25F2048.html

    3. Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руководство пользователя. — М.: Издательский дом «Додэка-XXI», 2007 г.

    4. Трамперт В. Измерение, управление и регулирование с помощью AVR-микроконтроллеров.: Пер. с нем. — К.: «МК-ПРЕСС», 2006г.

    5. Ключев А.О., Ковязина Д.Р., Петров Е.В., Платунов А.Е. Интерфейсы

    периферийных устройств. – СПб.: СПбГУ ИТМО, 2010. – 290 с.

    1. Магда Ю. С. Программирование последовательных интерфейсов. — СПб.: БХВ-Петербург, 2009. — 304 с.


    Приложение 1. Схема соединения



    Приложение 2. Листинг программы
    Листинг программы

    #include //средства ввода/вывода периферии контроллера. Заголовочный файл включает соответствующие IO определения для устройства который используется в проекте.

    #include //Общие утилиты (в данном примере для функции atol())

    #include //Стандартные средства ввода / вывода(для USART) (в данном примере для использования функций fgets, putchar, gets, scanf_P)

    #include //для использования функции циклов задержки

    #include //утилиты для работы с FLASH памятью(МК) (в данном примере для использования PSTR() вывода данных с flash чтоб не использовать для хранения DATA(RAM))

    #include //утилиты для работы со строками (в данном примере для использования strlen())
    //////////////////////////////SPI функции НАЧАЛО
    //НАЧАЛО функция инициализации SPI интерфейса

    void SPI_MasterInit()

    {
    //Установить ножки /SS, SCK, MOSI(по этой линии передаем данные), как выходы

    DDRB |= (1<<4)|(1<<7)|(1<<5);//PB4(/SS), PB7(SCK), PB5(MOSI)

    //на /SS установить 5 вольт(устройство подключенное к SPI - отключено)

    PORTB|=(1<<4);
    //ножку MISO(PB6) как вход (по этой линии принимаем байт информации от внешних устройств)

    DDRB&=

    (1<<6);
    //Включить SPI, режим Master, частота тактового сигнала(SCK) fck/4

    //прерывания от SPI запрещены

    SPSR&=(1<<0);//SPI2X(0) в 0

    SPCR&=(1<<1)&(1<<0);//SPR1(1) в 0, SPR0(0) в 0

    SPCR = (1<<6)|(1<<4);//SPE(6) в 1, MSTR(4) в 1
    //микросхема памяти поддерживает Mode 0(соответственно его и установили)

    SPCR&=(1<<3);//CPOL - "0", импульсы положительной полярности

    SPCR&=(1<<2);//CPHA - "0", обработка данных по переднему фронту сигнала

    SPCR&=(1<<5);//DORD - "0", порядок передачи данных с старшего разряда
    }

    //КОНЕЦ функции инициализации SPI интерфейса
    //НАЧАЛО функция приема байта с SPI интерфейса

    unsigned char SPI_MasterReseive()

    {

    SPDR = 0xFF;//чтоб начать прием нужно (стартануть SCK) поэтому передаем по SPI интерфейсу - FF
    //ждем до тех пор пока байт передасца(появится 1 в разряде SPIF регистра SPSR)

    while(SPSR & (1<<7)){};//7 - SPIF
    return SPDR;//возвращаем принятый байт

    }

    //КОНЕЦ функция приема байта с SPI интерфейса
    //НАЧАЛО функция передачи байта с SPI интерфейса

    unsigned char SPI_MasterTransmit(char cData)//принимаем в функцию байт, в переменную cData

    {

    SPDR = cData;//передаем байт в сдвиговый регистр SPDR
    //ждем до тех пор пока байт отправится(появится 1 в разряде SPIF регистра SPSR)

    while(SPSR & (1<<7)){};//7 - SPIF
    return SPDR;//возврашаем принятый байт

    }

    //НАЧАЛО функция передачи байта с SPI интерфейса
    //////////////////////////////SPI функции КОНЕЦ
    //////////////////////////////USART функции НАЧАЛО
    //НАЧАЛО функция инициализации USART

    void USART_INIT(unsigned int UBRR_baud)//функция принимает значение в пременную UBRR_baud

    {
    //Устанавливаем скорость передачи/приема(скорость записывается в два регистра UBRRH 4рех битный и UBRRL 8 битный, соответсвенно младьшие 8 бит должны записыватся в UBRRL а старшие 4бита в UBRRH)

    UBRRH = (unsigned char)(UBRR_baud>>8);//значение хранящиеся в UBRR_baud - сдвигаем в право на 8 бит, например надо записать число 504(1 1111 1000) в UBRRH регистр нужно записывать все после 8го бита тогда сдвинув вправо на 8 вышло(1) соответственно присваиваем UBRRH еденицу

    UBRRL = (unsigned char)UBRR_baud;//поскольку явное преобразование к 8 битам то в UBRRL присвоится 8 младьших разрядов, а все старшие после 8го бита отбросится

    //Чтобы обращатся к регистру UCSRC - нужно установить 1 в разряд (URSEL), данный разряд нужно устанавить однавременно с установкой нужных нам разрядов в данном регистре

    //Режим работы асинхронный - разряд UMSEL сбросить(0)

    //Режим работы схемы (Четность) - выключить, сбросить(0) разряды UPM1 и UPM0

    //Количество стоп битов 1, разряд USBS сбросить(0)

    //Устанавливаем режим (Биты данных) 8 бит - разряды UCSZ1, UCSZ0 установить в (1), а также разряд UCSZ2 регистра UCSRB нужно будет сбросить(0)

    //Разряд UCPOL при работе в асинхронном нужно сбросить(0)

    UCSRC=(1<
    1   2   3


    написать администратору сайта