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

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Сб сен 01, 2012 22:06:18

Ariadna-on-Line писал(а):Буду очень признателен, если кто уточнит, что такое загрузка процессора. В процентах наверно, но от чего?
Откройте диспетчер задач и там увидите.

Ariadna-on-Line писал(а):И как, например, в Дельфи или в Визуал Бейсике накатать соответствующую программулину?
Чем имеющаяся не подошла?
По сравнению с дельфи, программа значительно меньше весит, а по сравнению в VB, не требует рантайма, поэтому переписывание на эти языки, весьма сомнительное занятие, т. к. вообще нет никаких преимуществ.

Если нужно, могу накатать DLL, которая будет возвращать текущую загрузку процессора.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Сб сен 22, 2012 20:50:00

Мурик-у. Лет 15 назад я взял грех на душу - послав подальше одного буржуинского программиста, предложившего купить у него DLL-ку на 300кбайт, вместо прямого ответа на заданный вопрос,- как регулировать громкость звуковой карты. Пришлось самому искать инфу. Оказалось - достаточно всего одной команды на Бейсике. Так что уж лучше назвали бы API-функцию Виндоуса. Вы ведь ими воспользовались? Здесь ведь всё-таки форум, а не торговый центр. Без обид.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Сб сен 22, 2012 23:35:25

Ariadna-on-Line писал(а):Так что уж лучше назвали бы API-функцию Виндоуса. Вы ведь ими воспользовались? Здесь ведь всё-таки форум, а не торговый центр.
Не хотите DLL в несколько кило? Ладно вот исходник функции CpuUsage().
Спойлер
Код:
;----------
;----------
;
; CPU monitor for Win9x/ME + NT/2k/XP
;
;----------
;----------
;
;----------
;                                                           INCLUDE           ;
;----------
;%INCLUDE "macros.asm"

;----------
;                                                           EXPORTS           ;
;----------
GLOBAL PB_InitCPUmonitor
GLOBAL PB_CloseCPUmonitor
GLOBAL PB_CpuUsage


;----------
;                                                           CONSTANTS         ;
;----------
;  WinNT/2k/XP
SYSTEM_BASICINFORMATION       equ 0h
SYSTEM_PERFORMANCEINFORMATION equ 2h
SYSTEM_TIMEINFORMATION        equ 3h
NO_ERROR                      equ 0h
;   Win9x/ME
STANDARD_RIGHTS_ALL           equ 1F0000h
KEY_QUERY_VALUE               equ 1h
KEY_SET_VALUE                 equ 2h
KEY_CREATE_SUB_KEY            equ 4h
KEY_ENUMERATE_SUB_KEYS        equ 8h
KEY_NOTIFY                    equ 10h
KEY_CREATE_LINK               equ 20h
SYNCHRONIZE                   equ 100000h
READ_CONTROL                  equ 20000h
STANDARD_RIGHTS_READ          equ READ_CONTROL
HKEY_DYN_DATA                 equ 80000006h
;#KEY_ALL_ACCESS = (#STANDARD_RIGHTS_ALL|#KEY_QUERY_VALUE|#KEY_SET_VALUE|#KEY_CREATE_SUB_KEY|#KEY_ENUMERATE_SUB_KEYS|#KEY_NOTIFY|#KEY_CREATE_LINK) & (~#SYNCHRONIZE)
;#KEY_READ = (#STANDARD_RIGHTS_READ|#KEY_QUERY_VALUE|#KEY_ENUMERATE_SUB_KEYS|#KEY_NOTIFY) & (~#SYNCHRONIZE)
KEY_ALL_ACCESS                equ 0F003Fh
KEY_READ                      equ 20019h
ERROR_SUCCESS                 equ 0h

;----------
;                                                           MACROS            ;
;----------
%macro BEEP 2
EXTERN _Beep@8
    PUSH dword %2
    PUSH dword %1
    CALL _Beep@8
%endmacro

%macro ProcedureReturn 1
    MOV  dword EAX, %1
    RET
%endmacro

%macro NtQuerySystemInformation 4
    PUSH dword %4
    PUSH dword %3
    PUSH dword %2
    PUSH dword %1
    CALL [adr_NtQuerySystemInformation]
%endmacro

%macro RegOpenKeyEx 5
    PUSH dword %5
    PUSH dword %4
    PUSH dword %3
    PUSH dword %2
    PUSH dword %1
    CALL [adr_RegOpenKeyEx]
%endmacro

%macro RegQueryValueEx 6
    PUSH dword %6
    PUSH dword %5
    PUSH dword %4
    PUSH dword %3
    PUSH dword %2
    PUSH dword %1
    CALL [adr_RegQueryValueEx]
%endmacro

%macro RegCloseKey 1
    PUSH dword %1
    CALL [adr_RegCloseKey]
%endmacro

%macro INVOKE 2-9 ;Macro INVOKE, same as stdcall
%define _j %1
%rep %0-1
    %rotate -1
    push dword %1      ; added DWORD for Win32
%endrep
    call _j
%endmacro



;----------
;                                                           IMPORTS           ;
;----------
;EXTERN PB_StringBase
EXTERN _GetVersionExA@4                 ; KERNEL32
EXTERN _LoadLibraryA@4                  ; KERNEL32
EXTERN _FreeLibrary@4                   ; KERNEL32
EXTERN _GetProcAddress@8                ; KERNEL32

SEGMENT .text USE32 CLASS=CODE
;----------
;                                                           InitCPUmonitor()  ;
;----------
PB_InitCPUmonitor:

     .IsWinNT:
         MOV  dword [OSVERSIONINFO.dwOSVersionInfoSize], 148  ; SizeOf(OSVERSIONINFO)
         INVOKE _GetVersionExA@4, OSVERSIONINFO
         CMP  dword [OSVERSIONINFO.dwPlatformId], 2           ; 2 = WinNT
         JNE  .NTchecked
              MOV  dword [IsWinNT], 1                          ; IsWinNT = 1 = WinNT
      .NTchecked:

          CMP  dword [IsWinNT], 1
          JNE  NEAR _Win9x
       .WinNT:                                                 ; WinNT
             INVOKE _LoadLibraryA@4, _ntdll
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JNZ  _LoadLib         ; EAX = 0:
              ret                  ; Return if LoadLibrary failed
          _LoadLib:
             MOV  dword [DLL_HANDLE], EAX
             INVOKE _GetProcAddress@8, EAX, _NtQuerySystemInformation
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JNZ  _ProcAdr        ; EAX = 0:
              ret                  ; Return if GetProcAddress failed
          _ProcAdr:
             MOV  dword [adr_NtQuerySystemInformation], EAX

             NtQuerySystemInformation SYSTEM_TIMEINFORMATION, SYSTEM_TIME_INFORMATION, 32, 0
             OR   dword EAX,EAX   ; Is EAX = 0 ??
             JZ   _OK1
                ;MessageRequester("ERROR", "Error While initializing the system's time!", 0)
                BEEP 1400, 5000
                ProcedureReturn 0
          _OK1:
             NtQuerySystemInformation SYSTEM_PERFORMANCEINFORMATION, SYSTEM_PERFORMANCE_INFORMATION, 312, 0
             OR   dword EAX,EAX   ; Is EAX = 0 ??
             JZ   _OK2
                ;MessageRequester("ERROR", "Error While initializing the CPU's idle time!", 0)
                BEEP 1000, 5000
                ProcedureReturn 0
          _OK2:
             ; store new CPU's idle And system time
             MOV  dword EAX, [SYSTEM_PERFORMANCE_INFORMATION.liIdleTime_dwLow]
             MOV  dword [liOldIdleTime_dwLow],EAX
             MOV  dword EAX, [SYSTEM_PERFORMANCE_INFORMATION.liIdleTime_dwHigh]
             MOV  dword [liOldIdleTime_dwHigh], EAX

             MOV  dword EAX, [SYSTEM_TIME_INFORMATION.liKeSystemTime_dwLow]
             MOV  dword [liOldSystemTime_dwLow],EAX
             MOV  dword EAX, [SYSTEM_TIME_INFORMATION.liKeSystemTime_dwHigh]
             MOV  dword [liOldSystemTime_dwHigh], EAX

             ProcedureReturn 1

       _Win9x:                                                 ; Win9x
          ; Win9x/ME
      ; start the counter by reading the value of the 'StartStat' key

             INVOKE _LoadLibraryA@4, _advapi32
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JNZ  _LoadLibOK      ; EAX = 0:
              ret                  ; Return if LoadLibrary failed
          _LoadLibOK:
             MOV  dword [DLL_HANDLE], EAX
             INVOKE _GetProcAddress@8, EAX, _RegOpenKeyEx
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JNZ  _ProcAdr01      ; EAX = 0:
              ret                  ; Return if GetProcAddress failed
          _ProcAdr01:
             MOV  dword [adr_RegOpenKeyEx], EAX

             INVOKE _GetProcAddress@8, [DLL_HANDLE], _RegQueryValueEx
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JNZ  _ProcAdr02      ; EAX = 0:
              ret                  ; Return if GetProcAddress failed
          _ProcAdr02:
             MOV  dword [adr_RegQueryValueEx], EAX

             INVOKE _GetProcAddress@8, [DLL_HANDLE], _RegCloseKey
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JNZ  _ProcAdr03      ; EAX = 0:
              ret                  ; Return if GetProcAddress failed
          _ProcAdr03:
             MOV  dword [adr_RegCloseKey], EAX


             RegOpenKeyEx HKEY_DYN_DATA, _string01, 0, KEY_ALL_ACCESS, hKey
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JZ  _DONE01         ; EAX = 0:
                   ;MessageRequester("ERROR", "Error While initializing counter",0)
                   ProcedureReturn 0
          _DONE01:
              MOV  dword [dwDataSize], 4    ;'Length of Long
              RegQueryValueEx [hKey], _string02, 0, dwType, dwCpuUsage, dwDataSize
              RegCloseKey [hKey]
              ; get current counter's value
              RegOpenKeyEx HKEY_DYN_DATA, _string03, 0, KEY_READ, hKey
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JZ  _DONE02         ; EAX = 0:
                   ;MessageRequester("ERROR", "Error While opening counter key", 0)
                   ProcedureReturn 0
          _DONE02:
              ProcedureReturn 1
RET

;----------
;                                                           CloseCPUmonitor() ;
;----------
PB_CloseCPUmonitor:
          CMP  dword [IsWinNT], 1
          JNE  NEAR .Win9x
       .WinNT:                                                 ; WinNT
          INVOKE _FreeLibrary@4, [DLL_HANDLE]
          ProcedureReturn 1
       .Win9x:                                                 ; Win9x
          RegCloseKey [hKey]
          ;'stopping the counter
          RegOpenKeyEx HKEY_DYN_DATA, _string04, 0, KEY_ALL_ACCESS, hKey
              OR   dword EAX,EAX   ; Is EAX = 0 ??
              JZ  _DONE_01         ; EAX = 0:
                   ;MessageRequester("ERROR", "Error While stopping counter", 0)
                   ProcedureReturn 0
       _DONE_01:
          MOV  dword [dwDataSize], 4   ;'length of Long
          RegQueryValueEx [hKey], _string02, 0, dwType, dwCpuUsage, dwDataSize
          RegCloseKey [hKey]
          ProcedureReturn 1
RET

;----------
;                                                           CpuUsage()        ;
;----------
PB_CpuUsage:
          CMP  dword [IsWinNT], 1
          JNE  NEAR _Win95
       .WinNT:                                                 ; WinNT
          NtQuerySystemInformation SYSTEM_BASICINFORMATION, SYSTEM_BASIC_INFORMATION, 44, 0
          OR   dword EAX,EAX   ; Is EAX = 0 ??
          JZ   .OK1
                 ;MessageRequester("ERROR", "Error While retrieving the number of processors!", 0)
                 ProcedureReturn -1
       .OK1:
          ; get new system time
          NtQuerySystemInformation SYSTEM_TIMEINFORMATION, SYSTEM_TIME_INFORMATION, 32, 0
          OR   dword EAX,EAX   ; Is EAX = 0 ??
          JZ   .OK2
                 ;MessageRequester("ERROR", "Error While retrieving the system's time!", 0)
                 ProcedureReturn -1
       .OK2:
          ; get new CPU's idle time
          NtQuerySystemInformation SYSTEM_PERFORMANCEINFORMATION, SYSTEM_PERFORMANCE_INFORMATION, 312, 0
          OR   dword EAX,EAX   ; Is EAX = 0 ??
          JZ   .OK3
                 ;MessageRequester("ERROR", "Error While retrieving the CPU's idle time!", 0)
                 ProcedureReturn -1
       .OK3:

          ;dbIdleTime = LI2Currency(SysPerfInfo.liIdleTime) - LI2Currency(liOldIdleTime)
          FILD qword [liOldIdleTime_dwLow]
          FILD qword [SYSTEM_PERFORMANCE_INFORMATION]
          FSUB ST0,ST1
          FSTP dword [dbIdleTime]
          FSTP dword [dbTemp]
          ;dbSystemTime = LI2Currency(SysTimeInfo.liKeSystemTime) - LI2Currency(liOldSystemTime)
          FILD qword [liOldSystemTime_dwLow]
          FILD qword [SYSTEM_TIME_INFORMATION+8]
          FSUB ST0,ST1
          FSTP dword [dbSystemTime]
          FSTP dword [dbTemp]

          ; CurrentCpuIdle = IdleTime / SystemTime
          ; If proc_CPUmonitor_dbSystemTime <> 0.0
          FLD    dword [dbSystemTime]
          MOV    dword [dbTemp],0
          FCOMP  dword [dbTemp]
          FNSTSW ax    ; FNSTSW ; Status Word
          TEST   ah,40h
          JNE    .Weiter_01
          ; proc_CPUmonitor_dbIdleTime = proc_CPUmonitor_dbIdleTime / proc_CPUmonitor_dbSystemTime
             FLD    dword [dbIdleTime]
             FDIV   dword [dbSystemTime]
             FSTP   dword [dbIdleTime]
       .Weiter_01:
          ; CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
          ; proc_CPUmonitor_dbIdleTime = 100 - (proc_CPUmonitor_dbIdleTime *100) / proc_CPUmonitor_SysBaseInfo\bKeNumberProcessors + 0.5
          FLD    dword [dbIdleTime]
          MOV    dword [dbTemp],1120403456
          FMUL   dword [dbTemp]
          ;MOV    dword [dbTemp],100
          ;FIMUL  dword [dbTemp]
          XOR    dword EAX, EAX
          MOV    byte  AL, [SYSTEM_BASIC_INFORMATION.bKeNumberProcessors]
          MOV    dword [dbTemp], eax
          FIDIV  dword [dbTemp]
          FCHS
          MOV    dword [dbTemp],1120468992
          FADD   dword [dbTemp]
          ;MOV    dword [dbTemp],100
          ;FIADD  dword [dbTemp]

          FSTP   dword [dbIdleTime]

          ; store new CPU's idle And system time
          MOV  dword EAX, [SYSTEM_PERFORMANCE_INFORMATION.liIdleTime_dwLow]
          MOV  dword [liOldIdleTime_dwLow],EAX
          MOV  dword EAX, [SYSTEM_PERFORMANCE_INFORMATION.liIdleTime_dwHigh]
          MOV  dword [liOldIdleTime_dwHigh], EAX

          MOV  dword EAX, [SYSTEM_TIME_INFORMATION.liKeSystemTime_dwLow]
          MOV  dword [liOldSystemTime_dwLow],EAX
          MOV  dword EAX, [SYSTEM_TIME_INFORMATION.liKeSystemTime_dwHigh]
          MOV  dword [liOldSystemTime_dwHigh], EAX

          ; FLOAT -> INTEGER
          ; because Result is Integer
          FLD   dword [dbIdleTime]
          FISTP dword [dbIdleTime]

          ProcedureReturn [dbIdleTime]

       _Win95:                                                 ; Win9x
          MOV  dword [dwDataSize], 4 ;'size of Long
          ; Query the counter
          RegQueryValueEx [hKey], _string02, 0, dwType, dwCpuUsage, dwDataSize
          ProcedureReturn [dwCpuUsage]
RET


[section .data]
  ALIGN  4
_ntdll:                                 db "ntdll.dll",0
_advapi32:                              db "advapi32.dll",0
_NtQuerySystemInformation:              db "NtQuerySystemInformation",0
_RegOpenKeyEx:                          db "RegOpenKeyExA",0
_RegQueryValueEx:                       db "RegQueryValueExA",0
_RegCloseKey:                           db "RegCloseKey",0
_string01:                              db "PerfStats\StartStat",0
_string02:                              db "KERNEL\CPUUsage",0
_string03:                              db "PerfStats\StatData",0
_string04:                              db "PerfStats\StopStat",0
IsWinNT:                                dd 0

[section .bss]
  ALIGN  4
; Variables for DLL-Functions
DLL_HANDLE:                             RESD 1
adr_NtQuerySystemInformation:           RESD 1
adr_RegOpenKeyEx:                       RESD 1
adr_RegQueryValueEx:                    RESD 1
adr_RegCloseKey:                        RESD 1

; winNT/2k/XP
liOldIdleTime_dwLow:                    RESD 1
liOldIdleTime_dwHigh:                   RESD 1
liOldSystemTime_dwLow:                  RESD 1
liOldSystemTime_dwHigh:                 RESD 1

dbIdleTime:                             RESD 1
dbSystemTime:                           RESD 1
dbTemp:                                 RESD 1

; win9x/ME
hKey                                    RESD 1
dwDataSize                              RESD 1
dwCpuUsage                              RESD 1
dwType                                  RESD 1

; Structures
OSVERSIONINFO:                          ; SIZE 148
.dwOSVersionInfoSize:                   RESD 1
.dwMajorVersion:                        RESD 1
.dwMinorVersion:                        RESD 1
.dwBuildNumber:                         RESD 1
.dwPlatformId:                          RESD 1
.szCSDVersion:                          times 128 RESB 1

SYSTEM_TIME_INFORMATION:                ; SIZE 32
.liKeBootTime_dwLow:                    RESD 1         ; liKeBootTime.myLARGE_INTEGER
.liKeBootTime_dwHigh:                   RESD 1
.liKeSystemTime_dwLow:                  RESD 1         ; liKeSystemTime.myLARGE_INTEGER
.liKeSystemTime_dwHigh:                 RESD 1
.liExpTimeZoneBias_dwLow:               RESD 1         ; liExpTimeZoneBias.myLARGE_INTEGER
.liExpTimeZoneBias_dwHigh:              RESD 1
.uCurrentTimeZoneId:                    RESD 1
.dwReserved:                            RESD 1

SYSTEM_PERFORMANCE_INFORMATION:         ; SIZE 312
.liIdleTime_dwLow:                      RESD 1           ; liIdleTime.myLARGE_INTEGER
.liIdleTime_dwHigh:                     RESD 1
.dwSpare:                               times 76 RESD 1  ; dwSpare.l[76] ; (0 To 75) As Long

SYSTEM_BASIC_INFORMATION:               ; SIZE 44
.dwUnknown1                             RESD 1
.uKeMaximumIncrement                    RESD 1
.uPageSize                              RESD 1
.uMmNumberOfPhysicalPages               RESD 1
.uMmLowestPhysicalPage                  RESD 1
.uMmHighestPhysicalPage                 RESD 1
.uAllocationGranularity                 RESD 1
.pLowestUserAddress                     RESD 1
.pMmHighestUserAddress                  RESD 1
.uKeActiveProcessors                    RESD 1
.bKeNumberProcessors                    RESB 1
.bUnknown2                              RESB 1
.wUnknown3                              RESW 1 ; INTEGER
Гуглите функцию NtQuerySystemInformation() и все что с ней связанно.
А если прога будет еще и на Win9x запускаться, то еще нужно с реестром работать.
Так что в данном случае, дело не ограничивается одной WinAPI функцией.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Пн сен 24, 2012 13:16:36

Мурик-у. Ого, я думал, что тут попроще. Ну чтож, спасибо, буду разбираться.
Но вопрос повторю, - поближе к нашим баранам. Написать программу для PICа там или AVRа, чтобы он сам посчитал степень своей загрузки. Именно это я собственно и хотел узнать. С уважухой.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Пн сен 24, 2012 19:07:34

Нужно узнать степень загрузки PIC или AVR контролера?
Тут и так все ясно - все время 100% потому что процессорах нет инструкций для пропуска тактов.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вт сен 25, 2012 22:32:35

1 Не, чёто тут не то. Например у них есть инструкция NOP. Ну будет проц 99% времени молотить через NOP-ы. Ну и какая же здесь полезная работа? Что есть на деле термин "загрузка процессора" - вот чего я не могу понять. 2 Разве процессор может пропускать такты? Можно хоть приблизительную ссылку на инфу о чем речь?

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вт сен 25, 2012 23:47:10

Ariadna-on-Line, рекомендую вам хоть немного ознакомится с инструкциями процессоров Intel x86-64.
Может тогда вы поймете чем отличается инструкция NOP.
Спойлерзанимает один бит, но ничего не значит, кроме как указатель инструкции. У неё нет операндов и она ничего не совершает.
От инструкции HLT.
Спойлерпрекращает выполнение инструкции и переводит прощессор в состояние остановки. Запущенное прерывание, отладочное исключение, BINIT, INIT или RESET продолжат выполнение. У этой инструкции нет операндов.
http://en.wikipedia.org/wiki/HLT
Может тогда вы поймете что выполняя инструкцию NOP, процессор все равно работает и его загрузка будет 100%, а вот выполнив инструкцию HLT, процессор начинает пропускать такты (засыпает) и поэтому "отдыхает". Его загрузка уменьшается, а в месте с ней и потребляемая мощность процессором.

Есть ли у PIC или AVR инструкция типа HLT?

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Ср сен 26, 2012 15:22:19

Мурик писал(а):Есть ли у PIC или AVR инструкция типа HLT?

Есть, к примеру у AVR есть аналогичная по назначению SLEEP.
Более того, SLEEP mode режимы можно переключать специальным регистром от обычного IDLE со свойствами как у Интела, до Power Save, StandBy и Power Down включительно.

Ariadna-on-Line писал(а):Написать программу для PICа там или AVRа, чтобы он сам посчитал степень своей загрузки.
А смысл? В многозадачных системах степень загрузки процессора одной задачей косвенно отражает, сколько ещё таких задач процессор может исполнять. В МК нет ни ОС, ни задач, и смысла в показателе "загрузка процессора" нет никакого. Хотите меньшего энергопотребления? Вводите периодически МК в SLEEP в основном цикле, если остаётся свободное время. А если МК в реалтайме занят вычислениями и выводом на индикатор, то о какой "загрузке" будет идти речь? Там всегда будет 100% :)

Да, и ещё один нюанс - чтобы посчитать загрузку процессора на ББ, вовсю используются специальные счётчики как внутри ОС, так и внутри самого процессора. В МК таких функций просто не предусмотрено.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Чт окт 04, 2012 23:56:44

Вношу ясность: Мне нет пока нужды писАть программу подсчета загруженности PIC или AVR-а. Я инженер-электроник просто хочу постигнуть техническую суть понятия "загруженность процессора", а не какие DLL-ки и API-шки использовать. Зрю, как сказать, в корЕнь. Надо вынести вопрос в другую тему пока модер не попер за флуд. Всё, спасибо всем ответившим.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Сб окт 13, 2012 22:05:58

headshotbacs получилось у вас запустить индикатор загрузки? Нормально работает?
Я собрал а у меня восновном показывает 0 реже проскакивают цифры, хотя в трее закрузка 5-20%

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вс окт 14, 2012 05:49:33

да, все нормально. может быть что-то с фьюзами.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вс окт 14, 2012 09:55:32

а какие фьюзы должны стоять?
если можна картинку.

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вс окт 14, 2012 17:57:13

Вот
Изображение
Вложения
pic16f628a.PNG
(12.82 KiB) Скачиваний: 1161

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вс окт 14, 2012 18:14:08

да всё так и стоит.
Может порт настраивать надо?

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вс окт 14, 2012 19:27:11

вроде не надо, по крайней мере я ничего не делал. вот сейчас глянул скорость 9600 битсек стоит. поставил на максимум, ничего не поменялось. почитай мои посты в начале, может что поможет

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вс окт 14, 2012 19:35:55

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

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вс окт 14, 2012 20:03:29

Без сигнала "OFF" показывает, всё нормально. А если подать сигнал то зажигается 0 во втором сегменте.
Спасибо буду пробывать без оптопары

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Пн окт 15, 2012 01:39:49

может чего-то напутал. ноль в последнем должен быть

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Вт окт 16, 2012 18:57:28

буду разбиратся

Re: Индикатор загрузки процессора на микроконтроллере PIC16

Пт окт 19, 2012 19:48:03

pioneer1234 писал(а):буду разбиратся

Оптопара нужна для развязки ком сигналов в ттл сигналы.поставь резюк и стабилитрон где-то 4.7 вольта и будет тебе счастье.
4.7 килоома.диод нужен для обрезания -12 вольт присутствующих в сом порту.
Ответить