Ir ao conteúdo
  • Cadastre-se

PIC Matriz em CCS C Compiler


Ir à solução Resolvido por kgin,

Posts recomendados

Preciso usar uma matriz de 10x10 em CCS C Compiler, mas na hora de executar o Compilador está pedindo + memória !  

Alguém sabe como resolver isso ? 

Meu código ficou da seguinte forma abaixo: 

#include <16F877A.h>
#include <stdio.h>
#include <stdlib.h>
#use delay(clock = 20MHz)
#use fast_io(b)

unsigned int8 a, b, c, d, e;

int *mat[10][10] = {    {0, 16, 32, 48, 64, 80, 96, 112, 128, 144}
                        {1, 17, 33, 49, 65, 81, 97, 113, 129, 145}
                        {2, 18, 34, 50, 66, 82, 98, 114, 130, 146}
                        {3, 19, 35, 51, 67, 83, 99, 115, 131, 147}
                        {4, 20, 36, 52, 68, 84, 100, 116, 132, 148}
                        {5, 21, 37, 53, 69, 85, 101, 117, 133, 149}
                        {6, 22, 38, 54, 70, 86, 102, 118, 134, 150}
                        {7, 23, 39, 55, 71, 87, 103, 119, 135, 151}
                        {8, 24, 40, 56, 72, 88, 104, 120, 136, 152}
                        /*{9, 25, 41, 57, 73, 89, 105, 121, 137, 153, 169}
                        };*/

void main(void){
       
   
   while(TRUE){
                 
      
   }
}

 

esquemático_modulo_ADS1256.PNG

esquemático_modulo_ADS1256.PNG

Question_1.7z Question_1.7z

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

int é 16 bits ou seja, cada dado ocupa 2 bytes. Teste com char. Outras coisas: está colocando a matriz na pobre ram do mc. Não sei o que vai fazer com ela na ram mas caso seja apenas algo como tabela se cossenos, coloque na flash. Consulte a sintaxe no help do seu compilador. Geralmente é algo como

const char mat[10][10] = { ...

ou

flash char mat[10][10] = { ...

Por fim, tem melhor opção pra compilador pic p.ex.

https://embarcados.com.br/mplab-xpress/

 

 Olá amigo. Se ver esta menção a dica que dou é: crie um novo tópico com suas inquietações específicas e especificadas com fotos, esquemas, desenhos e etc. Há chance maior de ser ajudado ok?

21 horas atrás, SILVIO ALENCAR disse:

gostaria de conversar com pessoas com experiencia

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@1hsouza1

2 horas atrás, 1hsouza1 disse:

Preciso usar uma matriz de 10x10 em CCS C Compiler, mas na hora de executar o Compilador está pedindo + memória !

Pelo o que eu pesquisei é isso mesmo, você declarou uma vetor de 10x10 de ponteiros.

2 horas atrás, 1hsouza1 disse:

int *mat[10][10]

E isso excederia a quantidade máxima de memória do controlador. faça as contas 10*10*8=800 Bytes (cada ponteiro geralmente tem 8 bytes em c) e isso excede a quantidade máxima de memória do controlador,

que é de apenas 368 bytes.

 

Uma maneira de contornar isso seria declarando como constante para os valores da matriz serem escritos na memória flash do mc ao invés da memória RAM.

em C seria assim

 #include <16F877A.h>
#include <stdio.h>
#include <stdlib.h>
#use delay(clock = 20MHz)
#use fast_io(b)

unsigned int8 a, b, c, d, e;

const unsigned char mat[10][10] = {
    {0, 16, 32, 48, 64, 80, 96, 112, 128, 144},
    {1, 17, 33, 49, 65, 81, 97, 113, 129, 145},
    {2, 18, 34, 50, 66, 82, 98, 114, 130, 146},
    {3, 19, 35, 51, 67, 83, 99, 115, 131, 147},
    {4, 20, 36, 52, 68, 84, 100, 116, 132, 148},
    {5, 21, 37, 53, 69, 85, 101, 117, 133, 149},
    {6, 22, 38, 54, 70, 86, 102, 118, 134, 150},
    {7, 23, 39, 55, 71, 87, 103, 119, 135, 151},
    {8, 24, 40, 56, 72, 88, 104, 120, 136, 152},
    {9, 25, 41, 57, 73, 89, 105, 121, 137, 153}
};

void main(void){
       
   
   while(TRUE){
                 
      
   }
} 

Exemplo online!

Mas isso depende do compilador, Verifique na documentação qual a palavra correta para declarar constantes.

Link para o comentário
Compartilhar em outros sites

@aphawk segue abaixo a resolução:

#include <16F877A.h>

#include <math.h>

#use delay(clock = 20M)

#define size 10

#include <lcd.c>



const unsigned char matriz[size][size] = {

    {0, 16, 32, 48, 64, 80, 96, 112, 128, 144},

    {1, 17, 33, 49, 65, 81, 97, 113, 129, 145},

    {2, 18, 34, 50, 66, 82, 98, 114, 130, 146},

    {3, 19, 35, 51, 67, 83, 99, 115, 131, 147},

    {4, 20, 36, 52, 68, 84, 100, 116, 132, 148},

    {5, 21, 37, 53, 69, 85, 101, 117, 133, 149},

    {6, 22, 38, 54, 70, 86, 102, 118, 134, 150},

    {7, 23, 39, 55, 71, 87, 103, 119, 135, 151},

    {8, 24, 40, 56, 72, 88, 104, 120, 136, 152},

    {9, 25, 41, 57, 73, 89, 105, 121, 137, 153}   

};



int a, b, c, d, e, f, g, decimal;

unsigned int8 aux, dezena, unidade;



void main(void){

   

    for(int i = 0; i < size; i++){

      for(int j = 0; j < size; j++){

         output_c(matriz[i][j]);

         delay_ms(100);

      }

    }

    delay_ms(500);

    

    lcd_init();

    

   while(TRUE){      

      

      a = input(PIN_B0);

      b = input(PIN_B1);

      c = input(PIN_B2);

      d = input(PIN_B3);

      e = input(PIN_B4);

      f = input(PIN_B5);

      g = input(PIN_B6);

      

      decimal = (a<<6)|(b<<5)|(c<<4)|(d<<3)|(e<<2)|(f<<1)|(g<<0);

      

      printf(lcd_putc,"\fBINARIO = %u%u%u%u%u%u%u \nDECIMAL = %u"a, b, c, d, e, f, g, decimal);

      delay_ms(100);

      

      aux = decimal / 10;

      dezena = (int)floor(aux);

      

      aux = decimal - (10 * dezena);

      unidade = (int)floor(aux);

      

      output_c(matriz[dezena][unidade]);

      delay_ms(100);

      

   }



}

 

 

2.gif

"Eu sei daria para usar multiplexador ou um vetor com 10 valores e outra forma, mas o meu objetivo era outro método porque na web nunca encontrei resoluções com matrizes, então resolvi dessa forma para compartilhar conhecimento."

Talvez o interessados futuramente possa aplicar ou usar em algo bem útil.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!