Как использовать MAX232 для связи между ПОС и ПК
Это простой способ управления светодиодом, вентилятором, реле или соленоидом с компьютером и ПОС.
Рекомендуемый уровень
промежуточный
Требования
- Компьютер с Microchip MPLAB X IDE с установленным компилятором XC8 v1.34. (Я использую MPLAB X v3.05 и XC8 v1.34)
- Микроконтроллер PIC16F628A
- Драйвер / приемник MAX232
- Способ программирования MCU
- Список запасных частей от Eagle (см. Ниже)
- Компьютер с интерфейсом последовательного порта / последовательный порт USB
- Если вы хотите поместить схему на макет, вам понадобится макет и проводы перемычек
Введение
Maxim Integrated Products создала MAX232 IC в 1987 году. Это двойной драйвер / приемник и обычно преобразует сигналы RX, TX, CTS и RTS с / на последовательный порт ПК (который может достигать 25 v) с / на уровни TTL (5 v). С помощью MAX232 IC вы можете легко подключить микроконтроллер PIC к компьютеру. Это открывает множество возможностей. Вы можете управлять светодиодами, вентиляторами, реле и соленоидами, чтобы назвать несколько. В этом How To мы просто включим, а затем выключим светодиод. Это может показаться простым bu с этими знаниями, вы уже можете построить много вещей! Вам понадобится компьютер с последовательным портом или последовательным интерфейсом USB-конвертера. Я использую адаптер USB для RS-232. Узнайте больше о RS-232 в Википедии.
Для более глубокого чтения в USART, конфигурации и инициализации USART, пожалуйста, прочтите Microchip: AN774 - Асинхронная связь с PICmicro USART. Для программистов ASM эта ссылка дает несколько примеров исходного кода.
аппаратные средства
Первое, что мы делаем, это сделать блок-диаграмму. Это диаграмма нашего гаджета, разделенная на блоки. Это хорошая помощь, чтобы держать нас в курсе, и это дает нам представление о том, что мы хотим от нашей схемы.

Нам понадобятся:
- способ программирования нашего MCU, блока ICSP
- компьютер для связи с MCU, полудуплекс, компьютерный блок
- MCU для управления светодиодом / выходом, блок MCU
- для просмотра светодиодного / выходного блока
Светодиод / выходной блок могут быть светодиодами, вентиляторами, реле или соленоидами или любой другой предмет, который вы хотите контролировать. Один важный вопрос, который вам нужно решить, - убедиться, что ваш MCU имеет порт USART. Мы используем PIC16F628A, у которого есть один порт. Ножки 7 и 8 IC - соответственно PORTBbits. RB1 и PORTBbits. RB2. Если вы используете другой MCU, вы должны принять это во внимание.
Когда вы нарисуете свою схему, вам понадобится спецификация компонентов. Техническое описание для PIC16F628A можно найти здесь. Это будет вашим проводником, когда вы застрянете. Другое IC-техническое описание находится здесь: MAX232CPE.
Аппаратное рукопожатие не рассматривается в этой схеме. Чтобы удовлетворить аппаратное квитирование, вам нужно наложить несколько перемычек на X2:

Когда блок-диаграмма сделана, мы проведем схему:

Нажмите на изображение для лучшего разрешения.
Объяснение блока
блок | Описание |
---|---|
Мощность | Этот блок основан на регуляторе LM7805. Это линейный регулятор. С некоторыми конденсаторами он регулирует напряжение, необходимое для получения постоянного 5 В постоянного тока. |
ICSP | Это заголовок 1x5, используемый для программирования PIC16F628A. В этой настройке я использую PICkit3. |
микроконтроллер | Это наш PIC16F628A, «мозг». |
Вывод | Это ИС MAX232. Это связано с ПОС и компьютером. Светодиод также находится под выходным блоком. |
Список запчастей
Это скриншот файла списка. Файл создается EagleCAD.

После того, как аппаратное обеспечение создано, пришло время для программного обеспечения.
Программного обеспечения
При написании программного обеспечения у вас должно быть техническое описание аппаратного обеспечения. Моя настройка позволяет мне иметь спецификацию на одном экране, пока у меня есть среда программирования на другом экране. Таким образом, я могу получить доступ к таблице данных за считанные секунды.
Это основано на MPLAB X IDE и компиляторе XC8. Все можно скачать бесплатно на сайте //www.microchip.com. Хорошая привычка комментировать код, когда вы его пишете. Когда вы напишете это, вы можете подумать, что вспомните, что делают все строки, и вы можете на следующий день или на оставшуюся часть недели. Но как насчет месяца? Вы все еще помните? Используйте комментарии. Они сэкономят много работы позже, а другие будут вам благодарны. Следующий код достаточно хорошо прокомментирован, поэтому нет необходимости проходить его по строкам. Итак, без дальнейших церемоний, здесь идет:
// INCLUDES #include <stdio.h> #include <stdlib.h> #include <xc.h> #include <stdbool.h> // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled) #pragma config LVP = ON // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) // DEFINITIONS #define _XTAL_FREQ 16000000 // Tell the compiler that we are useing 16MHz // GLOBAL VARIABLES unsigned int choice; // Variable to hold user choice bool getchar_active = false; // Boolean variable // FUNCTION PROTOTYPE void interrupt tc_int(void); void UART_init(void); unsigned char getch(); unsigned char getche(void); void showMenu(void); // FUNCTIONS void UART_init(void){ TXSTAbits. BRGH = 0; // Setting BRGH to use LOW speed TXSTAbits. SYNC = 0; // Setting async mode TXSTAbits. TX9 = 0; // Setting 8-bit transmission RCSTAbits. CREN = 1; // Enable continious receive SPBRG = 25; // Setting the SPBRG register to use 16MHz with BRGH 0 PIE1bits. RCIE = 1; // USART receive interrupt enable RCSTAbits. SPEN = 1; // Enable serial port TXSTAbits. TXEN = 1; // Enable transmit return; } unsigned char getch() { getchar_active = true; // Boolean variable set to true while(getchar_active) // While true continue; // Carry - on return RCREG; // return the value in RCREG } unsigned char getche(void){ unsigned char c; putch(c = getch()); return c; } void putch(unsigned char byte){ // Adding Carrier Return and Line feed while(!TXSTAbits. TRMT); TXREG = byte; if ('\n'==byte){ while (!TXSTAbits. TRMT); TXREG = '\r'; } return; } void interrupt tc_int(void){ if(RCIE & RCIF) // Check RC Inter bit & Inter Flag { getchar_active = false; RCREG; } return; } void showMenu(){ printf("\n\n*****************************************************\n"); printf("** PIC, MAX232 and PC communication demo **\n"); printf("*****************************************************\n"); printf("\n\t1. LED on.\n"); printf("\t2. LED off.\n"); printf("Your choice: "); } /* * THIS IS THE MAIN PROGRAM */ int main(int argc, char** argv) { TRISA = 0b00000000; // All output PORTB = 0b00000000; // All low TRISB = 0b00000110; // RB1 & RB2 set as input ref datasheet PORTB = 0b00000000; // All low UART_init(); // Initialize the UART INTCONbits. PEIE = 1; // Enable peripheral interrupt INTCONbits. GIE = 1; // Enable global interrupt do { showMenu(); // Show awesome menu choice = getchar(); // Assign char from getchar to choice switch(choice){ // Menu options case '1': printf("\n\n\t\t** Led is ON **\n"); PORTBbits. RB3 = 1; break; case '2': printf("\n\n\t\t** Led is OFF **\n"); PORTBbits. RB3 = 0; break; default: printf("\n\n\t\t** Invalid choice. RTFM:-D **\n\n"); break; } } while (choice !=3); return (EXIT_SUCCESS); }
Скачать код
Если исходный код компилируется без ошибок или предупреждений, вы можете запрограммировать MCU и подключить его к компьютеру. Откройте свою любимую программу последовательной связи и используйте 9600-8-N-1 для настроек порта. Примените питание к цепи, и вы увидите небольшое меню на экране. Он работает как в Windows, так и в Linux. Посмотрите короткое видео в конце.
Вывод
Мы использовали PIC16F628A и MAX232 для управления светодиодом с ПК. Мы не использовали много аппаратного обеспечения, и у нас не было много кода. Мы не удосужились заставить наши собственные библиотеки писать на UART-порт: либо мы использовали стандартную функцию printf. Наш код использовал 9% памяти данных PIC и 21% памяти программы. Вы можете загрузить исходный код в нижней части этой страницы.
Фотографии и видео

Конкурентоспособная схема

Часть микроконтроллера.

Часть MAX232.
Попробуйте этот проект сами! Получить спецификацию.