PIC 16f887 i DS1307

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
nermin_np
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 21-02-2013, 10:38

PIC 16f887 i DS1307

Post by nermin_np »

Poceo sam da radim digitalni sat sa PIC 16f887 mikrokontrolerom i DS1307 real time clock. U ISIS animacija radi kako treba, dok u realnom okruzenju ne cita vreme iz DS1307. Nadam se da neko moze pomoci, za pull up otpornike stavio sam otpornike od 2.2K. Prilazem ISIS i MikroC prijekat.
Hvala u napred...
Attachments
Digital Clock.zip
(279.56 KiB) Downloaded 407 times
User avatar
morski_pas
Odlično uznapredovao
Odlično uznapredovao
Posts: 639
Joined: 07-03-2011, 23:58
Location: Rijeka

Re: PIC 16f887 i DS1307

Post by morski_pas »

koje kvarcove koristiš za procesor i real time clock :?: što ti ispisuje na displeju :?:
nermin_np
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 21-02-2013, 10:38

Re: PIC 16f887 i DS1307

Post by nermin_np »

za real time koristim 32.768kHz kristal, sto se tice PIC-a nisam vezao nikakav rezonator, kontam da je dovoljan interni. Na display mi u prvoj liniji ispisuje "Time:" i u drugoj "Date:", to je onaj default tekst
User avatar
arcom
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 447
Joined: 05-03-2010, 20:47
Location: Rijeka
Contact:

Re: PIC 16f887 i DS1307

Post by arcom »

Za pocetak prebaci I2C_Init() poslije inicijalizacije portova (red prije LCD_Init() je OK).

Ako LCD ne ispise nista drugo osim "Time:" i "Date:" znaci da PIC zablokira vjerojatno kod read_ds1307() funkcije. Provjeri da nisi zamjenio DATA i CLOCK linije na PIC-u ili RTC-u. Meni je DS1307 znao radit probleme na protoboardu kada bi koristio mrvicu duze kabele za I2C (citaj: duze od 20cm).



EDIT: Tek sam sad skuzio datum posta. A budaleeeee... :oops:
nermin_np
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 21-02-2013, 10:38

Re: PIC 16f887 i DS1307

Post by nermin_np »

Nema veze, sredio sam problem koji sam imao. Mada imam zamerku sto se administratora tice, u ovaj topic je imalo jos postova od strane mene gde sam naglasio da sam sredio problem koji sam imao, i prikacio fajlove projekta koji sam bio obecao da cu postovati, koliko vidim tih mojih postova nema ... nebitno ;)
volter
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 19-08-2009, 16:58
Location: Tuzlanski kanton, JN94IF

Re: PIC 16f887 i DS1307

Post by volter »

Nije do administratora, vjerovatno je ovo razlog: http://www.elektronika.ba/forum/viewtop ... 41#p136418
nermin_np
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 21-02-2013, 10:38

Re: PIC 16f887 i DS1307

Post by nermin_np »

Ok, onda se izvinjavam administratorima na prozivci :D
User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3509
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Re: PIC 16f887 i DS1307

Post by trax »

No problemo :-)

Sad nam opisi u cemu je bio problem i kako si ga rijesio, mozda jos neko bude imao isti problem u buducnosti...
nermin_np
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 21-02-2013, 10:38

Re: PIC 16f887 i DS1307

Post by nermin_np »

Pa bio je problem taj sto nisam bio stavio 3V bateriju na DS1307 i samim tim nije bio startovan. Jedan od usera mi je skrenuo paznju da ako nemam bateriju pin od DS1307 mora da se veze za GND, i sve je proradilo. Nakon cega sam odradio i projekat nesto tipa akvarijumski automat za regulaciju svetla u akvarijumu, merenje temperature i hranjenja akvarijumskih ribica(uredjaj sam startuje pumpice nakon 10 minuta posto se pritisne taster za hranjenje), koristim LCD display. Evo opet kacim projekat kao i PCB plocicu radjenu u Eagle, mozda ce nekom koristiti, inace uredjaj kod mene radi bez problema ev vec pola meseca, jedino sto paralelno na kontakte releja treba staviti redno vezan otpornik od 100R i kondenzator od 0.1 uF, jer prilikom zatvaranja kontakata dolazi do smetnji u mrezi, i iste prouzrokuju smetnje na DS1307 :).

A za sve one koji hoce obican digitalni sat bez gore navedenih osobina prilazem MikroC soruce i ISIS sliku spajanja komponenti. PullUp otpornici su 2k2 otpornici...

Code: Select all

// LCD module connections
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
// End LCD module connections



unsigned short read_ds1307(unsigned short address)
{
  unsigned short r_data;
  I2C1_Start();
  I2C1_Wr(0xD0); //address 0x68 followed by direction bit (0 for write, 1 for read) 0x68 followed by 0 --> 0xD0
  I2C1_Wr(address);
  I2C1_Repeated_Start();
  I2C1_Wr(0xD1); //0x68 followed by 1 --> 0xD1
  r_data=I2C1_Rd(0);
  I2C1_Stop();
  return(r_data);
}

void write_ds1307(unsigned short address,unsigned short w_data)
{
  I2C1_Start(); // issue I2C start signal
  //address 0x68 followed by direction bit (0 for write, 1 for read) 0x68 followed by 0 --> 0xD0
  I2C1_Wr(0xD0); // send byte via I2C (device address + W)
  I2C1_Wr(address); // send byte (address of DS1307 location)
  I2C1_Wr(w_data); // send data (data to be written)
  I2C1_Stop(); // issue I2C stop signal
}

unsigned char BCD2UpperCh(unsigned char bcd)
{
  return ((bcd >> 4) + '0');
}


unsigned char BCD2LowerCh(unsigned char bcd)
{
  return ((bcd & 15) + '0');
}

int Binary2BCD(int a)
{
   int t1, t2;
   t1 = a%10;
   t1 = t1 & 0x0F;
   a = a/10;
   t2 = a%10;
   t2 = 0x0F & t2;
   t2 = t2 << 4;
   t2 = 0xF0 & t2;
   t1 = t1 | t2;
   return t1;
}


int BCD2Binary(int a)
{
   int r,t;
   t = a & 0x0F;
   r = t;
   a = 0xF0 & a;
   t = a >> 4;
   t = 0x0F & t;
   r = t*10 + r;
   return r;
}
unsigned short read_ds1307(unsigned short address );
void write_ds1307(unsigned short address,unsigned short w_data);
unsigned short second;
unsigned short minute;
unsigned short hour;

unsigned short day;
int dday;
unsigned short month;
unsigned short year;


char time[] = "00:00:00";
char date[] = "00.00.00";

void main()
{

  ANSEL=0;                        // Configure AN pins as digital I/O

  
  ANSELH = 0;
  C1ON_bit = 0;                      // Disable comparators
  C2ON_bit = 0;


   Lcd_Init();                        // Initialize LCD
   Lcd_Cmd(_LCD_CLEAR);               // Clear display
   Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
   
   I2C1_Init(100000); //DS1307 I2C is running at 100KHz
   
// PRIMER PODESAVANJA VREMENA
  write_ds1307(0,Binary2BCD(0)); // SEKUNDE
  write_ds1307(1,Binary2BCD(0)); // MINUTI
  write_ds1307(2,Binary2BCD(1)); // SATI
  write_ds1307(4,Binary2BCD(7)); // DAN
  write_ds1307(5,Binary2BCD(6)); // MESEC
  write_ds1307(6,Binary2BCD(13)); // GODINA
  
    

   do
   {

      second = read_ds1307(0);
      minute = read_ds1307(1);
      hour = read_ds1307(2);
      dday = read_ds1307(3);
      day = read_ds1307(4);
      month = read_ds1307(5);
      year = read_ds1307(6);


      time[0] = BCD2UpperCh(hour);
      time[1] = BCD2LowerCh(hour);
      time[3] = BCD2UpperCh(minute);
      time[4] = BCD2LowerCh(minute);
      time[6] = BCD2UpperCh(second);
      time[7] = BCD2LowerCh(second);

      date[0] = BCD2UpperCh(day);
      date[1] = BCD2LowerCh(day);
      date[3] = BCD2UpperCh(month);
      date[4] = BCD2LowerCh(month);
      date[6] = BCD2UpperCh(year);
      date[7] = BCD2LowerCh(year);



      Lcd_out(1, 1, time);
      Lcd_out(2, 1, date);


      Delay_ms(100);


   }while(1);
}
Attachments
Capture.JPG
Capture.JPG (98.85 KiB) Viewed 6475 times
Projekat.zip
(212.57 KiB) Downloaded 384 times
nermin_np
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 21-02-2013, 10:38

Re: PIC 16f887 i DS1307

Post by nermin_np »

Ne znam jel ok pisati opet o ovoj temi, ali me fakat iritira uredjaj u poslednje vreme. Problem prave releji prilikom ukljucenja/iskljucenja uredjaja. Koliko sam uspeo da shvatim sum ne dolazi od strane kalema, vec usled preklapanja kontakata (varnicenja). Probao sam da smetnju profilrtriram uz pomoc kondenzatora i otpornika vezanim na kontakte releja, ali uspeo samo delimicno da otklonim problem. U poslednje vreme i DS1307 je poceo da "kasni" sa merenjem vremena, cesto se desi da prilikom aktiviranja/deaktiviranja releja ocitavanje na LCD display postane nemoguce, pa moram da gasim uredjaj i iznova palim da bi se stabilizovao. Interesuje me ima li neko kakvu semu mreznog filtera napona, ili bilo sta sto bi moglo da mi otkloni problem.. Mozda neko ima neku semu sklopa koji bi zamenio releje, u pitanju je upravljanje induktivnim uredjajima (pumpica, osvetljenje ...) :(
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16f887 i DS1307

Post by Kukinjos »

Najbolje bi ti bilo koristit SSR sa zero crossingom, npr:
http://www.chipoteka.hr/artikl/104435/r ... 39mf22nszf
ili ako treba veća struja:
http://www.holex.hr/prekidaci-releji-ta ... p4-ssr-zc/
a možeš ih napravit i sam s npr. MOC304, MOC3042 ili MOC3043 i vanjskim trijakom, o kome ovisi max. struja. Pogledaj treću stranicu datasheet-a za detalje:
http://www.todopic.com.ar/utiles/moc304 ... r_cero.pdf
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
nermin_np
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 21-02-2013, 10:38

Re: PIC 16f887 i DS1307

Post by nermin_np »

Hvala na odgovoru, probacu sa solid state relejima. Nisam znao da oni mogu da rade i sa induktivnim potrosacima :D
Post Reply