Формат данных RS-232C

Связь компьютера с МК посредством RS-232 не может происходить напрямую; логическая единица (3-5 В) и логический ноль (0-1 В) отличается от соответствующих значений для RS-232. Для решения этой проблемы используют преобразующие микросхемы, такие как MAX232 [9]. Типовая схема включения данной микросхемы приведена на рисунке 9.

Типовая схема включения MAX232 Последовательный периферийный интерфейс (SPI)

SPI осуществляет высокоскоростную синхронизированную передачу данных между МК и периферией в режиме полного дуплекса [10]. Шина SPI организована по принципу «ведущий-ведомый». Передача данных синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством.

В SPI используются 4 цифровых сигнала:

SCK – последовательный тактовый сигнал (Serial Clock) S̅S̅ – выбор ведомого (Slave Select) MOSI – выход ведущего, вход ведомого (Master Out Slave In) MISO – вход ведущего, выход ведомого (Master In Slave Out)

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

Блок-схема работы интерфейса представлена на рисунке 10. Слева изображено ведущее устройство, справа – ведомое. Прием и передача данных осуществляются по определенным фронтам источника тактового сигнала в ведущем устройстве (SPI CLOCK GENERATOR). Ведомое устройство соединено с синхронизирующим сигналом посредством вывода SCK. Принятые и передаваемые данные записываются в 8-битных сдвиговых регистрах (SHIFT REGISTER). Ведомое устройство начинает прием сигнала при наличии низкого уровня на выводе S̅S̅ и заканчивает при наличии высокого. По окончании приема соответствующий вывод в ведущем устройстве возвращается на высокий логический уровень. Данные передаются посылками с размером, кратным 8 бит. В случае необходимости передачи более, чем 8 бит информации, на выводе S̅S̅ должен оставаться низкий логический уровень до тех пор, пока не будет передан последний бит информации.

НЕ нашли? Не то? Что вы ищете?

Функциональная блок-схема передачи данных по SPI

SPI может работать в 4-х режимах:

Режим 0: данные передаются по переднему фронту CLK; Режим 1: данные передаются по заднему фронту CLK; Режим 2: данные передаются по переднему фронту CLK, сигнал CLK инвертирован; Режим 3: данные передаются по заднему фронту CLK, сигнал CLK инвертирован.

Заключение

В результате выполнения курсовой работы был разработан синтезатор частоты и все входящие в него узлы. Произведены испытания и натурные исследования. Выводы курсовой работы следующие:

Изучены принципы работы аналоговых систем ФАПЧ; Изучены принципы работы цифровых систем ФАПЧ на основе ДПКД; Изучены принципы работы цифровых вычислительных синтезаторов (DDS); Изучены принципы стабилизации частоты ЖИГ-генераторов на основе многопетлевых систем ФАПЧ и принципы построения цифровых синтезаторов частот; Изучено устройство синтезатора частоты с ФАПЧ типа Stellex и изучен принцип его программирования; Разработана управляющая система для синтезатора типа Stellex на основе микроконтроллера.

В ходе выполнения курсовой работы были выполнены поставленные задачи разработки блок-схемы СЧ, разработки узлов устройства, создан макет и проведены его экспериментальные исследования. На основании этого цель курсовой работы – разработка синтезатора частоты на диапазон 8-10 ГГц – успешно выполнена.

Список использованной литературы

Шапиро теории синтеза частот / , . – М.: Радио и связь, 1981. – 264 с. интезаторы частот (Теория и проектирование): Пер. с англ./Под ред. . М.: Связь, 1979. – 384 с. Белов синтезаторы стабильных частот и сигналов / // Радиотехника. – 2007. – № 3. – С. 21-25. Белов частот и сигналов: Учебное пособие / . – М.: САЙНС-ПРЕСС, 2002. – 80 с. Atmel. Microcontroller ATmega8 Datasheet // (Engl.). – URL: http://www. /Images/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet. pdf [26 April 2015]. нтегральные радиочастотные синтезаторы частоты с ФАПЧ National Semiconductor / Г. Штрапенин // Компоненты и технологии. – 2006. – № 54. – С. 50-54. Texas Instruments. LMX2326 2.8 GHz PLLatinum Low Power Frequency Synthesizer for RF Personal Communications Datasheet // (Engl.). – URL: www. /lit/gpn/lmx2326 [26 April 2015]. Последовательный интерфейс RS-232 // Информативный портал по микроэлектронике, описания микросхем, микроконтроллеров. – (Рус.). – URL: http://www. gaw. ru/html. cgi/txt/interface/rs232/index. htm [26 апреля 2015]. Texas Instruments. Dual Drivers/Receivers MAX232 Datasheet. // (Engl.). – URL; http://www. /lit/gpn/max232 [26 April 2015]. Последовательный интерфейс SPI // Информативный портал по микроэлектронике, описания микросхем, микроконтроллеров. – (Рус.). – URL: http://www. gaw. ru/html. cgi/txt/interface/spi/index. htm [26 апреля 2015].

Приложение А

Внешний вид готовой установки

Приложение Б

Исходный код прошивки микроконтроллера

/*

* kursPLL. c

* Курсовой проект "Разработка синтезатора частоты на диапазон 8-10 ГГц"

* Программа для управления синтезатором частоты типа Stellex.

* Автор: Евгений Моисейкин, 3 курс, РТ, ФТФ

* 2015 год

*/

#include <avr/io. h>

#include <avr/interrupt. h>

#include <stdlib. h>

//#include <stdio. h>

////ПЕРЕМЕННЫЕ

unsigned long pll_value_r;

int last_freq, new_freq;

unsigned char control_flag=0;

char reciever[7]="",transmitter[7]="";

////НАСТРОЙКИ

//#define CONST_FREQ 8920 //Если активно, указать частоту здесь же (МГц). Уложитесь в допустимый диапазон

#define F_CPU 20000000

#define MAX_FREQ 10000 //МГц

#define MIN_FREQ 8000 //МГц

#define STEP_HZ 250000L //Гц, шаг изменения частоты (фактически в 4 раза больше)

#define REF_HZ 10000000L //Гц, опорный генератор частоты

#define UBBR 64

#define PRESCALER 32

////ОПРЕДЕЛЕНИЯ

//PLL

#define PLL_LATCH_R 0 //Значения для управляющих битов

#define PLL_LATCH_N 1

#define PLL_INIT 3

#define PLL_CB 0 //Control bits

#define PLL_COUNT 2

#define PLL_ACOUNTER 0

#define PLL_BCOUNTER 5

#define PLL_FOLD_CONTROL 4 //Обратная связь

#define PLL_PD_POLARITY 7 //Полярность фазового детектора

#define PLL_LD_PRECISION 20

//ПОРТЫ

//SPI

#define SPI_PORT PORTB

#define SPI_DDR DDRB

#define SPI_PIN PINB

#define SPI_SCK 5

#define SPI_MOSI 3

#define SPI_SS 2

//USART

#define USART_PORT PORTD

#define USART_DDR DDRD

#define USART_PIN PIND

#define USART_RXD 0

#define USART_TXD 1

//PORTD

#define PLL_FOLD

////ТЕКСТ ПРОГРАММЫ

void __sendbyte(char data){

       while(!(UCSRA&(1<<UDRE)));

       UDR=data;

}

char __readbyte(void){

       while(!(UCSRA&(1<<RXC)));

       return UDR;

}

void __sendtext(char *string){

       unsigned char c;

       while ((c=*string++)!=0)

       {

               __sendbyte(c);

       }

}

void __spi_send(long unsigned data){

       SPI_PORT&=~_BV(SPI_SS); //начало передачи по SPI

       SPDR=data>>13; //Передача байта информации

       while(!(SPSR&(1<<SPIF))); //Проверка окончания передачи

       SPDR=data>>5;

       while(!(SPSR&(1<<SPIF)));

       SPDR=data<<3;

       while(!(SPSR&(1<<SPIF)));

       SPI_PORT|=_BV(SPI_SS); //Конец передачи по SPI

}

void __set_MHz(long unsigned MHz){

       unsigned long acounter, bcounter;

       bcounter=MHz/PRESCALER;

       acounter=MHz-(bcounter*PRESCALER);

       __spi_send((PLL_LATCH_N<<PLL_CB)|(((bcounter<<PLL_BCOUNTER)|(acounter<<PLL_ACOUNTER))<<PLL_COUNT));

}

void __ready_for_input(void){

       __sendtext("Current frequency: ");

       itoa(last_freq, transmitter,10);

       __sendtext(transmitter);

       __sendtext(" MHz\r");

       __sendtext("New frequency (MHz): ");

}

void __input_reading(void){

       signed short i;

       while(!(control_flag&(1<<FLAG_NEW_FREQ))){

               i=0;

               while(i<6){

                       reciever[i]=__readbyte();

                       __sendbyte(reciever[i]);

                       if(reciever[i]==0x0D){break;}

                       if(reciever[i]==0x08){

                                       if(i=<0){__sendbyte(' ');}

                                       i=-1;

                                       }

                       if(i==5){

                               if(reciever[i]!=0x0D){

                                               __sendtext("\rToo many numbers. It should be between 8000 and 10000 MHz.\rNew Frequency (MHz): ");

                                               i=-1;

                                       }

                       }

                       i++;

               }

               new_freq=atoi(reciever);

               if((new_freq>=MIN_FREQ)&&(new_freq<=MAX_FREQ)){

                       control_flag|=1<<FLAG_NEW_FREQ;

                       control_flag&=~(1<<FLAG_LOCKED);

               }

               else{

                       __sendtext("Wrong value. It should be between 8000 and 10000 MHz.\rNew Frequency (MHz): ");

               }

       }

}

void __pll_lock(void){

       while((PIND&(1<<3))!=0);

       __sendtext("Frequency locked\r");

       control_flag&=~(1<<FLAG_NEW_FREQ);

       control_flag|=(1<<FLAG_LOCKED);

}

void __initialization(void){

       ////ПОРТЫ

       DDRB=0xFF; // Все выводы настраиваются на выход,

       DDRC=0xFF; // нужные настраиваются на вход.

       DDRD=0xFF; // Избавляет от лишнего энергопотребления.

       PORTD&=~(1<<3);

       SPI_PORT|=_BV(SPI_SS);

       USART_DDR&=~(1<<USART_RXD);

       ////РЕГИСТРЫ

       //SPI

       SPCR|=_BV(SPE)|_BV(MSTR);        //MSB first, mode 0, fosc/4

       //USART

       UBRRH=(unsigned char)(UBBR>>8);

       UBRRL=(unsigned char)(UBBR);

       UCSRB=(1<<RXEN)|(1<<TXEN);

       UCSRC=(1<<URSEL)|(2<<UCSZ0); //7data, 1stopbit

       ////PLL

       pll_value_r=REF_HZ/STEP_HZ;

       __spi_send((PLL_INIT<<PLL_CB)|(2L<<PLL_FOLD_CONTROL)|(1<<PLL_PD_POLARITY)); //INITIALIZATION

       __spi_send((PLL_LATCH_R<<PLL_CB)|(pll_value_r<<PLL_COUNT)|(1L<<PLL_LD_PRECISION)); //R DIVIDER

}

int main(void)

{;

       __initialization();

       #ifdef CONST_FREQ

               __set_MHz(CONST_FREQ);

               new_freq=CONST_FREQ;

               last_freq=CONST_FREQ;

       #else

               new_freq=0;

               last_freq=0;

       #endif

  while(1)

  {

               #ifndef CONST_FREQ

               __ready_for_input();

               __input_reading();

               __set_MHz(new_freq);

               last_freq=new_freq;

               __pll_lock();

               #endif

  }

}

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5