Ir ao conteúdo
  • Cadastre-se

Anonymous Programmer

Membro Pleno
  • Posts

    67
  • Cadastrado em

  • Última visita

posts postados por Anonymous Programmer

  1. Pessoal estou tentando funcionar um motor de HDD em um PIC16F628A, preciso gerar 3 ondas quadradas para cada bobina em sequencia Ex:

     

    Estagio 1:

    BCF PORTB,RB1

    BCF PORTB,RB2

    BSF PORTB,RB3

     

    Estagio 2:

    BSF PORTB,RB1

    BCF PORTB,RB2

    BCF PORTB,RB3

     

    Estagio 3:

    BCF PORTB,RB1

    BSF PORTB,RB2

    BCF PORTB,RB3

     

    volta estagio 1

     

    porém da forma que planejei a alteração de frequência esta muito brusca travando o motor minha rotina de delay é a seguinte:

     delay:
            movfw tempo
            movwf contador1
            
        aux:
            movwf contador2
            decfsz contador1
            goto p_nao
            goto p_sim
        p_nao:
            nop
            nop
            nop
            nop
            nop
            nop
            nop
            nop
            nop
            nop
            decfsz contador2
            goto p_nao
            goto aux
        p_sim:
        return

     

    controlo o contador1 e contador2 a partir de interrupções, porém a frequência altera bruscamente travando o motor, existe alguma forma de controle do tempo em 0v e 5v precisa, tipo um PWM ? infelizmente o PIC que utilizo só tem 1 PWM e necessito de 3 ou simular elas de alguma forma..

     

      

  2.  

    #include p16f628a.inc>
    
    	__config _mclre_on & _lvp_off & _boden_off & _hs_osc & _wdt_off & _cp_off
    
    	#define bank0 bcf status,rp0
    	#define bank1 bsf status,rp0	
    	#define led porta,ra1
    	
    	org 0x0000
    	goto inicio
    	
    	inicio:
    	    bank1
    		bcf trisa,ra1
    		bcf option_reg,t0cs
    		bcf option_reg,psa
    		bsf option_reg,ps2
    		bsf option_reg,ps1
    		bsf option_reg,ps0
    		bcf intcon,t0if
    		bank0
    		bsf led
    		dnv:btfss intcon,t0if
    		goto nao
    		goto sim
    		
    		nao:
    			bcf intcon,t0if
    			goto dnv
    		sim:
    			btfsc led ;; = 0v
    			goto led_nao
    			goto led_sim
    			
    			led_nao:
    				bcf led
    				bcf intcon,t0if
    				goto dnv
    			led_sim:
    				bsf led
    				bcf intcon,t0if
    				goto dnv
    	end

    o codigo no proteus funciona normalmente, porém quando vou gravar o pic ele não pisca!

  3. Já concertei o problema ! resolve colocando resistor de pull-down no pino do botão, aqui segue os fuses porque agora estou com outra duvida @Isadora Ferraz, por curiosidade desliguei os fios terra do cristal e o PIC funcionou normalmente, retirei todo o cristal e capacitores  e o PIC funcionou normalmente :\  afinal das contas qual a funcionalidade do cristal ? já que sem ele funciona do mesmo jeito

     

    __config _HS_OSC & _LVP_OFF & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _BOREN_OFF & _CPD_OFF

  4. Pessoal comecei recentemente na programação de PIC e já mim deparo com um problema. 

     

    Meu código recebe um botão em RA0 e  1 LED no RA1 + outro LED no RB0 o codigo segue abaixo:

    #include <p16f628a.inc>
        #define bank0 BCF STATUS,RP0
        #define bank1 BSF STATUS,RP0
        
        #define BTN PORTA,RA0
        #define LED PORTA,RA1
        #define LED2 PORTB,RB0
        
        org 0x0000
        goto inicio
        org 0x0004
        retfie
        CBLOCK 0x0C
        
        ENDC
        
        inicio:
        bank1
        BSF TRISA,RA0
        BCF TRISA,RA1
        BCF TRISB,RB0
        bank0
        BSF LED
        de novo:BTFSC BTN
        goto btn_press
        goto btn_lib
        
        btn_press:
    	BSF LED
    	BCF LED2
    	goto de novo
        btn_lib:
    	BCF LED
    	BSF LED2
    	goto de novo
    END

    porém o PIC não esta executando esse código, o RA1 sempre fica ligado o RB0 fica piscando de forma aleatória ( passa varios segundos desligado da uma piscada rapida  e desliga ) 

     

    e como vocês podem ver no código o LED fica ligado ate apertar o botão, o LED2 liga assim que o botão é pressionado  

    desde já agradeço :D

     

    Infos: 

    PIC16F628A 

    Crystal Externo - 20mhz ligado a 2x capacitores de 22pf

    Leds - auto brilho, 3,3v + resistores de 62R

  5. Boa tarde galera, estou iniciando na programação de PIC começando com o 16f628a consigo colocar 5v em todos os pinos exceto o RA4 alguem poderia mim ajudar o porque disso?

     

    #include <p16f628a.inc>
      	list p=p16f628a
        #define bank0   BCF STATUS,RP0
        #define bank1   BSF STATUS,RP0
        #define LED1    PORTA,RA0
        #define Esp	    PORTA,RA4
        #define LED2    PORTA,RB7
        #define volt    PORTB,RB0
        __config _MCLRE_OFF
        org 0x0000
        goto main
        org 0x0004
        retfie
        
        
        main:
    	bank1
            BCF	TRISA,RA0 ;; RA0
    	BCF	TRISA,RA4 ;; RA4
    	BCF	TRISB,RB7
    	BCF	TRISB,RB0
    	bank0
    	BSF	LED1 ;; Ativa LED1
    	BSF	LED2 ;; Ativa LED2
    	BSF	volt ;; Ativa voltimetro
    	BSF	Esp  ;; Ativa RA4 
    	goto $
        end
        

     

  6. Responde um exercício recentemente para a faculdade... espero que te ajude!  

    #include <stdio.h>
    #include <locale.h>
    void main(){
    	setlocale(LC_ALL,"portugues");
    	int term1=0,term2=0,termx=0,razao;
    	int vetor[50];
    	printf("Digite o primeiro termo de uma PA: ");
    	scanf("%d",&term1);
    	fflush(stdin);
    	printf("Digite o segundo termo de uma PA: ");
    	scanf("%d",&term2);
    	fflush(stdin);
    	printf("Em qual posição do termo voce quer saber: ");
    	scanf("%d",&termx);
    	fflush(stdin);
    	razao = term2 - term1;
    	vetor[0] = term1;
    	vetor[1] = term2;
    	for(int aux=0;aux <=termx;aux++){
    		if(aux > 1){
    			vetor[aux] = vetor[aux-1] + razao;
    		}
    	}
    	printf("o valor no ponto %d é %d \n",termx,vetor[termx]);
    }

    nesse algoritmo utilizei um laço de repetição for(); porém você também pode fazer com while(); colocando if() para controlar a repetição tipo

     

    if(Termos da PA == QUANTIDADE DE TERMOS CALCULADOS){

        break; // PARA!

    }

  7. não podemos responder suas questões podemos auxiliar, pode ser em linguagem C puro ?

     

    Em C simplesmente declare 2 vetores

     

    char vetor1[10];

    char vetor2[10];

     

    preencha os vetores

    int aux = 0;

    while(1){

    if(aux == 10){

     scanf("%d",&vetor1[aux]);

    }

    aux++;

    }

    repete o processo com o vetor 2

     

    retira a media dos vetores

    int aux1=0,acumuladora=0;

    while(1){

       if(aux1 == 10){

           acumuladora = vetor1[aux1];

          acumuladora = acumuladora + acumuladora;

       }

    }

     

    e repete o processo

     

    • Curtir 2
  8. cara realmente o site da microsoft é confuso porém extremamente útil você só precisa de um inglês básico. Aprenda a utiliza-lo se você vai no futuro ser da área de programação interpretar as documentações das APIs é fundamental 

  9. Bom o que pra utilizar a função ReadProcessMemory ou WriteProcessMemory da API kernel32.dll você precisa passar para ela argumentos que ela necessita.

     

    Analisando o primeiro poste que te mandei. Vejamos 

     

    ReadProcessMemory( _In_  HANDLE  hProcess, _In_  LPCVOID lpBaseAddress, _Out_ LPVOID  lpBuffer, _In_  SIZE_T  nSize, _Out_ SIZE_T  *lpNumberOfBytesRead );

     

    Primeiro Argumento ela pede uma HANDLE de um Processo ( um identificador de um processo ) como vamos conseguir esse identificador através de programação? utilizando a função GetWindowThreadProcessId sem progamação você pode simplesmente visualizar no monitor de recursos do seu computador vai ter uma lista de programas em execução é seus respectivos PID ( Processo Identificador ). porém para automatizar nosso programa utilizaremos a API.

     

     

    Analisando a Função GetWindowThreadProcessId elá requer uma HANDLE de uma função e uma Variavel para retornar o valor do PID. ou seja ainda temos que encontrar outro valor primeiro.. que fica a cargo da função FindWindow. a função FindWindow requer uma Classe é o nome da Janela somente. por tanto vamos la!. lembrando que ela retorna o valor da nossa HANDLE.

     

    HWND hProcess;

    hProcess = FindWindow(0,"Calculadora"); (a função vai procurar a PID do processo cujo nome da janela seja Calculadora, o primeiro argumento seria a classe. coloca 0 o segundo argumento o Nome da janela em char ) assim ja temos o valor da HWND. que e necessario para Preencher  a GetWindow.....

     

    DWORD hPid;

    GetWindowThreadProcessId(hProcess,&hPid); ( primeiro argumento HWND ja capturado. segundo argumento uma variavel para receber o PID de retorno ).

     

     

    agora que ja temos o hPid vamos executar o processo.

     

    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,0,hPid);

     

    pronto agora ja temos o HANDLE para a WriteProcess... é ReadProcess...

     

    ReadProcessMemory(hProcess,(LPVOID)0x00400000,&VariavelParaReceberValor,256,BytesLidos);

     

    Portanto primeiro argumento a HANDLE Segundo Local onde você quer ler os bytes. Terceiro Total de bytes a ser lido. Quarto Uma variavel para receber o valor de total de bytes lidos!. é pronto pra Usar a WriteProcess.. você simplesmente em vez de colocar uma variavel para receber o valor. coloca uma variavel com o valor.

     

     

    utilize sempre o site da microsoft para conhecer melhor as funções da API do windows. ela é de extrema importância para qualquer programador.

    • Curtir 1
  10. Não é que todos programas estão sujeitos a serem hackeados. .-. alguns não permitem ser executado pela função ReadProcessMemory nem WriteProcessMemory. para poder ler voce utiliza:

     

    BOOL WINAPI ReadProcessMemory( _In_  HANDLE  hProcess, _In_  LPCVOID lpBaseAddress, _Out_ LPVOID  lpBuffer, _In_  SIZE_T  nSize, _Out_ SIZE_T  *lpNumberOfBytesRead );

     

     

    pra alterar utiliza

    BOOL WINAPI WriteProcessMemory( _In_  HANDLE  hProcess, _In_  LPVOID  lpBaseAddress, _In_  LPCVOID lpBuffer, _In_  SIZE_T  nSize, _Out_ SIZE_T  *lpNumberOfBytesWritten );

     

    • Curtir 1
  11. #include <stdio.h>
    #include <stdlib.h>
    
    void CadastrarAlunos();
    void ListarAllAlunos();
    void PesguisarCodigo();
    void ExcluirCodigo();
    
    struct Alunos{
    	int ID;
    	char Nome[256];
    	char Email[100];
    	char telefone[10];
    };
    void main(int args,char * params[]){
    	int recebido = 0;
    	dnv:printf("MENU \n");
    	printf("1. Cadastrar Novo Aluno \n");
    	printf("2. Listar todos os alunos cadastrados \n");
    	printf("3. Pesguisar por codigo \n");
    	printf("4. Excluir por codigo \n");
    	printf("Escolher: ");
    	scanf("%d",&recebido);
    	switch(recebido){
    		case 1:
    			CadastrarAlunos();
    		break;
    		
    		case 2:
    			ListarAllAlunos();
    		break;
    		case 3:
    			PesguisarCodigo();
    		break;
    		case 4:
    			ExcluirCodigo();
    		break;
    	}
    	system("cls");
    	goto dnv;
    }
    void CadastrarAlunos(){
    
    }
    void ListarAllAlunos(){
    	
    }
    void PesguisarCodigo(){
    	
    }
    void ExcluirCodigo(){
    	
    }

    Agora fica mais fácil. aqui ta toda parte de interface. você agora so vai capturar os dados utilizando scanf a estrutura ja ta ai. so falta mesmo capturar os dados e ser feliz :D

    • Curtir 1
  12. Montar notebook isso não existe. você pode comprar um notebook é depois customizar da forma que deseja os Slot's disponíveis HD Slot's de memoria alguns vem com MINI PCI-Express. que eu tenha conhecimento os processadores é GPU's gráficas já vem soldada na placa-mãe. ou seja não tem como alterar o que você pode fazer é comprar um notebook bom que supra suas necessidades é altere o HD é memoria ram! valeu Falou

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...