Микроконтроллеры PIC16 имеют универсальный синхронно-асинхронный приемопередатчик USART, с помощью которого можно реализовать передачу информации между компьютером и микроконтроллером. Передача данных по USART осуществляется поочередно по одному биту, поэтому данный интерфейс называют последовательным, логические уровни сигналов обычно соответствуют уровням логики ТТЛ, КМОП и т.д. На компьютере UART (асинхронный последовательный интерфейс) реализован в виде интерфейса RS-232 через последовательный порт (COM) компьютера. Основное отличие интерфейса RS-232 заключается в величине логических уровней сигнала, логическому “0” соответствует положительное напряжение +5…15В, логической “1” отрицательной напряжение -5…15В. Такие уровни были выбраны для улучшения помехоустойчивости и увеличения дальности связи.
В современных компьютерах и ноутбуках, как правило, COM порт отсутствует, в этом случае можно воспользоваться специальным переходником USB-COM (преобразователь интерфейса USB – RS232), что я и сделал. В моем случае переходник реализован на основе чипа FTDI, при желании его можно изготовить самостоятельно с помощью специализированных микросхем FT232, PL2303 и т д.
Выход передатчика обозначается символами TхD (Tx), вход приемника RxD (Rx), на разъеме COM порта компьютера выход TxD соответствует 3-му выводу, вход RxD 2-му выводу, 5-й вывод общий провод (GND). При подключении двух устройств по UART, выход передатчика 1-го устройства соединяют с входом приемника 2-го устройства, и соответственно выход передатчика 2-го устройства с входом приемника 1-го устройства. Интерфейс UART (асинхронный) позволяет одновременно вести прием и передачу информации между устройствами, в отличие от USRT (синхронный интерфейс). Как было сказано выше, передача данных осуществляется последовательно по битам, через равные промежутки времени, поэтому оба устройства должны быть настроены на одинаковую скорость и режим работы, то есть синхронизация в данном случае осуществляется по времени, соответственно требования к точности временных задержек должны быть высокими.
Для подключения к ноутбуку по UART в качестве примера я использовал микроконтроллер PIC16F628A, схема представлена ниже:
Преобразователь USB-COM , которым я воспользовался, выдавал следующие уровни напряжения: логической “1” соответствовал уровень отрицательного напряжения -6,5В; логическому “0” положительное +6,5В, что соответствует стандарту интерфейса RS-232, поэтому для согласования уровней микроконтроллера и переходника я установил транзисторы VT1, VT2. Для передачи логической “1” (от микроконтроллера на преобразователь) по стандарту RS-232 необходимо создать отрицательное напряжение, что было сделано мной в самом начале тестирования, с помощью генератора импульсов на таймере NE555 и диодно-конденсаторной схеме. Потом как выяснилось, нулевое напряжение преобразователь воспринимает так же, как и отрицательное, поэтому надобность в источнике отрицательного напряжения отпала.
Чтобы задействовать COM порт на компьютере (в случае использования переходника USB-COM создается виртуальный COM порт), можно запустить стандартную программу HyperTerminal (терминал), которая отсылает на COM порт ASCII коды символов введенных с клавиатуры. Принятые данные программа также преобразует в символы в соответствии с таблицей ASCII. Для визуализации принятых данных от ноутбука, к микроконтроллеру подключены светодиоды HL1-HL4 и цифровое табло на драйвере MC14489AP. Светодиоды зажигаются при нажатии соответствующих кнопок на цифровой клавиатуре ноутбука (цифры 1-4), цифровое табло отображает значение принятого байта. При нажатии кнопки SB1 микроконтроллер отправляет на ноутбук фразу “PIC Alive ”.
Теперь рассмотрим сам код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sec equ 20h ;перечисление регистров общего назначения Sec1 equ 21h ;присвоение названий адресам регистров nomer equ 22h ; scetbit equ 23h ; perem equ 24h ; var equ 25h ; desiat equ 26h ; shet equ 27h ; priem equ 28h ; sotni equ 29h ; edin equ 2Ah ; reg equ 2Bh ; flag equ 2Ch ; W_TEMP equ 7Eh ; STATUS_TEMP equ 7Fh ; #DEFINE knp1 PORTA,2 ;присвоение названий линиям ввода-вывода #DEFINE clk PORTA,7 ;микроконтроллера #DEFINE datax PORTA,0 ; #DEFINE cs PORTA,1 ; #DEFINE led4 PORTB,4 ; #DEFINE led3 PORTB,5 ; #DEFINE led2 PORTB,6 ; #DEFINE led1 PORTB,7 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Применение модуля USART ;Частота тактового генератора 4 МГц, (внутренний тактовый генератор) машинный цикл 1 мкс org 0000h ;начать выполнение программы с адреса 0000h goto Start ;переход на метку Start ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Подпрограмма обработки прерываний org 0004h ;начать выполнение подпрограммы с адреса 0004h movwf W_TEMP ;сохранение значений ключевых регистров swapf STATUS,W ; clrf STATUS ; movwf STATUS_TEMP ; movf RCREG,W ;считывание байта полученного по USART из movwf priem ;регистра приемника RCREG и запись в регистр ;priem bsf flag,0 ;установка флага получения байта (0-й бит ;регистра flag) swapf STATUS_TEMP,W ;восстановление содержимого ключевых регистров movwf STATUS ; swapf W_TEMP,F ; swapf W_TEMP,W ; ; retfie ;выход из подпрограммы обработки прерывания ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Основная программа Start clrf PORTB ;очистка выходных защелок портов A и B clrf PORTA ; movlw b'00000111' ;выключение компараторов movwf CMCON bsf STATUS,RP0 ;выбрать 1-й банк movlw b'00001111' ;настройка линий ввода\вывода порта B movwf TRISB ;RB0,RB1,RB2,RB3 - на вход, остальные на выход movlw b'01111100' ;настройка линий ввода\вывода порта A movwf TRISA ;RA0,RA1,RA7 - на выход, остальные на вход movlw 0x19 ;запись числа 0x19 в регистр SPBRG для задания movwf SPBRG ;скорости обмена USART, для частоты тактового ;генератора в 4МГц скорость составит 9600 бит/сек movlw b'00100100' ;настройка модуля USART: выбор асинхронного movwf TXSTA ;высокоскоростного режима USART, ;настройка модуля передатчика USART: 8-ми битная ;передача, разрешение передачи bcf STATUS,RP0 ;выбрать 0-й банк movlw b'10010000' ;настройка модуля USART: включение модуля USART movwf RCSTA ;настройка модуля приемника USART: 8-ми битный ;прием, разрешение приема clrf flag ;очистка регистра flag bsf STATUS,RP0 ;выбрать 1-й банк bsf PIE1,RCIE ;разрешение прерываний от приемника USART bcf STATUS,RP0 ;выбрать 0-й банк bsf INTCON,PEIE ;разрешение прерывания периферийных модулей bsf INTCON,GIE ;глобальное разрешение прерываний ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;цикл опроса кнопки и флага получения байта oproskn1 btfsc knp1 ;опрос кнопки knp1 goto dalee1 ;кнопка не нажата: переход на метку dalee1 kn1 call pausknp ;для опроса флага получения байта по USART btfss knp1 ;кнопка нажата: переход на подпрограмму message goto kn1 ;для отправки данных по USART call message ; dalee1 btfsc flag,0 ;опрос флага получения байта по USART goto priemviv ;флаг установлен: переход на метку priemviv call pausknp ;флаг не установлен: вызов подпрограммы паузы goto oproskn1 ;переход на метку oproskn1, для опроса кнопки priemviv movf priem,W ;копирование числа из регистра priem в регистр movwf var ;var, для дальнейшей обработки call svet ;вызов подпрограммы управления светодиодами call vivod ;вызов подпрограммы вывода содержимого регистра ;var на цифровой индикатор bcf flag,0 ;сброс флага получения байта goto oproskn1 ;переход на метку oproskn1, для опроса кнопки ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;подпрограмма управления светодиодами svet movlw .49 ;проверка содержимого регистра var на соответствие xorwf var,W ;числу 49 (ASCII код цифры 1) btfss STATUS,Z ; goto l1 ;нет соответствия: переход на метку l1 bsf led1 ;есть соответствие: включаем светодиод led1 bcf led2 ;остальные выключаем bcf led3 ; bcf led4 ; return ;выход из подпрограммы l1 movlw .50 ;проверка содержимого регистра var на соответствие xorwf var,W ;числу 50 (ASCII код цифры 2) btfss STATUS,Z ; goto l2 ;нет соответствия: переход на метку l2 bcf led1 ;есть соответствие: включаем светодиод led2 bsf led2 ;остальные выключаем bcf led3 ; bcf led4 ; return ;выход из подпрограммы l2 movlw .51 ;проверка содержимого регистра var на соответствие xorwf var,W ;числу 51 (ASCII код цифры 3) btfss STATUS,Z ; goto l3 ;нет соответствия: переход на метку l3 bcf led1 ;есть соответствие: включаем светодиод led3 bcf led2 ;остальные выключаем bsf led3 ; bcf led4 ; return ;выход из подпрограммы l3 movlw .52 ;проверка содержимого регистра var на соответствие xorwf var,W ;числу 52 (ASCII код цифры 4) btfss STATUS,Z ; goto l4 ;нет соответствия: переход на метку l4 bcf led1 ;есть соответствие: включаем светодиод led4 bcf led2 ;остальные выключаем bcf led3 ; bsf led4 ; return ;выход из подпрограммы l4 bcf led1 ;нет соответствия числам 49,50,51,52 bcf led2 ;выключаем все светодиоды bcf led3 ; bcf led4 ; return ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;подпрограмма отправки символов из таблицы данных по USART message clrf nomer ;очистка регистра nomer (счетчик символов) a2 call table ;вызов подпрограммы таблицы данных movwf TXREG ;запись символа полученного из таблицы данных bsf STATUS,RP0 ;в регистр передатчика USART a1 btfss TXSTA,TRMT ;опрос бита TRMT на факт окончания передачи goto a1 ;по USART bcf STATUS,RP0 incf nomer,F ;инкремент регистра nomer (счетчик символов) ;для получения следующего символа из таблицы ;данных movlw .10 ;проверка содержимого регистра nomer на xorwf nomer,W ;соответствие числу 10 btfss STATUS,Z ; goto a2 ;нет соответствия: переход на метку a2 return ;есть соответствие: выход из подпрограммы ;все числа из таблицы данных переданы table movlw high tab ;подпрограмма извлечения символов из таблицы movwf PCLATH ;данных movf nomer,W ; addlw low tab ; btfsc STATUS,C ; incf PCLATH,F ; movf nomer,W ; addwf PCL,F ; tab dt 'P', 'I', 'C', ' ', 'A'; ;таблица данных с символами dt 'l', 'i', 'v', 'e', ' '; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;подрограмма вывода содержимого регистра var на цифровое табло vivod ................. ; ................. ; ................. ; return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;подпрограмма паузы pausknp movlw .20 ;пауза 15 мс movwf Sec1 ; p3 movlw .255 ; movwf Sec ; p2 decfsz Sec,F ; goto p2 ; decfsz Sec1,F ; goto p3 ; return ; ; end ;конец всей программы ; |
В основной программе сначала идет настройка линий ввода/вывода микроконтроллера, линии RB1/RX, RB2/TX настраиваются на вход для работы модуля USART. Далее идет настройка скорости передачи данных по USART, путем записи числа 0х19 в регистр скорости обмена SPBRG. В даташите на микроконтроллер приведена таблица, где рассчитаны значения скорости обмена в зависимости от частоты тактового генератора, режима (высокоскоростной, низкоскоростной, синхронный, асинхронный) а также от числа, загружаемого в регистр SPBRG, там же приведены формулы для расчета скорости обмена. В данном примере частота тактового генератора равна 4 МГц (внутренний тактовый генератор), режим асинхронный высокоскоростной, числу 0х19 будет соответствовать скорость обмена в 9615 бит/сек, что незначительно отличается от стандартной скорости 9600 бит/сек, ошибка в процентном соотношении составит +0,16%.
Далее идет настройка регистра управления и статуса передатчика TXSTA (находится в 1-ом банке), здесь установкой бита BRGH выбираем высокоскоростной режим, сбросом битов SYNC и TX9 устанавливаем асинхронный режим работы USART и 8-ми битную передачу, устанавливая бит TXEN разрешаем передачу данных. После этого настраиваем регистр управления и статуса приемника RCSTA, сбрасывая бит RX9 устанавливаем 8-ми битный прием, установкой битов CREN и SPEN разрешаем прием и включаем модуль USART. На этом настройку USART можно считать завершенной.
В приемнике главным является сдвиговый регистр RSR, после получения стопового бита, данные переписываются из RSR в регистр RCREG, после чего устанавливается флаг прерывания RCIF в регистре PIR1, само прерывание можно разрешить или запретить битом RCIE регистра PIE1. Флаг прерывания RCIF сбрасывается аппаратно, при чтении регистра RCREG. Регистр RCREG представляет собой двухуровненвый буфер, то есть может принять два байта, при этом необходимо считать его два раза. Если регистр RCREG полон, а в RSR пришел 3-й байт, устанавливается флаг переполнения приемника OERR в регистре RCSTA, приемник при этом отключается. Для сброса флага переполнения, необходимо запретить прием, то есть сбросить бит CREN.
Я организовал прием данных на прерываниях, после приема байта, по флагу RCIF вызывается подпрограмма обработки прерываний, где данные из регистра RCREG переписываются в регистр хранения priem, далее устанавливаем флаг получения байта (0-й бит) в дополнительном регистре flag, который опрашиваем в основной программе. Можно было пойти другим путем, опрашивать флаг прерывания RCIF в основной программе, но в этом случае при большом периоде опроса, приемник может переполниться и отключится. В случае с прерываниями переполнения не произойдет, максимум можно потерять несколько байтов, если в основной программе период опроса флага получения байта (0-й бит регистра flag) большой.
В основной программе происходит опрос кнопки и флага получения байта, если флаг установлен, содержимое регистра priem переписывается во временный регистр var, далее вызывается подпрограмма управления светодиодами (svet), в которой содержимое регистра var проверяется на совпадение с числами 49, 50, 51, 52. Этим числам соответствуют символы 1, 2, 3, 4 (десятичные цифры) из таблицы ASCII. Если в подпрограмме svet обнаружено совпадение, то зажигается соответствующий светодиод из HL1-HL4, остальные гаснут, при отсутствии совпадений выключаются все светодиоды. Далее вызывается подпрограмма вывода (vivod) содержимого регистра var на цифровое табло из семисегментных индикаторов, после возврата сбрасывается флаг получения байта, затем выполняется подпрограмма паузы (15 мс), после чего происходит переход на метку oproskn1, для очередного цикла опроса.
При нажатии кнопки SB1 вызывается подпрограмма message, которая отправляет фразу “PIC Alive ” через USART на ноутбук. Для сокращения кода символы размещены в таблице данных, всего 10 символов, порядковый номер символов хранится в регистре nomer. Перед каждым вызовом таблицы (подпрограмма table) регистр nomer инкрементируется, для извлечения следующего символа, после чего отправляется по USART. Одновременно с этим выполняется проверка равенства содержимого регистра nomer числу 10, если есть соответствие, происходит выход из подпрограммы message, то есть все символы переданы.
В передатчике главным является сдвиговый регистр TSR, буфером передатчика является регистр TXREG, в который загружают данные для передачи. После передачи стопового бита предыдущего байта, в регистр TSR передаются новые данные из регистра TXREG, при этом выставляется флаг прерываний TXIF в регистре PIR1, само прерывание можно разрешить или запретить битом TXIE регистра PIE1. Флаг прерывания TXIF сбрасывается аппаратно, после загрузки новых данных в TXREG. Аналогичным образом состояние регистра TSR отображает флаг TRMT регистра TXSTA, флаг устанавливается при опустошении TSR.
В моем варианте, символы, извлеченные из таблицы данных, загружаются в регистр TXREG, после чего происходит опрос флага TRMT, если флаг установлен (байт передан, TSR пуст), выполняем извлечение следующего символа. Вместо флага TRMT, можно опрашивать флаг прерываний TXIF, получим такой же результат. Чтобы не затрачивать процессорное время на опрос флагов, можно организовать передачу данных на прерываниях, то есть загружать регистр TXREG в подпрограмме обработки прерываний.
Перейдем к рассмотрению настроек программы HyperTerminal. Создаем новое подключение (File – New Connection) и задаем ему любое имя, например 111, переходник USB-COM при этом должен быть подключен. В следующем окне выбираем COM порт, далее необходимо настроить параметры порта: выставляем скорость передачи 9600 бит/сек, 8 бит данных, без проверки четности, один стоповый бит, и отключаем управление потоком. После этого в левом нижнем углу должна появиться надпись “Подключено” (Connected). Далее заходим в свойства созданного подключения (File – Properties), выбираем вкладку настройки и нажимаем кнопку “ASCII Setup”. В открывшемся окне ставим галочку для отображения введенных символов на экран (Echo typed characters locally), и еще одну галочку для дополнения символа возврата каретки переводом строк (Send line ends with line feeds), проще говоря, чтобы при нажатии клавиши Enter переходить на новую строку. Вот в принципе и все, можно отправлять и принимать данные, все отображается в окне программы. Ниже представлены скриншоты с настройками программы:
Вместо HyperTerminal, можно воспользоваться еще одной удобной программой под названием Terminal v1.9b by Bray. Здесь все настройки представлены в одном окне, имеется встроенная таблица символов ASCII, также программа умеет строить графики по принятым данным в диапазоне от 0 до 255.
Ниже на видеоролике можно просмотреть результат работы по подключению микроконтроллера PIC16F628A к ноутбуку через переходник USB-COM:
Прошивка МК и исходник
Модель Proteus 8.1 SP1
Программа HyperTerminal
Программа Terminal v1.9b by Bray
Подскажите пожалуйста, как организовать прием байта, сравнение с эталоном, если совпадает принять следующий, если нет выход и так принять до 10 байт. Что то у меня не получается. Ваши примеры на передачу и опрос кнопок (11 шт.) у меня отлично работают. Спасибо вам.
не совсем понял что именно вам надо, опишите конкретнее в подробностях вашу задачу.
Насколько я понял вам надо принять до 10 информационных байт, причем информационный байт идет после эталонного? то есть эталонный – информационный- эталонный -информационный… И как понять принять до 10 байт? то есть из всех принятых байтов обнаружить 10 эталонных и после каждого из них принять информационный байт?
Ну эту задачу я буду рассматривать на основе кода рассмотренного в этой статье, прием байтов по прерываниям. Для хранения 10 информационных байт надо воспользоваться косвенной адресацией, в области перечисления регистров общего назначения надо задать начальный адрес для хранения этих 10 байт, к примеру data1 equ 2D
Для приема этих 10 байт создать подпрограмму priem10, в ней идет прием 10 информ. байт и сохранение их в регистры.
После выхода из подпрограммы в регистрах 2D-36 будут лежать 10 принятых байт.
Причем в таком варианте микроконтроллер будет занят только выполнением данной подпрограммы, другие задачи выполнять не сможет
Нет, немного не так. Эталонные байты хранятся в памяти, например в ячейках 0х20 – 0х29. Они записываются при загрузке, вот с ними и надо сравнивать. Я управляю преобразователем частоты Mitsubishi, отправляю ему команду (допустим изменить частоту), а он отвечает. Если команда правильная он отправляет один ответ, если в команде ошибка – другой. Ответ при правильной команде всегда один и тот же, типа “все правильно”. Вот эти 10 байт при правильной команде я и проверяю, вывожу на LCD OK, иначе ERROR.
то есть отправляете правильную команду, затем получаете ответ, проверяете его и если он верный, то далее принимаете 10 байт и сравниваете их с эталонными?
Совершенно верно.
а если все принятые 10 байт совпали с эталонными то что дальше? это что типа идентификация (проверка на правильность) пакета байт? а если какой то не совпал? например 5-й принятый байт…
Дальше вывод “ОК” на LCD и снова на опрос кнопок. Проверяется 1 байт, а остальные несут информацию о преобразователе ( № преобразователя и частота). Они просто записываются в память, откуда можно их считать и вывести на LCD.
Сейчас (с помощью ваших примеров) программа работает, только не проводится проверка ответа инвертора. Стоп, пуск, реверс и 8 разных частот (оборотов двигателя). Можно оставить и так но хочется сделать все правильно.
Для чего это сделано. У обычно преобразователя все это есть(цепляй к соответствующим контактам кнопки и все), но мне достался с управлением по сети CClink . На нем только контакты для этой сети и разъем RS485. Через него можно настраивать инвертор, его я и использую RS232RS485.
Есть ли среда разработка для PIC контроллеров для быстрого получения результата , с какими-то готовыми библиотеками или удобным скриптовым языком (по типу как в ардуино используется “processing”). А то у меня осталась сигнализация в доме (там все на Пиках), хотел ее задействовать.
Не могу ничего подсказать, я программирую PIC-и на ассемблере в MPLAB, другими способами пока не интересовался.
Классный проект!
Если можно, хотелось бы увидеть передачу данных не только в сторону PIC16F628 но и в сторону PC.
(То есть, что бы с микроконтроллера биты с данными отображались на Terminal v1.9b )
Приветствую, в данном проекте на компьютер просто пересылается фраза “PIC Alive”. Вы что подразумеваете под битами данных? Передавать можно поток байтов (числа).
Добрый день!
Конечно же байты данных. Я описался.
Таблицу в иходнике с надписью PIC Alive вижу, подпрограмму отправки символов из таблицы данных по USART то же вижу. А почему то в PROTEUS на терминале ничего нет.
Вы отладку программы в чём делаете?( MPLAB)
Куда можно скинуть проект . Может я чего то не полностью понял.
Добрый день!
Всё разобрался.
Невнимательность кнопку на RA2 забыл нарисовать.
Всё запустилось. Но только символы на терминале маленько не правильно отображаются.
Но это скорее всего связано с тем что я использую MAX232.
Я выложил модель в Proteus, там все работает.
У Вас установлен Proteus 8.1.
А у меня установлен Proteus 7.2 по этой причине открыть проект я не могу.
Поэтому пришлось проект в Proteus создавать заново.
Привет!
Но ведь ножки №№ 15-16 для кварца,а у тебя №16 на цифровой индикатор?
Вот как в схеме – https://radiokot.ru/circuit/digital/security/31/
Или я ошибаюсь?
Приветствую!
Выводы 15, 16 (RA6, RA7) универсальные, они могут функционировать как обычные цифровые линии ввода/вывода, когда в конфигурации микроконтроллера выбран режим внутреннего тактового генератора.
Да-да,я это уже понял)))
Сижу как-раз изучаю это,а тут и ты ответил)
А не подскажешь,в той схеме,что я ссылку дал (частотник для ассинхронного дв.) там автор в конце статьи дал и прошивку для PIC.
А вот как проверить эту прошивку на ошибку?
Может он туда ошибку занес случайно (или специально)?
Можно попробовать собрать схему в Proteus, и провести эмуляцию. Ну или собрать схему в реальности и проверить, больше никак.
Ок! Буду пробовать в Proteus – первый раз в жизни)
Скачал Протеус-демоверсию только.
Установил.
Открыл.
Обалдел.
Удалил.
Там все по не-нашему,ничего не понимаю.
Буду паять реальную,но без высоковольтной части,только МП и его всю обвязку.Нагружу выходы его на светодиоды.
Авось будет видно моргание светиков,как на Вашем видео)
Скачал 7-ю версию,ключи активации,русификатор.
Теперь хоть стало понятно что и как.