Ir ao conteúdo
  • Cadastre-se

Maria Cristina Oliveira

Membro Pleno
  • Posts

    107
  • Cadastrado em

  • Última visita

Tudo que Maria Cristina Oliveira postou

  1. Meu AT89S52 está numa placa de desenvolvimento que tem leds, chaves, display lcd, etc. E agora tem também um RTC DS 1307. Configurei tudo certinho, horário, data e coloquei a bateria CR 2016. Só que quando eu desligo e ligo a placa de desenvolvimento, mesmo com outro programa no AT89S52, às vezes ela não pega de primeira, ela não entra em rotina, ela fica desorientada com todos os leds acesos, tocando o buzzer e o lcd com todos os pixels acesos. Ai eu desligo e ligo de novo: uma, duas ou três vezes até que o programa no AT89S52 entra rodando normal. (Reparei que isso acontece também num outro circuito que eu tenho também que usa o PIC 16F913. Quando eu ligo a alimentação, às vezes ele não inicializa como deveria, fica desorientado, ele não entra em rotina. Aí eu desligo e ligo de novo e ele entra em rotina normalmente.) Só que na placa com o AT89S52 e com o DS1307, o problema é mais sério porque quando eu ligo a alimentação e o AT89S52 fica desorientado, ele envia dados confusos para o DS1307 alterando o horário e a data (até então corretos) preservados pela bateria CR2016. Será que esse problema tem solução? Agradeço qualquer ajuda.
  2. @if. Oi: Funcionou!!!!!!!!!!!!!! Era esse bit mesmo que estava impedindo o relógio de funcionar! Obrigada pela ajuda!
  3. @if. Oi: Achei que havia um comando para ligar com base nesse programa: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //Programa : Relogio com modulo RTC DS1307 //Autor : FILIPEFLOP //Carrega a biblioteca do RTC DS1307 #include <DS1307.h> //Modulo RTC DS1307 ligado as portas A4 e A5 do Arduino DS1307 rtc(A4, A5); void setup() { //Aciona o relogio rtc.halt(false);----------------------------------------------------------------(OLHA AQUI) //As linhas abaixo setam a data e hora do modulo //e podem ser comentada apos a primeira utilizacao rtc.setDOW(FRIDAY); //Define o dia da semana rtc.setTime(20, 37, 0); //Define o horario rtc.setDate(6, 6, 2014); //Define o dia, mes e ano //Definicoes do pino SQW/Out rtc.setSQWRate(SQW_RATE_1); rtc.enableSQW(true); Serial.begin(9600); } void loop() { //Mostra as informações no Serial Monitor Serial.print("Hora : "); Serial.print(rtc.getTimeStr()); Serial.print(" "); Serial.print("Data : "); Serial.print(rtc.getDateStr(FORMAT_SHORT)); Serial.print(" "); Serial.println(rtc.getDOWStr(FORMAT_SHORT)); //Aguarda 1 segundo e repete o processo delay (1000); } @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ lcd.h /* * Filename : lcd.h * Hardware : Controller -> P89V51RD2 * XTAL -> 18.432 MHz * Mode -> 6 Clock/MC * I/O : RS -> P2.5 * Enable -> P2.4 * Data4567 -> P2.0,P2.1,P2.2,P2.3 * Compiler : SDCC * Author : [email protected] * Date : 01/08/06 */ #define LCD_en P2_4 #define LCD_rs P2_5 #define LCD_DELAY 355 /* Delay for 1 ms */ #define LCD_clear() LCD_command(0x1) /* Limpa o LCD */ #define LCD_origin() LCD_command(0x2) /* Set to origin LCD */ #define LCD_row1() LCD_command(0x80) /* Começa na linha 1 */ #define LCD_row2() LCD_command(0xC0) /* Começa na linha 2 */ #define LCD_row3() LCD_command(0x94) /* Começa na linha 3 */ #define LCD_row4() LCD_command(0xD4) /* Começa na linha 4 */ /*************************************************** * Prototype(s) * ***************************************************/ void LCD_delay(unsigned char ms); void LCD_enable(void); void LCD_command(unsigned char command); void LCD_putchar(unsigned char ascii); void LCD_puts(unsigned char *lcd_string); void LCD_init(void); void LCD_putint (unsigned int vAL, char pT, char Lengh); //void LCD_cursor(bit blink); /*************************************************** * Sources * ***************************************************/ /* void LCD_cursor(bit blink){ if(blink) LCD_command(0x0F); else LCD_command(0x0C); } */ //*********************************************************** void LCD_delay(unsigned char ms) { unsigned char n; unsigned int i; for (n=0; n<ms; n++) { for (i=0; i<LCD_DELAY; i++); /* For 1 ms */ } } //*********************************************************** void LCD_enable(void) { LCD_en = 0; /* Clear bit P2.4 */ LCD_delay(1); LCD_en = 1; /* Set bit P2.4 */ } //*********************************************************** void LCD_command(unsigned char command) { LCD_rs = 0; /* Clear bit P2.5 */ P2 = (P2 & 0xF0)|((command>>4) & 0x0F); LCD_enable(); P2 = (P2 & 0xF0)|(command & 0x0F); LCD_enable(); LCD_delay(1); } //*********************************************************** void LCD_putchar(unsigned char ascii) { LCD_rs = 1; /* Set bit P2.5 */ P2 = (P2 & 0xF0)|((ascii>>4) & 0x0F); LCD_enable(); P2 = (P2 & 0xF0)|(ascii & 0x0F); LCD_enable(); LCD_delay(1); } //*********************************************************** void LCD_puts(unsigned char *lcd_string) { while (*lcd_string) { LCD_putchar(*lcd_string++); } } //*********************************************************** void LCD_init(void) { LCD_en = 1; /* Set bit P2.4 */ LCD_rs = 0; /* Clear bit P2.5 */ LCD_command(0x33); LCD_command(0x32); LCD_command(0x28); LCD_command(0x0C); LCD_command(0x06); LCD_command(0x01); /* Clear */ LCD_delay(256); } //*********************************************************** void LCD_putint(unsigned int val, char pT, char Lengh){ unsigned char i=0; char vet[5]; //********************************* for(i=4;i>0;i--){ vet[i]=(val%10); val/=10; } vet[i]=val%10; //********************************* //if(vet[0]==0 && vet[1]!=0) vet[0]='*'; //dezena minhar if(Lengh>4){ if(pT==1){ LCD_putchar(vet[0]+48); LCD_putchar('.'); } else{ if(vet[0]!=0 || pT==0) LCD_putchar(vet[0]+48); else LCD_putchar(' '); } } //milhar: if(Lengh>3){ if(pT==2){ LCD_putchar(vet[1]+48); LCD_putchar('.'); } else{ if(pT<2 || vet[0]!=0 || vet[1]!=0) LCD_putchar(vet[1]+48); else LCD_putchar(' '); } } //Centena: if(Lengh>2){ if(pT==3){ LCD_putchar(vet[2]+48); LCD_putchar('.'); } else{ if(pT<3 || vet[0]!=0 || vet[1]!=0 || vet[2]!=0) LCD_putchar(vet[2]+48); else LCD_putchar(' '); } } //Dezena: if(Lengh>1){ if(pT==4){ LCD_putchar(vet[3]+48); LCD_putchar('.'); } else{ if(pT<4 || vet[0]!=0 || vet[1]!=0 || vet[2]!=0 || vet[3]!=0) LCD_putchar(vet[3]+48); else LCD_putchar(' '); } } //Unidade: LCD_putchar(vet[4]+48); //************************************************************************************** } @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //******************************************************************* // RTC DS1307 RealTime Clock for 8051 Series Using I2C Protocol // All Data of DS1307 is originaly in BCD format // It needs i2c.h to work // // Writed by Cristian Machado Goularte // friday, 19/05/2017 // Please visit www.u8051.com.br //******************************************************************* #define RTC_SEC 0X00 //Seconds Time Address #define RTC_MIN 0X01 //Minutes Time Address #define RTC_HOUR 0X02 //Hours Time Address #define RTC_DOW 0X03 //Day Of Week Date Address #define RTC_DAY 0X04 //Day of Mounth Date Address #define RTC_MONTH 0X05 //Month Of Year Date Address #define RTC_YEAR 0X06 //Year Date Address #define RTC 208 //RTC DS1307 I2C Address struct{ char hour; char min; char sec; char year; char month; char day; char dow; } rtc; //******************************************************** char bcdToDec(char valueBCD){ return((valueBCD/16)*10)+(valueBCD%16); } //******************************************************** char decToBCD(char valueDec){ return(((valueDec/10)*16)+(valueDec%10)); } //********************************************************** void setRTC(char NewValue,char addr){ //Ex.: NewValue=12, addr=RTC_SEC -Time will be xx:xx:12 //Ex.: NewValue=12, addr=RTC_HOUR -Time will be 12:xx:xx //Ex.: NewValue=05, addr=RTC_DAY -Date will be 05/xx/xx save_i2c(RTC,addr,decToBCD(NewValue)); getTime(); getDate(); } //********************************************************** void getDate(){ rtc.day=read_i2c(RTC,RTC_DAY); //Range: 01-31 rtc.day=bcdToDec(rtc.day); //Converts BCD to DEC rtc.month=read_i2c(RTC,RTC_MONTH); //Range: 01-12 rtc.month=bcdToDec(rtc.month); //Converts BCD to DEC rtc.year=read_i2c(RTC,RTC_YEAR); //Range: 00-99 rtc.year=bcdToDec(rtc.year); //Converts BCD to DEC rtc.dow=read_i2c(RTC,RTC_DOW); //Range: 1-7 } //******************************************************** void getTime(){ rtc.hour=read_i2c(RTC,RTC_HOUR); //Range: 00-24h rtc.hour=bcdToDec(rtc.hour); //Converts BCD to DEC rtc.min=read_i2c(RTC,RTC_MIN); //Range: 00-59m rtc.min=bcdToDec(rtc.min); //Converts BCD to DEC rtc.sec=read_i2c(RTC,RTC_SEC); //Range: 00-59s rtc.sec=bcdToDec(rtc.sec); //Converts BCD to DEC } @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ I2C.h #define TEMPO 1 //************************************************************************** void delay_i2c(char i) { int j; while(i--) for(j=0;j<30;j++); } //************************************************************************** void start(void) { /*para iniciar a comunicacao deve-se produzir nivel alto para baixo em sda com sck=1 */ sda=1; delay_i2c(TEMPO); sck=1; delay_i2c(TEMPO); sda=0; //sck=0; } //************************************************************************** void stop() { /* para parar comunicacao i2c deve-se produzir nivel baixo para alto em sda com sck=1 */ sda=0; delay_i2c(TEMPO); sck=1; sda=1; } void write(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { sck=0; sda=(dat&0x80>>i)?1:0; delay_i2c(TEMPO); sck=1; } } void ack(void) { sck=0; delay_i2c(TEMPO); sda=1; delay_i2c(TEMPO); sck=1; delay_i2c(TEMPO); sck=0; } void noack(void) { sck=0; delay_i2c(TEMPO); sda=1; delay_i2c(TEMPO); sck=1; } unsigned char read() { unsigned char i,buff=0; sda=1; for(i=0;i<8;i++) { sck=1; if(sda) buff|=(0x80>>i); sck=0; } return buff; } void save_i2c(char id,char addr,char ch) { start(); write(id); ack(); write(addr); ack(); write(ch); ack(); stop(); delay_i2c(100); } char read_i2c(char id,char addr) { unsigned char buff; start(); write(id); ack(); write(addr); ack(); start(); write(id|1); ack(); buff=read(); noack(); stop(); return buff; }
  4. @if. Oi ! Conferi as ligações e está tudo OK. Não existiria um comando para dar a partida no relógio? Ou ele funciona sozinho? ?????????????????????????????????????????? DS 1307.doc I2C.doc lcd.doc
  5. Oi: Não consigo fazer funcionar. Só funciona no Isis. O relógio só fica parado. Alguém sabe o que está acontecendo? Maria Cristina #include<AT89X52.h> #include<lcd.h> #include<delay.h> #define sck P2_6 #define sda P2_7 #include<i2c.h> #include<ds1307.h> //******************************************************** void main(){ char dado=0; LCD_init(); while(1) { //Ajuste do Relógio: if(P3_2==0){ setRTC(rtc.hour+1,RTC_HOUR); if(rtc.hour>23) setRTC(0,RTC_HOUR); } if(P3_1==0) setRTC(rtc.min+1,RTC_MIN); if(P3_0==0) setRTC(rtc.year+1,RTC_YEAR); getTime(); LCD_putchar(rtc.hour/10+48); LCD_putchar (rtc.hour%10+48); LCD_putchar (':'); LCD_putchar (rtc.min/10+48); LCD_putchar (rtc.min%10+48); LCD_putchar (':'); LCD_putchar (rtc.sec/10+48); LCD_putchar (rtc.sec%10+48); getDate(); LCD_row2(); LCD_putchar (rtc.day/10+48); LCD_putchar (rtc.day%10+48); LCD_putchar ('/'); LCD_putchar (rtc.month/10+48); LCD_putchar (rtc.month%10+48); LCD_putchar ('/'); LCD_putchar (rtc.year/10+48); LCD_putchar (rtc.year%10+48); LCD_putchar (' '); if(rtc.dow==1) LCD_puts("DOM"); if(rtc.dow==2) LCD_puts("SEG"); if(rtc.dow==3) LCD_puts("TER"); if(rtc.dow==4) LCD_puts("QUA"); if(rtc.dow==5) LCD_puts("QUI"); if(rtc.dow==6) LCD_puts("SEX"); if(rtc.dow==7) LCD_puts("SAB"); delay_ms(200); LCD_row1();}}

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!