Ir ao conteúdo
  • Cadastre-se

Elivelton_22

Membro Júnior
  • Posts

    8
  • Cadastrado em

  • Última visita

Reputação

0
  1. Bom estou retornando a programação de Microcontroladores, e queria retomar o projeto que ja tinha, porém perdi os arquivos, eu uso um display 128x64 como citado, e quero printar uma imagem na tela, imagem em bitimap já convertida em array, porém estou com a variável em array mas nao consigo ordenar uma função para escrever os bytes da imagem no display, eu lembro que quando fiz achei na internet, mas nao tenho os documentos mais e muito menos sei por onde começar a criar essa função, pois o driver do PIC CCS, do HDM64GS12.c ele da a opção de imprimir pixel, porém a sintaxe é a seguinte glcd_pixel(X,Y,Color) porém eu tenho um array de 64 linhas por 16 colunas, então são 8 bits por cada composição de hexa e cada pixel é um bit, eu teria que decompor os hexas em binario e escreve-los atraves do pixel, eu queria saber se alguem, talvez até o proprio que fez a função que utilizei no passado nao teria os arquivos para me ajudar!!!! Grato Galera.... Conto com a Ajuda de Vocês!!!!!
  2. Galera... valeu mesmo pela ajuda... Eu usei a função sprintf e consegui resolver..valeu mesmo pela atenção de todos...agr vou continuar o projeto para integrar o ds1307 no projeto... valeu
  3. Ok, deixe me ver se entendi, a funcao sprintf, ela apenas formata o valor em string, e pelo contrario do que pensei ela nao da saida para o terminal isso ... porque achei que sprintf seria o mesmo que printf porém para uma string.... é que faz algum tempo que nao programo... ai to meio frio nessas funcoes.. vou tentar este exemplo do sprintf então... valeu mesmo galera... se der certo eu retorno aqui valeu...
  4. variavel=952; milhar=variavel/1000; // -> milhar = 952 / 100 = 0 centena=(variavel-milhar*1000)/100; // -> centena = (952 - 1000 * 0) / 100 = 9 dezena=variavel-milhar*1000-centena*100; // -> dezena = 952 - 0 * 1000 - 9 * 100 = 52 dezena=dezena/10; // dezena = 52 / 10 = 5 (dezena/=10) unidade=variavel%10; // -> unidade = 952 % 10 = 2 (pega o resto da divisão) string[0]=milhar+48; // 0 + 48 = 48 = '0' string[1]=centena+48; // 9 + 48 = 57 = '9' string[2]=dezena+48; // 5 + 48 = 53 = '5' string[3]=unidade+48; // 2 + 48 = 50 = '2' string[4]=0; //NULL TERMINATION Dica: Se estiver simulando no Proteus carregue o PIC com o arquivo .cof e realize o passo a passo do código (usando o pause, step into e step over), assim você descobrirá onde está o erro. Não tenho certeza mas acho que o código do Isadora possui um erro. Ele usa um dado em CHAR para realizar uma operação com dados em INT... A milhar fica Ok mas a partir daí ocorrem erros por causa do uso de um dado já convertido para CHAR em outras operações... Edit: Outra forma (citada pelo Isadora): variavel=952;sprintf(string,"%04lu",variavel); variavel=952; milhar=variavel/1000; // -> milhar = 952 / 100 = 0 centena=(variavel-milhar*1000)/100; // -> centena = (952 - 1000 * 0) / 100 = 9 dezena=variavel-milhar*1000-centena*100; // -> dezena = 952 - 0 * 1000 - 9 * 100 = 52 dezena=dezena/10; // dezena = 52 / 10 = 5 (dezena/=10) unidade=variavel%10; // -> unidade = 952 % 10 = 2 (pega o resto da divisão) string[0]=milhar+48; // 0 + 48 = 48 = '0' string[1]=centena+48; // 9 + 48 = 57 = '9' string[2]=dezena+48; // 5 + 48 = 53 = '5' string[3]=unidade+48; // 2 + 48 = 50 = '2' string[4]=0; //NULL TERMINATION Dica: Se estiver simulando no Proteus carregue o PIC com o arquivo .cof e realize o passo a passo do código (usando o pause, step into e step over), assim você descobrirá onde está o erro. Não tenho certeza mas acho que o código do Isadora possui um erro. Ele usa um dado em CHAR para realizar uma operação com dados em INT... A milhar fica Ok mas a partir daí ocorrem erros por causa do uso de um dado já convertido para CHAR em outras operações... Edit: Outra forma (citada pelo Isadora): variavel=952;sprintf(string,"%04lu",variavel); Então, tipo eu usei seu exemplo da tabela ascii, de soma 48, vou anexar meu programa pra você entender char l,c; void limpa_3() { for(l=99;l<116;l++) { for(c=55;c<64;c++) { glcd_pixel(l,c,0);//limpa posição de temperatura } } } void main() { char hora[] = "10:55";// assim imprime corretamente no display.. char data[] = "22/05/15"; char temp[];// aqui eu preciso modificar, aqui é a variavel que recebe o valor para imprimir no display long temperatura; float valor; int temp_2 [3] = "29";// abaixo apenas variaveis de teste... char km[] = "110"; char un[] = "Km/h"; setup_adc(ADC_CLOCK_INTERNAL); setup_adc_ports(AN0_VREF_VREF); set_adc_channel(0); glcd_init(ON); //inicializa o display glcd_fillScreen(0); //limpa display inteiro glcd_fillScreen(0); //limpa display inteiro glcd_imagem(1); glcd_line(0,43,128,43,1);// linha horizontal, linhas que fiz de moldura no meu projeto glcd_line(37,43,37,64,1);//primeira linha vertical glcd_line(90,43,90,64,1);// segunda linha vertical while(1) { temperatura = read_adc();//lendo o conversor AD valor = (temperatura*0.0488);//logica realizada para pegar uma referência de +5V para o conversor do LM35 valor = valor+48;// exemplo citado pelo test man do forum Clube do Hardware temp =(char)valor;// conversão float para char, peguei de uma apostila de uma faculdade... glcd_text57(3,55,hora,1,1); glcd_text57(40,55,data,1,1); glcd_text57(100,55,temp,1,1);// mostra valor de temp. glcd_circle(117,51,2,0,1); delay_ms(1500); printf("%f \n \n \n \n \n",valor); printf("%c",temp); delay_ms(500); printf("\f"); limpa_3();//aqui seria o while onde limpa os visores inferiores valor=0; temp=0; // O programa assim esta funcionando para imprimir o 9 //, mas o resto dos caracteres não... //porém no hiperterminal que coloquei no proteus a variavel temp assume o valor correto.. //só o display que imprime umas coisas nada a ver // à o programa ta meio bagunçado porque to testando ainda... tipo o hiperterminal do proteus ta dando o resultado certinho so que o display grafico nao, começa a imprimi umas coisas nada a ver quando varia a temperatura do lm35, só o 9 graus que ele imprime certo.... só pra ressaltar os printf... é da função rs232 que usei o hiperterminal para ver se tava certo a variavel que converte em char, o display é a função GLCD_text57 que imprime... como disse pelo hiperterminal ta tudo certooo
  5. Isadora, é que assim, o compilador PIC C CCS, ele usa um "printf" diferente para imprimir em display grafico, é uma biblioteca presente nele em que ele define assim ==> glcd_text57(3,55,variavel,2,1);// em que 3 é a posição "X" do disp, 55 posição "Y", variavel é a variavel do tipo string, ou seja char[]="25", que ele vai imprimir, 2 é o tamanho da fonte que ele vai imprimir no disp, e 1 é a cor do pixel, se colocasse 0 nessa posição ele nao "preenche" o pixel. Ou seja, preciso pega minha variavel retornando valor numérico e transformá-la em char[]="variavel";, e para isso fiz dessa forma==> variavel = (char)read_adc();, que era pra retornar um valor numerico correpondente a tabela ascii, mas nao retorna , por exemplo eu con verto um numero 0, que depois da transformação era pra me dar um numero 048, ele nao me volta nada, se eu coloco 9 ele me volta uma conversão com o numero ":55", nao to conseguindo entender isso... Grato!
  6. Só pra esclarecer um pouco mais qual e minha duvida.. E que a biblioteca glcd do PIC C CCS, ela só imprime no display variáveis do tipo carácter, e o retorno do adc, como qualquer variavel Seria numérico, por isso acho que preciso fazer uma conversão para char, eu fiz essa conversão, ele começou a ler alguma coisa... Mas na conversão ele da o codigo correspondente da tabela asc2 mas ao comparar com a tabela o numero que retorna nao condiz com a tabela... Se alguém puder ajudar fico grato... Talvez se tiver uma forma mais fácil de fazer isso...
  7. Boa tarde galera, estou com um projeto utilizando pic e display grafico, consegui fazer algumas coisas, só que age eu fiz um setup de Ad para ler um lm35, porém na hora de imprimir na tela do display grafico esta com erro, eu fiz uma nova pesquisa e encontrei algo sobre casting, e fiz um casting de long para char, ex:temp = (char)valor// tempo e a variavel que vou imprimir no disp, e o valor e buffer do read adc(), mas mesmo assim nao consegui muita coisa... Estou usando o compilador Pic c da Ccs, 18f452, display 128x64. Grato se alguém puder me ajudar 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...