Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Kibbi

Não consigo compilar no MikroC PRO.

Recommended Posts

Olá Amigos! Sou iniciante no Forum e na programação de microcontroladores PIC. Consegui um projeto de um Timer ajustável com PIC16F628A, onde o autor disponibilizou o circuito e o programa tanto em C como .HEX para serem usados livremente. Montei o circuito no Proteus usando o .HEX e funcionou perfeitamente, mas quando vou compilar o programa em C, dá vários erros. Já usei o compiller MikroC PRO, CCS e nada.

Se alguem puder me ajudar ficarei muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1a coisa que deve saber é qual compilador o autor usou, 2a postar quais erros gerou na compilação.

Postando estas 2 coisa dá pra te ajudar melhor

Se não souber de jeito nenhum qual o compilador usado originalmente posta o código que dá pra "pescar" o usado na maioria dos casos

abraço

Marcelo

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Também não sei direito os procedimentos corretos para configurar e efetuar a compilação, talvez seja esse o problema. Se me auxiliar neste caso eu agradeço. Esse é o código que tenho e se precisar também tenho o esquema do circuito. muito obrigado.

    /*
    * Project name: Programmable Digital Timer
    * Copyright:
    (c) Rajendra Bhatt, 2010.
    MCU: PIC16F628A
    Oscillator: XT, 4.0 MHz
    */

    // LCD module connections
    sbit LCD_RS at RA0_bit;
    sbit LCD_EN at RA1_bit;
    sbit LCD_D4 at RB4_bit;
    sbit LCD_D5 at RB5_bit;
    sbit LCD_D6 at RB6_bit;
    sbit LCD_D7 at RB7_bit;
    sbit LCD_RS_Direction at TRISA0_bit;
    sbit LCD_EN_Direction at TRISA1_bit;
    sbit LCD_D4_Direction at TRISB4_bit;
    sbit LCD_D5_Direction at TRISB5_bit;
    sbit LCD_D6_Direction at TRISB6_bit;
    sbit LCD_D7_Direction at TRISB7_bit;
    // End LCD module connections

    sbit MODE at RA2_bit;
    sbit SELECT at RA3_bit;
    sbit ENTER at RA4_bit;
    sbit START at RB0_bit;
    sbit RelaySW at RB3_bit;

    // Define Messages
    char MSG1[] = "Device is ";
    char MSG2[] = "OFF";
    char MSG3[] = "ON ";
    char MSG4[] = "HH:MM";

    unsigned short HHMM_Pos[] = {6, 7, 8, 9, 10};
    unsigned short ON_Time[] = {0, 0, 10, 0, 0}; // 10 + 48 is :
    unsigned short OFF_Time[] = {0, 0, 10, 0, 0};

    unsigned short Mode_Select = 0 ; // 0:ON, 1:OFF
    unsigned short i, j, k, Timer_On, Get_Input, Cur_Pos, Cur_On;
    unsigned short temp, refresh, Num, HalfSec, Blink, ChangeMin=0;
    unsigned short OFF_HH, OFF_MM, ON_HH, ON_MM;

    void Disp_First_Row(){
    Lcd_Out(1,1, MSG1);
    if (RelaySW == 0) Lcd_Out(1,11, MSG2);
    if (RelaySW == 1) Lcd_Out(1,11, MSG3);
    }

    void Disp_Char(unsigned short col, unsigned short chr){
    Lcd_Chr(2, col, chr+48);
    }

    void Disp_Time(){

    for(i=0; i<5; i++){
    if(!Mode_Select){
    Lcd_Out(2,1, MSG2);
    Disp_Char(HHMM_Pos[i],OFF_Time[i]);
    }
    if(Mode_Select){
    Lcd_Out(2,1, MSG3);
    Disp_Char(HHMM_Pos[i],ON_Time[i]);
    }
    }
    }

    void play_sound(){
    Sound_Play(2500, 500);
    }

    void debounce(){
    Delay_ms(250);
    }

    void cursor_left(){
    for(j=0; j<5; j++){
    Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);
    }
    }

    void disable_timer(){
    INTCON = 0x00;
    RelaySW = 0;
    INTCON.T0IF = 0;
    Timer_On = 0;
    Blink = 0xff;
    Mode_Select = 0;
    Disp_First_Row();
    Disp_Time();
    play_sound();
    }


    void interrupt() {
    Num ++; // Interrupt causes Num to be incremented by 1
    if(Num == 9) {
    HalfSec ++; // Increase sec
    Num = 0;
    Blink = ~Blink;
    if (HalfSec == 120){
    HalfSec = 0;
    ChangeMin = 1;
    }
    }
    TMR0 = 39; // TMR0 returns to its initial value
    INTCON.T0IF = 0; // Bit T0IF is cleared so that the interrupt could reoccur
    }

    void main() {
    CMCON = 7; // Disable Comparators
    TRISA = 0b00111100;
    TRISB = 0b00000001;
    Sound_Init(&PORTB,2); // Initialize Buzzer o/p pin
    RelaySW = 0;
    Timer_On = 0;
    Get_Input = 0;
    Cur_Pos = 0;
    Cur_On = 0;
    refresh = 0;
    Num = 0;
    HalfSec = 0;

    Lcd_Init(); // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR); // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
    Lcd_Out(1,1, "Copyright @");
    Lcd_Out(2,1, "Embedded-Lab.com");
    i=0;
    while(i<4){
    debounce();
    i ++;
    }
    Lcd_Cmd(_LCD_CLEAR);
    Disp_First_Row();
    Lcd_Out(2,4,"-");
    Lcd_Out(2,12, MSG4);
    Disp_Time();

    do {
    if(!MODE && !Timer_On){
    debounce();
    if(!Get_Input){
    Mode_Select = ~Mode_Select;
    Disp_Time();
    }
    if(Get_Input){
    if(!Mode_Select){
    OFF_time[Cur_Pos] = OFF_time[Cur_Pos]+1;
    temp = OFF_time[Cur_Pos];
    switch (Cur_Pos){
    case 0: if(temp > 9) OFF_time[Cur_Pos]=0;
    break;
    case 1: if(temp > 9) OFF_time[Cur_Pos]=0;
    break;
    case 3: if(temp > 5) OFF_time[Cur_Pos]=0;
    break;
    case 4: if(temp > 9) OFF_time[Cur_Pos]=0;
    break;
    }
    Disp_Char(6+Cur_Pos, OFF_time[Cur_Pos]);

    }

    if(Mode_Select){
    ON_time[Cur_Pos] ++;
    temp = ON_time[Cur_Pos];
    switch(Cur_Pos){

    case 0: if(temp > 9) ON_time[Cur_Pos]=0;
    break;
    case 1: if(temp > 9) ON_time[Cur_Pos]=0;
    break;
    case 3: if(temp > 5) ON_time[Cur_Pos]=0;
    break;
    case 4: if(temp > 9) ON_time[Cur_Pos]=0;
    break;
    }
    Disp_Char(6+Cur_Pos, ON_time[Cur_Pos]);
    }
    Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);
    }
    } // END if(!MODE)

    if(!SELECT && !Timer_On){
    debounce();
    Get_Input = 1;

    if(Cur_On) {
    Cur_Pos ++;
    if (Cur_Pos == 2) {
    Lcd_Cmd(_LCD_MOVE_CURSOR_RIGHT);
    Cur_Pos ++;
    }
    if(Cur_Pos > 4) {
    Lcd_Cmd(_LCD_MOVE_CURSOR_RIGHT);
    Cur_Pos = 0;
    cursor_left();
    }
    else Lcd_Cmd(_LCD_MOVE_CURSOR_RIGHT);
    }

    if(!Cur_On) {
    Cur_On = 1;
    cursor_left();
    Lcd_Cmd(_LCD_UNDERLINE_ON);
    }
    }

    if(!ENTER && Get_Input){
    debounce();
    Get_Input = 0;
    Cur_On = 0;
    Cur_Pos = 0;
    Disp_Time();
    Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
    }

    if (!START && !Get_Input){
    debounce();
    switch(Timer_On){
    case 0: play_sound();
    Timer_On = 1;
    OPTION_REG = 0x07; // Prescaler (1:256) is assigned to the timer TMR0
    TMR0 = 39; // Timer T0 counts from 39 to 255
    INTCON = 0xA0; // Enable interrupt TMR0 and Global Interrupts
    INTCON.T0IF = 0;
    Mode_Select = 0;
    Blink = 0;
    Disp_Time();
    break;
    case 1: disable_timer();
    break;
    }
    }

    if(Timer_On){
    OFF_HH = OFF_Time[0]*10 + OFF_Time[1];
    OFF_MM = OFF_Time[3]*10 + OFF_Time[4];
    ON_HH = ON_Time[0]*10 + ON_Time[1];
    ON_MM = ON_Time[3]*10 + ON_Time[4];
    switch(Blink){
    case 0: Lcd_Chr(2,8,' ');
    break;
    case 255: Lcd_Chr(2,8,':');
    break;
    }

    if(!OFF_HH && !OFF_MM &&!RelaySW){
    if(ON_HH || ON_MM){
    RelaySW = 1;
    Mode_Select = 0xff;
    Disp_First_Row();
    Disp_Time();
    play_sound();
    }
    else {
    disable_timer();
    }
    }

    if(!ON_HH && !ON_MM && RelaySW){
    disable_timer();
    play_sound();
    }

    if(ChangeMin) {
    switch(Mode_Select){
    case 0: if(OFF_MM == 0 && OFF_HH>0){
    OFF_MM = 59;
    OFF_HH -- ;
    }
    else if (OFF_MM >>0) OFF_MM --;
    OFF_Time[0] = OFF_HH/10;
    OFF_Time[1] = OFF_HH%10;
    OFF_Time[3] = OFF_MM/10;
    OFF_Time[4] = OFF_MM%10;
    break;

    case 255: if(ON_MM == 0 && ON_HH>0){
    ON_MM = 59;
    ON_HH -- ;
    }
    else if(ON_MM >> 0) ON_MM --;
    ON_Time[0] = ON_HH/10;
    ON_Time[1] = ON_HH%10;
    ON_Time[3] = ON_MM/10;
    ON_Time[4] = ON_MM%10;
    break;
    }
    ChangeMin = 0;
    Disp_Time();
    }

    }


    }while(1);
    }

    1a coisa que deve saber é qual compilador o autor usou, 2a postar quais erros gerou na compilação.

    Postando estas 2 coisa dá pra te ajudar melhor

    Se não souber de jeito nenhum qual o compilador usado originalmente posta o código que dá pra "pescar" o usado na maioria dos casos

    abraço

    Marcelo

    Editado por Bcpetronzio
    Inserir code

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Com certeza esse código foi compilado no MikroC, já que usa uma biblioteca interna para o LCD.

    Poste os erros na compilação para podermos ajudar.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Olá ! EStes são os erros de compilação pelo MikroC PRO.

    Como disse anteriormente, acho que não estou sabendo configurar adequadamente o Compilador.

    Abraço.

    0 1 mikroCPIC1618.exe -MSF -DBG -pP16F628A -DL -O11111114 -fo4 -N"C:\Documents and Settings\Trabalho\Desktop\novo-projetp\MyProject.mcppi" -SP"C:\Arquivos de programas\Mikroelektronika\mikroC PRO for PIC\defs\" -SP"C:\Arquivos de programas\Mikroelektronika\mikroC PRO for PIC\Uses\P16\" -SP"C:\Documents and Settings\Trabalho\Desktop\novo-projetp\" "MyProject.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_CType.mcl" "__Lib_CString.mcl" "__Lib_CStdlib.mcl" "__Lib_CMath.mcl" "__Lib_MemManager.mcl" "__Lib_Conversions.mcl" "__Lib_Sprinti.mcl" "__Lib_Sprintl.mcl" "__Lib_Time.mcl" "__Lib_Trigonometry.mcl" "__Lib_Button.mcl" "__Lib_Keypad4x4.mcl" "__Lib_Manchester.mcl" "__Lib_OneWire.mcl" "__Lib_PS2.mcl" "__Lib_Sound.mcl" "__Lib_SoftI2C.mcl" "__Lib_SoftSPI.mcl" "__Lib_SoftUART.mcl" "__Lib_EEPROM.mcl" "__Lib_PWM_b3.mcl" "__Lib_UART_b21.mcl" "__Lib_CF.mcl" "__Lib_GlcdFonts.mcl" "__Lib_Glcd.mcl" "__Lib_LcdConsts.mcl" "__Lib_Lcd.mcl" "__Lib_RS485.mcl" "__Lib_S1D13700.mcl" "__Lib_T6963C.mcl"

    hint: 0 1139 Available RAM: 208 [bytes], Available ROM: 2048 [bytes]

    diagnostics: 0 126 All files Preprocessed in 547 ms

    diagnostics: 0 122 Compilation Started MyProject.c

    error: 11 304 Local variables can not be of sbit type MyProject.c

    error: 11 300 Syntax Error: ';' expected, but 'at' found MyProject.c

    error: 11 424 '}' expected ';' found MyProject.c

    hint: 11 1163 Variable 'LCD_RS' has been declared, but not used MyProject.c

    error: 37 371 Specifier needed MyProject.c

    error: 47 324 Undeclared identifier 'MSG1' in expression MyProject.c

    warning:47 1508 Implicit conversion of int to ptr MyProject.c

    error: 48 324 Undeclared identifier 'RelaySW' in expression MyProject.c

    error: 48 324 Undeclared identifier 'MSG2' in expression MyProject.c

    warning:48 1508 Implicit conversion of int to ptr MyProject.c

    error: 49 324 Undeclared identifier 'RelaySW' in expression MyProject.c

    error: 49 324 Undeclared identifier 'MSG3' in expression MyProject.c

    warning:49 1508 Implicit conversion of int to ptr MyProject.c

    error: 60 324 Undeclared identifier 'MSG2' in expression MyProject.c

    warning:60 1508 Implicit conversion of int to ptr MyProject.c

    error: 61 324 Undeclared identifier 'HHMM_Pos' in expression MyProject.c

    error: 61 322 Pointer required MyProject.c

    error: 64 324 Undeclared identifier 'MSG3' in expression MyProject.c

    warning:64 1508 Implicit conversion of int to ptr MyProject.c

    error: 65 324 Undeclared identifier 'HHMM_Pos' in expression MyProject.c

    error: 65 322 Pointer required MyProject.c

    error: 68 312 Internal error '' MyProject.c

    error: 0 102 Finished (with errors): 15 jul 2012, 20:35:02 MyProject.mcppi

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Olá amigos! Finalmente, mesmo sem entender muito do assunto, quebrei a cabeça, mas consegui compilar o programa do timer certinho no MikroC PRO sem erro. Simulei o resultado no Proteus e ficou legal. Só queria que a mensagem de inicialização do LCD, ficasse mais tempo no display.

    Se alguem puder me dar uma dica de como passo o programa pro PIC, fico muito grato.

    Obrigado a todos que me ajudam e um grande abraço.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Nesse trecho


    Lcd_Init(); // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR); // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
    Lcd_Out(1,1, "Copyright @");
    Lcd_Out(2,1, "Embedded-Lab.com");
    i=0;
    [B]while(i<4){[/B]
    debounce();
    i ++;
    }
    Lcd_Cmd(_LCD_CLEAR);

    onde está i < 4, ele irá ficar parado por 4*250ms = 1 segundo, ou seja, se você quiser por exemplo 2 segundos, mude o 4 para 8, e assim por diante.

    Ou então remova essa parte:


    while(i<4){
    debounce();
    i ++;
    }

    Substitua por:


    Delay_ms(XX);

    Lembrando que XX é o tempo em milissegundos, ou seja a cada 1000ms equivale a 1 segundo.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Muito obrigado pela dica. Estou mesmo tentando entender essa programação. Só que estou tentando fazer, que, onde aparece na primeira linha do display "Device is", que é "ON" ou "OFF" dependendo do estado do "RELAYSW", ficasse "ON" quando iniciasse o Satart do Timer e "OFF" quando finalizasse o Timer. Porque ele está seguindo o "ON" e "OFF" da segunda linha do display. Não sei se expliquei bem, mas agradeço mais uma vez a todos que me ajudam,um grande abraço.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×