Ir ao conteúdo

Posts recomendados

Postado

Estou iniciando um  projeto de comunicação serial em pic com um supervisório em java , mas antes fiz um simples código para apagar e acender um led no mesmo botão , só q não consigo apagá-lo , já tentei de tudo e nada deu certo!

Uso o compilador pic ccs 4.78 , proteus 8 , windows 7 64 bits.

projetopicledbotao.txt

Postado
  Em 06/10/2015 às 13:56, _xyko_ disse:

Não programo PIC, mas não está configurando o portb.0 como saída ao invés do portb.7 ?

set_tris_b (0b00000001);

 

O PIC é invertido se comparado aos AVR's  :D

 

Testei aqui e funcionou normalmente... A diferença é que a versão do CCS é a 5.046... Você pode postar o arquivo .lst?

 

# INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO(  VOID MAIN (){   INT a = 0;   set_tris_b (0b00000001);    WHILE (TRUE){         IF (input (pin_B0)) { //IF (input (pin_B0)==1) {         delay_ms (300);         a = a + 1;      }       IF (a == 1) {         delay_ms (50);         output_high (PIN_B7);      }       IF (a == 2) {         delay_ms (50);         output_low (PIN_B7);         a = 0;      }   }}
Postado
  Em 06/10/2015 às 16:26, test man*~ disse:

 

O PIC é invertido se comparado aos AVR's  :D

 

Testei aqui e funcionou normalmente... A diferença é que a versão do CCS é a 5.046... Você pode postar o arquivo .lst?

# INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO(  VOID MAIN (){   INT a = 0;   set_tris_b (0b00000001);    WHILE (TRUE){         IF (input (pin_B0)) { //IF (input (pin_B0)==1) {         delay_ms (300);         a = a + 1;      }       IF (a == 1) {         delay_ms (50);         output_high (PIN_B7);      }       IF (a == 2) {         delay_ms (50);         output_low (PIN_B7);         a = 0;      }   }}
  Citação

 

CCS PCM C Compiler, Version 3.245, 28193               05-out-15 17:12

               Filename: J:\Arquivos de programas\trabalhos\Nova pasta\ledpiscando.lst

               ROM used: 70 words (3%)

                         Largest free fragment is 1978

               RAM used: 7 (4%) at main() level

                         8 (5%) worst case

               Stack:    1 locations

*

0000:  MOVLW  00

0001:  MOVWF  0A

0002:  GOTO   019

0003:  NOP

.................... # INCLUDE <16f628a.h>

.................... //////// Standard Header file for the PIC16F628A device ////////////////

.................... #device PIC16F628A

.................... #list

....................  

.................... # USE DELAY (CLOCK=4000000)

0004:  MOVLW  23

0005:  MOVWF  04

0006:  MOVF   00,W

0007:  BTFSC  03.2

0008:  GOTO   018

0009:  MOVLW  01

000A:  MOVWF  78

000B:  CLRF   77

000C:  DECFSZ 77,F

000D:  GOTO   00C

000E:  DECFSZ 78,F

000F:  GOTO   00B

0010:  MOVLW  4A

0011:  MOVWF  77

0012:  DECFSZ 77,F

0013:  GOTO   012

0014:  NOP

0015:  NOP

0016:  DECFSZ 00,F

0017:  GOTO   009

0018:  RETLW  00

.................... # FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP

.................... # USE FAST_IO(B)

....................  

....................    VOID MAIN (){

0019:  CLRF   04

001A:  MOVLW  1F

001B:  ANDWF  03,F

001C:  MOVLW  07

001D:  MOVWF  1F

....................    INT a = 0;

001E:  CLRF   21

....................    set_tris_b (0b00000001);

001F:  MOVLW  01

0020:  TRIS   6

....................  

....................    WHILE (TRUE){

....................       IF(a=0){

0021:  CLRF   21

0022:  MOVF   21,F

0023:  BTFSC  03.2

0024:  GOTO   026

....................          output_low (PIN_B7);

0025:  BCF    06.7

....................       }    

....................       IF (input (pin_B0) == 1){

0026:  MOVLW  00

0027:  BTFSC  06.0

0028:  MOVLW  01

0029:  SUBLW  01

002A:  BTFSS  03.2

002B:  GOTO   035

....................          delay_ms (300);

002C:  MOVLW  02

002D:  MOVWF  22

002E:  MOVLW  96

002F:  MOVWF  23

0030:  CALL   004

0031:  DECFSZ 22,F

0032:  GOTO   02E

....................          a = a + 1;

0033:  MOVLW  01

0034:  ADDWF  21,F

....................       }

....................  

....................       IF (a == 1){

0035:  DECFSZ 21,W

0036:  GOTO   03B

....................          delay_ms (50);

0037:  MOVLW  32

0038:  MOVWF  23

0039:  CALL   004

....................          output_high (PIN_B7);

003A:  BSF    06.7

....................       }

....................  

....................       IF (a == 2){

003B:  MOVF   21,W

003C:  SUBLW  02

003D:  BTFSS  03.2

003E:  GOTO   044

....................          delay_ms (50);

003F:  MOVLW  32

0040:  MOVWF  23

0041:  CALL   004

....................          output_low (PIN_B7);

0042:  BCF    06.7

....................          a = 0;

0043:  CLRF   21

....................       }

....................  

....................    }

0044:  GOTO   021

....................    }

....................  

0045:  SLEEP

Configuration Fuses:

   Word  1: 3F61   XT NOWDT PUT NOPROTECT BROWNOUT MCLR NOLVP NOCPD

 

será que o  problema está na versão do ccs que estou usando?

será q tem problema com windows 7 64 bits?

o proteus eu estou usando o 8!

Postado
Você mudou o código ¬¬
 
Vê se iso resolve... Estou chutando!! =D
Se resolver eu falo o que eu acho que está acontecendo...
# INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO(                # BYTE TRISB  = 0X86             // <<<--- Adicionado# BIT  TRISB0 = TRISB.0          // <<<--- Adicionado# BIT  TRISB7 = TRISB.7          // <<<--- Adicionado  VOID MAIN (){   INT a = 0;   //set_tris_b (0b00000001);    // <<<--- Retirado   TRISB0 = 1;                   // <<<--- Adicionado PINO B0 COMO ENTRADA   TRISB7 = 0;                   // <<<--- Adicionado PINO B7 COMO SAÍDA      WHILE (TRUE){         IF (input (pin_B0)==1) {         delay_ms (300);         a = a + 1;      }       IF (a == 1) {         delay_ms (50);         output_high (PIN_B7);      }       IF (a == 2) {         delay_ms (50);         output_low (PIN_B7);         a = 0;      }   }}

 

Edit: O # USE FAST_IO( B ) continua, erro meu!

  • Membro VIP
Postado

@test man*~

Invertido no sentido dos bits?

É que por norma o bit menos significativo é o da direita, e como só o primeiro da direita está em 1  - set_tris_b (0b00000001); - , deduzi que fosse o portb.0 

Postado
  Em 06/10/2015 às 17:35, test man*~ disse:

 

Você mudou o código ¬¬
 
Vê se iso resolve... Estou chutando!! =D
Se resolver eu falo o que eu acho que está acontecendo...
# INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO(                # BYTE TRISB  = 0X86             // <<<--- Adicionado# BIT  TRISB0 = TRISB.0          // <<<--- Adicionado# BIT  TRISB7 = TRISB.7          // <<<--- Adicionado  VOID MAIN (){   INT a = 0;   //set_tris_b (0b00000001);    // <<<--- Retirado   TRISB0 = 1;                   // <<<--- Adicionado PINO B0 COMO ENTRADA   TRISB7 = 0;                   // <<<--- Adicionado PINO B7 COMO SAÍDA      WHILE (TRUE){         IF (input (pin_B0)==1) {         delay_ms (300);         a = a + 1;      }       IF (a == 1) {         delay_ms (50);         output_high (PIN_B7);      }       IF (a == 2) {         delay_ms (50);         output_low (PIN_B7);         a = 0;      }   }}

 

Edit: O # USE FAST_IO( B ) continua, erro meu!

 

Infelizmente não funcionou , eu acho meu  ccs bugou ou o proteus!

Postado

@_xyko_ Isso mesmo... :)  quando eu estava lendo o tutorial do Paulo Aphawk isso deu um nó na minha cabeça HEHE!!!

 

@fabiano aladin coloquei o CCS 4.78 para testar... Apesar de o PROTEUS mostrar um warning o circuito funcionou normalmente. Aparentemente o problema não está no CCS.

  • Membro VIP
Postado

tenho phd em pisca led

Um minimalista "Apagar e acender um led no mesmo botão..." acho que sem erro...

//pullup no circuito ou interno em RB1. Botão pro gnd#include "definições do mc"#define botao RB0#define led RB1void main(void){//setup geral do mc...TRISB=0b00000001;for(;{if (!botao) {while (!botao); led^=1;}}}

no proteus=ok. Na prática, ...debouncing

Postado

Então o problema está no proteus? estou usando duas versões a 8 e 7.7 e apresentam a mesma coisa!

Como faço para resolver isso?

Isso é bug de incompatibilidade com 64 bits?

Não sei nem como vou estudar  agora !

:(

  Em 06/10/2015 às 18:54, test man*~ disse:

@_xyko_ Isso mesmo... :)  quando eu estava lendo o tutorial do Paulo Aphawk isso deu um nó na minha cabeça HEHE!!!

 

@fabiano aladin coloquei o CCS 4.78 para testar... Apesar de o PROTEUS mostrar um warning o circuito funcionou normalmente. Aparentemente o problema não está no CCS.

Postado
  Em 06/10/2015 às 19:13, Isadora Ferraz disse:

tenho phd em pisca led

Um minimalista "Apagar e acender um led no mesmo botão..." acho que sem erro...

//pullup no circuito ou interno em RB1. Botão pro gnd#include "definições do mc"#define botao RB0#define led RB1void main(void){//setup geral do mc...TRISB=0b00000001;for(;{if (!botao) {while (!botao); led^=1;}}}

no proteus=ok. Na prática, ...debouncing

  Citação

 

# INCLUDE<16F877.h>

# USE DELAY (CLOCK=4000000)

# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP

# USE FAST_IO( B)

# define TRISB set_tris_b

# define botao PIN_B1

# define led PIN_B5

 VOID MAIN (){

 

   TRISB(0b00000010);

 

   

   

   

   WHILE (TRUE){

   

      IF (!BOTAO) {

         

      

        while (!BOTAO){

            (LED == 1);

      

        }

      }

   }

}

até coloquei o circuiro para ver se eu dei mole em algo.Mas nada funciona !Não consigo apagar e acender o led pelo mesmo botão ! espero q não seja bug do programa !

Postado

Tenta aí:

# INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO(  VOID MAIN (){   INT a = 0;   set_tris_b (0b00000001);    WHILE (TRUE){         IF (input (pin_B0)) { //IF (input (pin_B0)==1) {         delay_ms (300);         a = a + 1;	while(input (pin_B0));      }       IF (a == 1) {         delay_ms (50);         output_high (PIN_B7);      }   else       IF (a == 2) {         delay_ms (50);         output_low (PIN_B7);         a = 0;      }   }}

Se for apenas para alternar a saída,tente assim;

# INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO(  VOID MAIN (){   INT a = 0;   set_tris_b (0b00000001);    WHILE (TRUE){         IF (input (pin_B0))      {         delay_ms (300);         output_toggle(PIN_B7);   while(input (pin_B0));      }   }}
  • Membro VIP
Postado

Na boa, eu já teria montado este circuitinho mesmo é na prática.

Com meia dúzia de linhas está em dúvidas com um simulador, imagina quando fizer um programa com centenas ou milhares de linhas.

Sou do tempo em que simular era somente imaginar o funcionamento antes de montar.

  • Membro VIP
Postado

Defina melhor "nada funciona". Publique o circuito. você pode estar fazendo alguma cagadinha na "montagem". p.ex. deixando o pino reset aberto (se for isso.. puxão de orelha virtual). Rode passo a passo. Faça o led piscar com 0 libs externas. Algo como

void delay (unsigned int dl) //Se mc a 4Mhz...{while(dl--);//cada iteração deve dar alguns uS}  for(;{led^=1;delay(50000);}
  • Curtir 1
Postado
  Em 07/10/2015 às 09:30, _xyko_ disse:

Na boa, eu já teria montado este circuitinho mesmo é na prática.

Com meia dúzia de linhas está em dúvidas com um simulador, imagina quando fizer um programa com centenas ou milhares de linhas.

Sou do tempo em que simular era somente imaginar o funcionamento antes de montar.

o problema é que estou montando ainda um gravador serial , por alguns problemas não posso comprar um no devido momento!

 Já alterei até posição do resistor  do botão  e do led! e mesmo  assim nada de funcionar!

Será q algum problema por meu so ser 64 bits?talvez incompatibilidade do proteus ou ccs?

11v5kd4.png

 

  Citação

 

#INCLUDE <16f628a.h>

#USE DELAY (CLOCK=4000000)

#FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP

#USE FAST_IO(A)

#USE FAST_IO( B)

#define bt PIN_A0

#define led PIN_B7

 VOID MAIN (){

   INT a = 0;

   set_tris_a (0b00000001);

   set_tris_b (0b00000000);

   output_B(0b00000000);

   

   WHILE (TRUE){

   

    if(input(bt)==1){

    

   output_D(led =~led);//apresenta erro aqui mas seu fizer led=~led; também dá erro

    }

   }

}

  Em 07/10/2015 às 11:14, Isadora Ferraz disse:

 

Defina melhor "nada funciona". Publique o circuito. você pode estar fazendo alguma cagadinha na "montagem". p.ex. deixando o pino reset aberto (se for isso.. puxão de orelha virtual). Rode passo a passo. Faça o led piscar com 0 libs externas. Algo como

void delay (unsigned int dl) //Se mc a 4Mhz...{while(dl--);//cada iteração deve dar alguns uS}  for(;{led^=1;delay(50000);}
Postado

@fabiano aladin

Piscar um Led não tem segredo.

O Compilador CCS,faz muita coisa 'sozinho' para o programador,e não era para voce ter dificuldade.

Segue um Link funcionando,com simulador.

http://www.4shared.com/rar/Gy-40-Tvba/CCS_LED.html

 

O código é esse;

# INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO(  VOID MAIN (){   set_tris_b (0b00000000);   set_tris_a (0b00000001);   setup_comparator(NC_NC_NC_NC); //DESABILITA OS COMPARADORES ANALOGICO DESTE PIC    WHILE (TRUE){         IF (input(pin_A0))      {        output_toggle(PIN_B7);        while(input(pin_A0)); //ENQUANTO A TECLA ESTIVER PRESSIONADA,NADA FAZ      }         }}
Postado
  Em 07/10/2015 às 23:18, vtrx disse:

 

@fabiano aladin

Piscar um Led não tem segredo.

O Compilador CCS,faz muita coisa 'sozinho' para o programador,e não era para voce ter dificuldade.

Segue um Link funcionando,com simulador.

http://www.4shared.com/rar/Gy-40-Tvba/CCS_LED.html

 

O código é esse;

# INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO(  VOID MAIN (){   set_tris_b (0b00000000);   set_tris_a (0b00000001);   setup_comparator(NC_NC_NC_NC); //DESABILITA OS COMPARADORES ANALOGICO DESTE PIC    WHILE (TRUE){         IF (input(pin_A0))      {        output_toggle(PIN_B7);        while(input(pin_A0)); //ENQUANTO A TECLA ESTIVER PRESSIONADA,NADA FAZ      }         }}

Obrigado  pelo jeito errei feio a lógica mas vou continuar estudando!

Agradeço a ajuda de todos!!!

  • Membro VIP
Postado

você que pediu...

Simulador não é pra "vida" inteira. É só um pontapé inicial - aliás muitíssimo bem dado - num projeto eletro-eletrônico. Agiliza demais da conta o projeto de um pisca led.

E te digo mais... até mesmo projetos relativamente (na verdade extremamente) complexos e profissionais (de utilidade real). Vá por mim... experiência própria

 

Um ponto de vista pra te dar um pouco de razão é que um simulador pode custar milhares de dólares. Muito mais que um simples arduíno. Só por este motivo lhe dou o braço a torcer

A propósito, não gosto de arduíno, assemby e ccs (mudou sua vida placar alho kk)


ops! @_xyko_

achei que tinha dito que não gostava de simulador neste tópico. Perdão. Tudo bem se eu manter o que escrevei acima? (pode apagar se quiser!)


(confusão... está na pagina anterior. é que não gosto de clicar em "citar"...)

  • Membro VIP
Postado

Falei que não gosto e não confiiiiiiiiio!

Entende!


  Em 08/10/2015 às 13:34, test man*~ disse:

 

Tipo:
 
CCS: Excelente para aprender pois te da tudo na mão, ele faz tudo por você e mostra tudo certinho durante o debug (não existe versão free), você pode até usar ele dentro do MPLAB...
 
MikroC: Existe versão free, porém não mostra as variáveis corretamente durante o debug no MPLAB (pelo menos até hoje eu não consegui fazer ele mostrar)...
 
XC: Existe versão free mas além de não otimizar ele piora o código (versão free) adicionando vários GOTO que não fazem sentido algum...
 
Se o MikroC mostrasse as variáveis de forma correta durante o debug ele seria o mais interessante... Dei uma olhada no forum da MikroE e várias pessoas têm esse problema... O bacana seria o MikroC com o MikroProg, como não tenho o MikroProg prefiro o CCS mesmo (PIC16/18 dsPIC e PIC24) e o XC (PIC32)!
 
Meu ponto de vista (hobby)!

 

AINDA BEM QUE NÃO  FALOU DO BASCOM.

 

Tudo o que você falo conheco um pouco.

Mas será que tem algum doutorado pra falar sobre...

CARA... eu sempre te admiro , @test man*~

Pensa!!!!!

Visitante
Este tópico está impedido de receber novas respostas.

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!