Ir ao conteúdo

diego.maga

Membro Pleno
  • Posts

    146
  • Cadastrado em

  • Última visita

Reputação

0
  1. Boa tarde Galera, gostaria de uma ajuda, quero montar um display simples com matriz de led 8x8, conforme o video abaixo utilizando o CCS COMPILER, mas não sei a lógica para a mensagem correr nos leds, alguem poderia me ajudar. Segue um video da lógica que gostaria de fazer, o pic utilizado pode ser qualquer um , pois é algo simples. [ame= ] [/ame]
  2. Não montei ainda no protoboard, estou terminando o meu gravador de pic,assim que terminar eu vou montar no protoboard.Até mais.
  3. o erro é o mesmo que postei ai no forum, os valores das horas se alteram do nada com uns valores doidos 355:88:33
  4. Veja o funcionamento na imagem ( simulado no proteus ISIS 7.0 ) Abaixo um código exemplo do uso da biblioteca com PIC 16F877A OBS : esse código usa a biblioteca lcd_flex.c ( fornecida por mim neste tópico ) #include<16f877.h> #use delay(clock=4000000) #use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7) #fuses XT,NOWDT,PUT,NOBROWNOUT #include<input.c> #include<string.h> #include<stdio.h> #include<libDS1307.c> #define LCD_DB4 PIN_B4 #define LCD_DB5 PIN_B5 #define LCD_DB6 PIN_B6 #define LCD_DB7 PIN_B7 #define LCD_RS PIN_B2 #define LCD_E PIN_B3 #include<lcd_flex.c> #define BT_ajustaHora_e_mais pin_a0 //botao para entrar no ajuste de hora e dado++ #define BT_ajutaData_e_menos pin_a1 //botao para entrar no ajuste de data e dado-- #define BT_desloca_dir pin_a2 //desloca para direita #define BT_desloca_esq pin_a3 //desloca cursor para esquerda // [...] quantos botões a aplicação exigir #define ajuste_hora 1 #define ajuste_data 2 /* VAriaveis globais */ byte _dia,_mes,_ano,_dow,_hora,_min,_seg; //Variaveis que guardam os dados int op=0; // variavel que mostra qual botao foi prescionado /* Protótipo das funções */ void carrega_dados(); boolean debouce(); void trata_botoes(int op); /* Declaração das funções */ void carrega_dados() { ds1307_get_date(&_dia,&_mes,&_ano,&_dow); ds1307_get_time(&_hora,&_min,&_seg); } boolean debounce(void) { disable_interrupts(INT_TIMER1); //desabilita interrupção delay_ms(150); if((!input(BT_ajustaHora_e_mais ))|(!input( BT_ajutaData_e_menos))) { return true; } else return false; } void trata_botoes(int op) { switch(op) { case ajuste_hora: //[...] Aqui o usuario define os comando de ajuste de hora //printf("ajuste de hora\r") // linha para debug break; case ajuste_data: //[...] Aqui o usuario define os comando de ajuste de data //printf("ajuste de data\r") // linha para debug break; default: break; } } #INT_TIMER1 void atualiza_hora() { /******************************************************/ /* A interrupção é chamada a cada 1s e atualiza */ /* os dados adquiridos pelo DS1307 através do TIMER1 */ /******************************************************/ char dia_semana[7][4]={"dom","seg","ter","qua","qui","sex","sab"}; char dia_hoje[4]; set_timer1(3036-get_timer1()); ds1307_get_time(&_hora,&_min,&_seg); ds1307_get_date(&_dia,&_mes,&_ano,&_dow); strcpy(dia_hoje,dia_semana[_dow-1]); lcd_gotoxy(1,1); printf(lcd_putc,"%s - %02d/%02d/%02d",dia_hoje,_dia,_mes,_ano); lcd_gotoxy(5,2); printf(lcd_putc,"%02d:%02d:%02d ",_hora,_min,_seg); } void main() { /***************************************/ /* Configurações dos PORTS e TIMER1 e */ set_tris_b(0); set_tris_c(0b00011000); set_tris_e(1); set_tris_a(1); enable_interrupts(INT_TIMER1); setup_timer_1( T1_INTERNAL|T1_DIV_BY_8); set_timer1(3036); disable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); /**************************************/ //Inicializa o LCD e o DS1307 lcd_init(); delay_ms(1000); ds1307_init(); while(1) { /**************************************************************************/ /* Tratamento de botões /* Para o tratamento de botões pode usar as seguinte técnicas: /* >> Botoões no PORTB - trata interrupção de mundança de estado /* Vantagens: >Não é necessário scan em loop infinito /* sempre então o evento será tratado independente do tempo de prescionamento /* Desvantagens: /* >É preciso verificar qual botão foi prescionado /* para então trata-lo /* >Ruídos no PORTB podem causar mau funcionamento /* >> Scan dos butões /* Vantagens /* >Maior estabilidade contra ruídos /* >Cada botão pode ter sua própria função() /* Desvantagens /* >Tempo é crítico /* >Debounce necessita ter outras interrupções desativadas /* Neste programa será usado o scan /* Apenas um modelo como a implementação é trabalhosa não foi feita aqui /**************************************************************************/ if((!input(BT_ajustaHora_e_mais ))) { if(debounce()) { op = ajuste_hora; trata_botoes(op); } } else if((!input(BT_ajutaData_e_menos))) { if(debounce()) { op = ajuste_data; trata_botoes(op); } } enable_interrupts(INT_TIMER1); //após tratar os botões habilita interrupção } } Espero ter ajudado! Abraço! Ola alyson tentei montar aqui o circuito e o codigo fonte,porém o mesmo esta dando erro.será que você não poderia postar um codigo fonte sem ajustes das horas, somente para mostrar as horas no display. Ola alyson tentei montar aqui o circuito e o codigo fonte,porém o mesmo esta dando erro.Será que você poderia postar um codigo fonte sem ajustes das horas, somente para mostrar as horas no display. Ola gostaria de saber se você consegui resolver este problema,pois tambem estou enfrentando o mesmo problema que você.Se você consegui resolver,poderia me ajudar.Tambem uso o ccs.Obrigado
  5. Muito obrigado vou fazer os testes aqui depois eu comento aqui.Muito obrigado pela sua disposição em ensinar ao proximo,parabens pra você. AlyssonMachado não abusando da sua boa vontade será que daria pra você fornecer o arquivo do proteus do relogio com ajustes que você fez.obrigado
  6. Abaixo o exemplo de uso do driver DS1307.c: #include <ds1307.c> #include <lcd.c> #define I2C_SCL PIN_C3 #define I2C_SDA PIN_C4 #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3) int1 flag=1; int a_seg; void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); lcd_init(); enable_interrupts(INT_SSP); enable_interrupts(GLOBAL); lcd_init(); ds1307_init(); //Exemplo: 09/07/2010 (data) // 23:20:00 (hora) ds1307_set_date_time(9,7,10,00,23,20,0); a_seg = seg; while(TRUE) { ds1307_get_time(hora,mim,seg); ds1307_get_date(dia,mes,ano,dow); If(a_seg!=seg) { printf(lcd_putc,"\f %02i:%02i:%02i\n %02i/%02i/%02i",hora,mim,seg,dia,mes,ano); a_seg=seg; } } } #include "C:\Program Files (x86)\PICC\Projetos\Projects\PIC 16f877A\Transmissor [Versao A].h" Como podem ver o uso é bem simples, é so utilizar o comando ds1307_set_date_time(), ds1307_get_date(),ds1307_get_time() para obter os valores correspondentes. Mas como eu citei, o driver funciona com alguns erros: - O DS1307 não "memoriza" a hora anterior, mesmo estando ligado a bateria. - Quando o PIC é ligado sem utilizar o comando ds1307_set_date_time o valor exibido é "00:00:00". - E quando é utilizado o comando ds_1307_set_date_time o DS1307 sempre inicia na mesma hora configurada (óbvio), sendo assim interrompendo a contagem anterior. Gostaria de saber se alguém poderia me disponibilizar algum driver do DS1307 que funcione corretamente. Desde já agradeço pela ajuda. Ola eu tambem estou tendo a mesma dificuldade que você estava enfrentando em relação a biblioteca ds1307, gostaria de saber se você chegou a alguma conclusão e se possivel postar o codigo.obrigado Ola alyson, eu vi que você entende e muito de programação e gostaria de saber se você consegue arrumar a biblioteca do ds13o7 que esta dando erro ,no qual o felipezero se refere.Eu utilzei somente no proteus essa biblioteca e de repente as horas se alteram sosinha tipo 315:67:88 uns valores doidos e não sei o que fazer

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