-
Posts
28 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que Gregorio Leão postou
-
PIC Não consigo ler uma string pela UART do PIC16F887
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@.if Aquele quadradinho parece o caractere de final de string, '\0'. Creio que eu esteja certo porque já tentei aumentar um laço de repetição de maior no laço for onde ocorre a leitura da string. Mas eu gostaria de saber porque sempre há um caractere perdido no meio da transmissão? -
PIC Não consigo ler uma string pela UART do PIC16F887
Gregorio Leão postou um tópico em Microcontroladores
Estou tentando fazer um código para ler um string e retorná-la pela UART do PIC16F887. Entretanto, o microcontrolador não retorna a string de forma correta. Estou utilizando o Arduino como intermediário para poder exibir o resultado no monitor serial da IDE Arduino. Codigo do PIC16F887: /* * File: ESP-01.c * Author: Gregorio Leão * * Created on 23 de Dezembro de 2021, 15:54 */ // PIC16F887 Configuration Bit Settings // 'C' source line config statements // CONFIG1 #pragma config FOSC = HS // Oscillator Selection bits (LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD) #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = OFF // Brown Out Reset Selection bits (BOR disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal/External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) #pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming) // CONFIG2 #pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) #pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include <xc.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define _XTAL_FREQ 20000000 void Inicia_RS232(){ SPBRG = 129; TXSTAbits.BRGH= 1; BAUDCTLbits.BRG16 = 0; TXSTAbits.SYNC = 0; RCSTAbits.SPEN = 1; INTCONbits.GIE = 1; INTCONbits.PEIE = 1; PIE1bits.TXIE = 1; PIE1bits.RCIE = 1; TXSTAbits.TXEN = 1; RCSTAbits.CREN = 1; } void Escreve_RS232(char dado){ while(!PIR1bits.TXIF); TXREG = dado; } char Le_RS232(){ while(!PIR1bits.RCIF); if(RCSTAbits.OERR){ RCSTAbits.CREN = 0; RCSTAbits.CREN = 1; } return RCREG; } void EscrevePalavra_RS232(char dados[]){ for(int i = 0; i < strlen(dados); i++){ Escreve_RS232(dados[i]); } } void Verifica_Funcionamento(){ char AT[] = "AT"; int guia = 0; char *verificacao = NULL; char *aux; char recebido[10]; do{ if(guia == 9){ for(int i = 0; i < 10; i++){ recebido[i] = 0; } } __delay_ms(1000); EscrevePalavra_RS232(AT); if(guia == 9){ guia = 0; } if(!BAUDCTLbits.RCIDL){ recebido[guia] = Le_RS232(); guia++; } Escreve_RS232('\n'); EscrevePalavra_RS232(recebido); Escreve_RS232('\n'); aux = recebido; verificacao = strstr(aux, "OK"); }while(verificacao == NULL); } void Zera_Palavra(char dado[], int TAM){ for(int i = 0; i < TAM; i++){ dado[i] = 0; } } void LePalavra_RS232(char dado[], int tamanho){ int i; for(i = 0; i < tamanho; i++){ dado[i] = Le_RS232(); } } void main(){ Inicia_RS232(); TRISDbits.TRISD2 = 0; PORTDbits.RD2 = 0; char letra; char recebido[8]; while(1){ Zera_Palavra(&recebido, 8); LePalavra_RS232(&recebido, 8); __delay_ms(1000); EscrevePalavra_RS232(recebido); Escreve_RS232('\n'); } } Codigo carregado no Arduino que estou utilizando de intermediário para usufruir de recursos de sua IDE: #include "SoftwareSerial.h" SoftwareSerial ESP_Serial(5, 11); // RX, TX void setup(){ Serial.begin(9600); ESP_Serial.begin(9600); } void loop(){ if (ESP_Serial.available()){ Serial.write(ESP_Serial.read()); } if (Serial.available()){ ESP_Serial.write(Serial.read()); } } Resultado obtido após enviar a palavra "gregorio" para o PIC: -
PIC PWM do PIC16F887 não funciona
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@.if O PWM do PIC funcionou, o problema estava em não ter um atraso entre um ciclo e outro, fazendo com que o microcontrolador tentasse executar todos os duty cicles de uma só vez. Muito obrigado pela ajuda. -
Ola, o PWM do meu pic16f887 não está funcionando. Codigo: /* * File: PWM.c * Author: Gregorio Leão * * Created on 12 de Janeiro de 2022, 23:36 */ // PIC16F887 Configuration Bit Settings // 'C' source line config statements // CONFIG1 #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD) #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = OFF // Brown Out Reset Selection bits (BOR disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal/External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) #pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming) // CONFIG2 #pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) #pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include <xc.h> #include <stdio.h> #include <stdlib.h> #define _XTAL_FREQ 20000000 void Inicia_PWM(){ INTCONbits.GIE = 1; INTCONbits.PEIE = 1; PIE1bits.TMR2IE = 1; TRISCbits.TRISC2 = 1; PR2 = 255; CCP1CONbits.CCP1M0 = 0; CCP1CONbits.CCP1M1 = 0; CCP1CONbits.CCP1M3 = 1; CCP1CONbits.CCP1M2 = 1; CCP1CONbits.P1M0 = 0; CCP1CONbits.P1M1 = 0; CCP1CONbits.DC1B0 = 0; CCP1CONbits.DC1B1 = 0; CCPR1L = 0x0; PIR1bits.TMR2IF = 0; T2CONbits.T2CKPS0 = 0; T2CONbits.T2CKPS1 = 0; T2CONbits.TMR2ON = 1; while(!PIR1bits.TMR2IF); TRISCbits.TRISC2 = 0; PIR1bits.TMR2IF = 0; } void Gera_PWM(int DutyCicle){ CCPR1L = DutyCicle >> 2; CCP1CONbits.DC1B1 = DutyCicle >> 1; CCP1CONbits.DC1B0 = DutyCicle; } void Blink(){ TRISDbits.TRISD2 = 0; while(1){ PORTDbits.RD2 = 1; __delay_ms(1000); PORTDbits.RD2 = 0; __delay_ms(1000); } } void main(void) { Inicia_PWM(); while(1){ for(int i = 0; i < 1023; i++){ Gera_PWM(i); } } } Estou seguindo o que informa o datasheet do produto, entretanto, mesmo assim, não funciona. Gostaria de ajuda.
-
Arduino ESP responde aos comandos AT com símbolos
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@vtrx Eu corrigi isso, mas mesmo assim obrigado pela resposta. -
Arduino ESP responde aos comandos AT com símbolos
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@.if Obrigado, vou ver se acho algo pesquisando -
Arduino ESP responde aos comandos AT com símbolos
Gregorio Leão postou um tópico em Microcontroladores
Tenho um ESP-01 conectado a um arduino uno e por meio do monitor serial, atuando junto a um código carregado na placa, estou mandando comandos AT ao ESP. No entanto, ao mandar comandos que suas respectivas respostas são muito grandes, como os comandos AT+CIFSR e AT+GMR, o ESP responde com símbolos. Código carregado no Arduino: /******************************************************************************* * RoboCore - ESP8266 Primeiros Passos com Arduino * Codigo utilizado para enviar comandos AT atraves do monitor serial da Arduino * IDE. *******************************************************************************/ #include "SoftwareSerial.h" SoftwareSerial ESP_Serial(10, 6); // RX, TX void setup(){ Serial.begin(9600); ESP_Serial.begin(115200); } void loop(){ if (ESP_Serial.available()){ Serial.write(ESP_Serial.read()); } if (Serial.available()){ ESP_Serial.write(Serial.read()); } } O erro: Desde já grato pela colaboração. -
Arquivo .exe abre e fecha rapidamente
Gregorio Leão respondeu ao tópico de Gregorio Leão em Windows 10
@Ricardov Ok, obrigado pela ajuda -
Arquivo .exe abre e fecha rapidamente
Gregorio Leão respondeu ao tópico de Gregorio Leão em Windows 10
@Ricardov O problema foi resolvido, mas ainda assim é estranho visto que, até ontem, o executável gerado a partir do código C rodava normalmente. O problema começou ontem a noite, após eu compilar, pelo terminal, um código de um servidor socket em C. Fiz o código como informado a página da Microsoft sobre o winsock. Teria algum vínculo entre o problema e o procedimento que eu realizei? -
Olá a todos, estou com problemas para rodar um arquivo .exe. Compilo um código em C no vs code, o programa executa no terminal da própria IDE, mas se tento rodar o executável gerado, ele abre e fecha instantaneamente. Desde já grato.
-
Olá a todos, estou tentando fazer uma comunicação serial através do modulo I²C do microcontrolador PIC16f887. Rodei o cogido sem erros e sem warnings, mas o microcontrolador não faz nada. Testei o circuito no real e no Proteus. Código: // CONFIG1 #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD) #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = OFF // Brown Out Reset Selection bits (BOR disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal/External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) #pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming) // CONFIG2 #pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) #pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include <xc.h> #include <stdio.h> #include <stdlib.h> #include <pic16f887.h> //Testei sem essa biblioteca #define _XTAL_FREQ 20000000 void Inicia (const unsigned long feq_K){ TRISC3 = 1; // Configurando como entrada conforme fornecido na ficha TRISC4 = 1; // Configurando como entrada conforme fornecido na ficha SSPCON = 0b00101000; SSPCON2 = 0; SSPADD = (_XTAL_FREQ / (4 * feq_K * 100)) - 1; //Testei essa parte colocando o numero decimal direto, sem a equação SSPSTAT = 0b10000000; } void Espera(){ PIR1bits.SSPIF = 0; while(PIR1bits.SSPIF); } void Condicao_de_Inicio(){ Espera(); SSPCON2bits.SEN = 1; } void Condicao_de_Reinicio(){ Espera(); SSPCON2bits.RSEN = 1; } void Condicao_de_Parada(){ Espera(); SSPCON2bits.PEN = 1; } void Transmite(unsigned byte){ Espera(); SSPBUF = byte; } void Pisca_LED(){ TRISDbits.TRISD0 = 0; while(1){ PORTDbits.RD0 = 0; __delay_ms(1000); PORTDbits.RD0 = 1; __delay_ms(1000); } } void main(){ Inicia(100); INTCONbits.GIE = 1; INTCONbits.PEIE = 1; PIE1bits.SSPIE = 1; Pisca_LED(); while(1){ Condicao_de_Inicio(); Transmite(0xD0); Transmite(0x88); Transmite(0xFF); Condicao_de_Parada(); __delay_ms(1000); } }
-
Microcontrolador PIC16f887 não detecta tensão
Gregorio Leão respondeu ao tópico de Gregorio Leão em Eletrônica
Como eu configuro isso no MPLAB? obs: Estou usando o compilador XC8 -
Olá, estou tendo um problema com a energia do meu ci, o código compila e tudo mais, o problema é que o PIC informa que o programador, PicKit 3 no caso, não está dectando uma tensão, que o dispositivo alvo não consegue ser detectado... basicamente isso. Gostaria de alguma ajuda, sugestões, qualquer coisa do tipo. Desde já, grato!
-
PIC UART com PIC16f628a - Protocolo RS232
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@.if Acho que o problema todo é, no caso se eu estivesse utilizando a função, é a sintaxe que deve estar errada. Na verdade coloquei pull-down externo no botão, funcionou kkkk Agora vou voltar para o meu projeto e verificar se há algum problema com a UART, assim que eu acabar ou se eu tiver alguma duvida posto aqui. Seria legal, mesmo depois que eu acabar o projeto, postar aqui, quem sabe alguem me da uma dica para melhorar o codigo kkkk -
PIC UART com PIC16f628a - Protocolo RS232
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@.if eu fiz o que você recomendou, tirei a interrupção do loop e funcionou. Tambem desabilitei as resistencias pull-up da PORTB e setei a porta RB0/INT como entrada. Exclui a função de interrupção e usei o codigo na função principal. funcionou o codigo: #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define _XTAL_FREQ 4000000 #include <xc.h> #include <stdio.h> #include <stdlib.h> void Basic_Configurators(void){ CMCON = 0x07; TRISAbits.TRISA2 = 0; TRISBbits.TRISB0 = 1; } void Init_Interrupt(void){ INTCONbits.GIE = 1; //habilita todas as interrupções INTCONbits.PEIE = 0; //habilita interrupção periférica INTCONbits.INTE = 1; //habilita interrupção externa INTCONbits.INTF = 0; //limpa o sinalizador de interrupção externa OPTION_REGbits.INTEDG = 1; //borda de subida, transição de '0' para '1' configura uma interrupção INTCONbits.T0IF = 0; // desabilita sinalizador de interrrupção Overflow INTCONbits.RBIF = 0; // desabilita sinalizador de interrupção por alteração na porta B OPTION_REGbits.nRBPU = 1; //desabilita resistencia pull-up do PORTB } void main(void) { Basic_Configurators(); Init_Interrupt(); if(INTCONbits.INTF == 1){ PORTAbits.RA2 = 1; __delay_ms(1000); PORTAbits.RA2 = 0; __delay_ms(100); INTCONbits.INTF = 0; } } -
PIC UART com PIC16f628a - Protocolo RS232
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@.if consegui fazer funcionar, o unico problema é um atraso após preciosar o botão. Quando eu aperto o botão a primeira vez o mc liga o led, da um atraso de 1 segundo e desliga o led, ate ai tudo como planejado. O problema é que em algum momento, quando eu pressiono o botão o led não liga ou se eu apertar o botão, o mc cumpre a rotina, porém, se eu apertar o botão de novo assim que o led desligar, o led não liga de novo no mesmo instante. Não tem problema porque provavelmente é um problema de mal contato do botão, estou deduzindo isso porque o problema estava acontecendo com mais frequencia, mas eu troquei o botão e o problema apareceu com menos frequencia. Muito obrigado pela ajuda ai @.if @oleoarruda @oleoarruda na verdade esse não é o problema ja que eu havia feito a mesma coisa em codigos anteriores, creio que seja algum erro de compilação -
PIC UART com PIC16f628a - Protocolo RS232
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@oleoarruda @.if dei uma olhada no manual do xc8 na parte de interrupções e dizia que a sintaxe da função de interrpção era void __interrupt(high_priority ou low_priority) nome da função(void){}. Então fiz um codigo de teste, para não embolar o codigo do projeto. #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define _XTAL_FREQ 4000000 #include <xc.h> #include <stdio.h> #include <stdlib.h> void Basic_Configurators(void){ CMCON = 0b00000111; TRISAbits.TRISA2 = 0; } void Init_Interrupt(void){ INTCONbits.GIE = 1; //habilita todas as interrupções INTCONbits.PEIE = 0; //desabilita interrupção periférica INTCONbits.INTE = 1; //habilita interrupção externa INTCONbits.INTF = 0; //limpa o sinalizador de interrupção externa OPTION_REGbits.INTEDG = 1; //borda de subida, transição de '0' para '1' configura uma interrupção INTCONbits.T0IF = 0; // desabilita sinalizador de interrrupção Overflow INTCONbits.RBIF = 0; // desabilita sinalizador de interrupção por alteração na porta B } void __interrupt() interrupcao(void){ //se o sinalizador estiver em nivel logico alto, ativa a porta RA2, trasmite a letra 'g' e zera o sinalizador if(INTCONbits.INTF == 1){ PORTAbits.RA2 = 1; __delay_ms(1000); PORTAbits.RA2 = 0; INTCONbits.INTF = 0; } } void main(void) { Basic_Configurators(); Init_Interrupt(); while(1){ interrupcao(); } return; } Dessa vez o erro apresentado foi esse: CLEAN SUCCESSFUL (total time: 6ms) make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf make[1]: Entering directory 'C:/Users/gabri/MPLABXProjects/ExperimentandoPIC16f628a9.0.X' make -f nbproject/Makefile-default.mk dist/default/production/ExperimentandoPIC16f628a9.0.X.production.hex make[2]: Entering directory 'C:/Users/gabri/MPLABXProjects/ExperimentandoPIC16f628a9.0.X' "C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe" -mcpu=16F628A -c -mdfp="C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -mext=cci -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mc90lib -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o build/default/production/InterrupcaoExterna.p1 InterrupcaoExterna.c InterrupcaoExterna.c:18:13: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal] CMCON = 0b00000111; ^ 1 warning generated. "C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe" -mcpu=16F628A -Wl,-Map=dist/default/production/ExperimentandoPIC16f628a9.0.X.production.map -DXPRJ_default=default -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -mext=cci -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -mc90lib -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/ExperimentandoPIC16f628a9.0.X.production.elf build/default/production/InterrupcaoExterna.p1 InterrupcaoExterna.c:33:: advisory: (1510) non-reentrant function "_interrupcao" appears in multiple call graphs and has been duplicated by the compiler C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8\pic\include\proc\pic16f628a.h:1838:: error: (845) symbol "interrupt_function" defined more than once InterrupcaoExterna.c:33:: error: (800) undefined symbol "??i1_interrupcao" (908) exit status = 1 nbproject/Makefile-default.mk:138: recipe for target 'dist/default/production/ExperimentandoPIC16f628a9.0.X.production.hex' failed make[2]: Leaving directory 'C:/Users/gabri/MPLABXProjects/ExperimentandoPIC16f628a9.0.X' nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed make[1]: Leaving directory 'C:/Users/gabri/MPLABXProjects/ExperimentandoPIC16f628a9.0.X' make[2]: *** [dist/default/production/ExperimentandoPIC16f628a9.0.X.production.hex] Error 1 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2 nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed BUILD FAILED (exit value 2, total time: 1s) Um detalhe é que se eu coloco o argumento "high_priority" ou "low_priority" o compilador manda eu ignorar o argumento na função void __interrupt(argumento) -
PIC UART com PIC16f628a - Protocolo RS232
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@oleoarruda Mas nessa função que você descreveu ficariam as configurações da interrupção ou a propria interrupção? Desde ja agradecido -
PIC UART com PIC16f628a - Protocolo RS232
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@.if Pow...muito obrigado ai, de verdade. Se funcionar provavelmente vou ter sucesso no meu projeto, obrigado mesmo -
PIC UART com PIC16f628a - Protocolo RS232
Gregorio Leão respondeu ao tópico de Gregorio Leão em Microcontroladores
@.if Eu achei varios exemplos na internet e tentei usa-los, porém todos deram problemas e então decidi fazer o meu codigo com base no datasheet e na analise de alguns codigos. Fiz dois codigos, o de cima para a transmissão e um outro para a recepção. No codigo de recepção o que estava dando problema era o comando de desvio de fluxo, goto, apaguei, nos dois codigos e a IDE não mostrou problemas, isso no codgio de recepção. Ja no codigo de transmissão, apaguei o comando goto e mesmo assim apresentou problemas, conclui pela logica que o problema era a interrupção. Isso tudo que relatei acima foi pouco depois de eu ter postado o topico aqui kkkk Mas a minha pergunta é, como faço pra resolver o problema da interrupção se esse for mesmo o erro? Meu codigo esta errado? Muito obrigado pela ajuda até aqui @.if -
Ola, estou tentando fazer um programa para transmitir um determinado dado apos uma interrupção. A interrrupção é externa, um botão quando precionado liga um led e trasmite, via porta RB2/TX, a letra 'g'. O problema é que há algo de errado, ja que o compilador está mostrando um erro, mas como sou leigo em MPLABX com compilador XC8, não estou entendendo o que há de errado, se puderem ajudar ficaria muito grato Meu codigo: // PIC16F628A Configuration Bit Settings // 'C' source line config statements // CONFIG #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #define _XTAL_FREQ 4000000 #include <xc.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> //configurações basicas void basic_config(void){ CMCON = 0b00000111; TRISAbits.TRISA1 = 1; TRISAbits.TRISA0 = 0; TRISAbits.TRISA7 = 0; } //escrevendo caracter void write_RS232(unsigned char letra){ while(TXSTAbits.TRMT == 0){ TXREG = letra; } } //inicialização da UART void Initialized_RS232(void){ TRISBbits.TRISB1 = 1; //RX configurado como entrada TRISBbits.TRISB2 = 1; //TX configurado como entrada //↑ configurados conforme o datasheet ↑ SPBRG = 25; //configura a velocida de transmissão, no caso 9600 bps a 4MHz, em auta velocidade TXSTAbits.BRGH = 1; TXSTAbits.SYNC = 0; RCSTAbits.SPEN = 1; TXSTAbits.TX9 = 0; TXSTAbits.TXEN = 0; TXSTAbits.TX9D = 0; write_RS232('b'); } //configurando interrupção void Init_Interrupt(void){ INTCONbits.GIE 1; INTCONbits.PEIE = 0; INTCONbits.INTE = 1; INTCONbits.INTF = 0; OPTION_REGbits.INTEDG = 1; } //função de interrupção void interrupt transmited(void){ if(INTCONbits.INTF == 1){ PORTAbits.RA2 = 1; write_RS232('g'); INTCONbits.INTF = 0; } } void main(void) { basic_config(); Init_Interrupt(); Initialized_RS232(); while(1){ transmited(); } return; } O erro gerado: CLEAN SUCCESSFUL (total time: 13ms) make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf make[1]: Entering directory 'C:/Users/gabri/MPLABXProjects/USART_PIC16f628a-TX_For_Me.X' make -f nbproject/Makefile-default.mk dist/default/production/USART_PIC16f628a-TX_For_Me.X.production.hex make[2]: Entering directory 'C:/Users/gabri/MPLABXProjects/USART_PIC16f628a-TX_For_Me.X' "C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe" -mcpu=16F628A -c -mdfp="C:/Program Files/Microchip/MPLABX/v5.45/packs/Microchip/PIC16Fxxx_DFP/1.2.33/xc8" -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o build/default/production/TX_For_Me.p1 TX_For_Me.c ::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries TX_For_Me.c:65:6: error: variable has incomplete type 'void' void interrupt transmited(void){ ^ TX_For_Me.c:65:15: error: expected ';' after top level declarator void interrupt transmited(void){ ^ ; 2 errors generated. make[2]: *** [build/default/production/TX_For_Me.p1] Error 1 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2 (908) exit status = 1 nbproject/Makefile-default.mk:107: recipe for target 'build/default/production/TX_For_Me.p1' failed make[2]: Leaving directory 'C:/Users/gabri/MPLABXProjects/USART_PIC16f628a-TX_For_Me.X' nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed make[1]: Leaving directory 'C:/Users/gabri/MPLABXProjects/USART_PIC16f628a-TX_For_Me.X' nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed BUILD FAILED (exit value 2, total time: 671ms)
-
PIC 18F452 - Dúvidas com Buffer (como zerar?)
Gregorio Leão respondeu ao tópico de Fermota em C/C#/C++
@Fermota @Fermota sou leigo em programação, mas pelo que eu sei o buffer de transmissão/recebimento via serial esvazia quando a mensagem acaba de ser transmitida/recebida. Você pode verificar isso colocando um led em uma porta e executar uma condição para o led ascenda quando o bit 0 (BF) do registrado SSPSTAT estiver cheio e verificar se o erro não está no seu código. Esse bit que eu acabei de falar e o bit que diz se o buffer está cheio ou vazio. Se cheio retorna "1" e se vazio retorna "0" Espero ter ajudado -
Teste para saber se o microcontrolador PIC está queimado
Gregorio Leão respondeu ao tópico de Gregorio Leão em Eletrônica
Pow muito obrigado mesmo, de verdade. Tô querendo fazer uma impressora 3D usando PIC. Mas primeiro tô tentando aprender o básico para depois fazer isso kkkk. Muito obrigado pela ajuda -
Teste para saber se o microcontrolador PIC está queimado
Gregorio Leão respondeu ao tópico de Gregorio Leão em Eletrônica
Pow...desculpa fazer muitas perguntas, é que eu realmente tenho interesse em usar o PIC. Gostaria de saber também se devo usa pulseira antiestatica? -
Teste para saber se o microcontrolador PIC está queimado
Gregorio Leão respondeu ao tópico de Gregorio Leão em Eletrônica
O circuito é simples, é um led junto a um resistor ligado na porta RB0 do pic. Sendo o positivo do led no RB0 e o negativo no Vss Fuses: O oscilador está no modo interno(INTRC_NOCLKOUT), Watchdog desabilitado, Power-up desabilitado, MCLRE habilitado, CP e CPD desabilitados, LVP desabilitado. @if. Sabe se tem alguma forma de testar se o PIC tá queimado usando o multímetro? Esqueci de falar que estou usando o pic16f887, não é o 16f887a.
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