Схема, которую мы собираемся нарисовать, показана ниже. Может показаться, что это будет довольно трудоёмким занятим. Однако некоторые её части похожи (если быть точным, четыре фильтра на операционных усилителях), что даёт возможность использовать средства копирования блока.
Схема руководства
Разное
Интересно
Если у вас нет жидкого канифольного флюса, его легко изготовить самостоятельно.
В небольшом количестве спирта растворяют кусочки канифоли до образования темно-коричневой жидкости. Наносят такой флюс на место пайки кисточкой.
Похожие инструкции
Система Kicad — это пакет прикладных программ для автоматизированной разработки электрических схем и проектирования печатных плат, который работает в следующих операционных системах:
PROTEUS УРОК 3 первая схема
• LINUX
• Windows XP
• Mac OS
Просмотров: 2640
Sprint-Layout является простым в использовании программным обеспечением для разработки односторонних, двусторонних и многослойных печатных плат (PCB).
Просмотров: 838687
Multisim-это единственный в мире эмулятор схем, который позволяет вам создавать лучшие продукты за минимальное время.
Просмотров: 444080
Комплексный пакет программ Cadsoft EAGLE — незаменимое решение для разработки печатных плат.
Просмотров: 165989
ARES — графический редактор печатных плат со встроенным менеджером библиотек и автотрассировщиком ELECTRA, автоматической расстановкой компонентов на печатной плате.
Просмотров: 286815
Программный пакет DipTrace представляет собой полнофункциональную систему для разработки принципиальных схем и печатных плат.
Просмотров: 127632
Источник: radio-hobby.org
PROTEUS симуляция работы электронной схемы
Hello world — Proteus + MPLAB
Работайте так, словно деньги не имеют для Вас никакого значения.
I2C LCD и микроконтроллер для вывода на экран. Для повторения потребуются компьютер на Windows, программа Proteus для проектирования и запуска, программа MPLAB для сборки кода.
Сам проект был взят из simple-circuit.com.
Под катом много картинок.
Для начала создадим новый проект в Proteus.
Далее выбираете размер рабочей области для схемы, мне вполне хватило А4.
Не создаем PCB Layout (так как нам не нужна печатная плата для устройства).
Далее выбираем наш микропроцессор и компилятор.
После нескольких нажатий далее, попадаем на рабочий стол программы.
Для добавления новых элементов нам нужно перейти в меню «Component mode» (с левой стороны, чуть ниже курсора). После чего на свободном поле выбираем мышкой — Pick from Laibraries.
Если библиотека элементов не доступна, то запустите Proteus с правами администратора (например, кликнув правой клавишей по ярлыку на рабочем столе и выбрав соответствующий пункт меню).
В конечном итоге вы должны составить примерно следующую схему.
Земля и + добавляются щелчком по свободному месту — выбрать Place — Terminal — GROUND или POWER (после чего изменить свойства питания на VDD).
После чего необходимо будет установить MPLAB. А также плагин для компилятора, в нашем случае хватит XC8.
Перейдём к созданию нашего нового проекта.
После чего наш проект будет располагаться по умолчангию в C:Usersимя_пользователяMPLABXProjectsимя_проекта.
В левой части экрана нам нужно будет создать/добавить файл в source files.
main.c — основная программа
Так же в папку проекта стоит добавить драйвер LCD дисплея .
/********************************************************************************** * I2C_LCD.c * * MPLAB XC8 compiler LCD driver for I2C LCDs with HD44780 compliant controllers. * * https://simple-circuit.com/ * * * *********************************************************************************/ #pragma warning disable 520 #include #define LCD_FIRST_ROW 0x80 #define LCD_SECOND_ROW 0xC0 #define LCD_THIRD_ROW 0x94 #define LCD_FOURTH_ROW 0xD4 #define LCD_CLEAR 0x01 #define LCD_RETURN_HOME 0x02 #define LCD_ENTRY_MODE_SET 0x04 #define LCD_CURSOR_OFF 0x0C #define LCD_UNDERLINE_ON 0x0E #define LCD_BLINK_CURSOR_ON 0x0F #define LCD_MOVE_CURSOR_LEFT 0x10 #define LCD_MOVE_CURSOR_RIGHT 0x14 #define LCD_TURN_ON 0x0C #define LCD_TURN_OFF 0x08 #define LCD_SHIFT_LEFT 0x18 #define LCD_SHIFT_RIGHT 0x1E #define LCD_BACKLIGHT 0x08 #define LCD_NOBACKLIGHT 0x00 #ifndef LCD_TYPE #define LCD_TYPE 2 // 0=5×7, 1=5×10, 2=2 lines #endif __bit RS; uint8_t i2c_addr, backlight_val = LCD_BACKLIGHT; void I2C_Init(uint32_t i2c_clk_freq); void I2C_Start(); void I2C_Stop(); void I2C_Write(uint8_t i2c_data); void LCD_Write_Nibble(uint8_t n); void LCD_Cmd(uint8_t Command); void LCD_Goto(uint8_t col, uint8_t row); void LCD_PutC(char LCD_Char); void LCD_Print(char* LCD_Str); void LCD_Begin(uint8_t _i2c_addr); /********************** I2C functions **************************/ void I2C_Init(uint32_t i2c_clk_freq) < SSPCON = 0x28; // configure MSSP module to work in I2C mode SSPADD = (_XTAL_FREQ/(4 * i2c_clk_freq)) — 1; // set I2C clock frequency SSPSTAT = 0; >void I2C_Start() < while ((SSPSTAT 0x1F)); // wait for MSSP module to be free (not busy) SEN = 1; // initiate start condition >void I2C_Stop() < while ((SSPSTAT 0x1F)); // wait for MSSP module to be free (not busy) PEN = 1; // initiate stop condition >void I2C_Write(uint8_t i2c_data) < while ((SSPSTAT 0x1F)); // wait for MSSP module to be free (not busy) SSPBUF = i2c_data; // update buffer >void I2C_Repeated_Start() < while ((SSPSTAT 0x1F)); // wait for MSSP module to be free (not busy) RSEN = 1; // initiate repeated start condition >uint8_t I2C_Read(uint8_t ack) < uint8_t _data; while ((SSPSTAT 0x1F)); // wait for MSSP module to be free (not busy) RCEN = 1; while ((SSPSTAT 0x1F)); // wait for MSSP module to be free (not busy) _data = SSPBUF; // read data from buffer while ((SSPSTAT 0x1F)); // wait for MSSP module to be free (not busy) // send acknowledge pulse ? (depends on ack, if 1 send, otherwise don’t send) ACKDT = !ack; ACKEN = 1; return _data; // return data read >/********************** end I2C functions **********************/ void Expander_Write(uint8_t value) < I2C_Start(); I2C_Write(i2c_addr); I2C_Write(value | backlight_val); I2C_Stop(); >void LCD_Write_Nibble(uint8_t n) < n |= RS; Expander_Write(n __delay_us(1); Expander_Write(n | 0x04); __delay_us(1); Expander_Write(n __delay_us(100); >void LCD_Cmd(uint8_t Command) < RS = 0; LCD_Write_Nibble(Command LCD_Write_Nibble((Command void LCD_Goto(uint8_t col, uint8_t row) < switch(row) < case 2: LCD_Cmd(LCD_SECOND_ROW + col — 1); break; case 3: LCD_Cmd(LCD_THIRD_ROW + col — 1); break; case 4: LCD_Cmd(LCD_FOURTH_ROW + col — 1); break; default: // case 1: LCD_Cmd(LCD_FIRST_ROW + col — 1); >> void LCD_PutC(char LCD_Char) < RS = 1; LCD_Write_Nibble(LCD_Char LCD_Write_Nibble((LCD_Char void LCD_Print(char* LCD_Str) < uint8_t i = 0; RS = 1; while(LCD_Str[i] != ‘