PIC 16f887 i DS1307
Moderators: pedja089, stojke369, [eDo], trax
PIC 16f887 i DS1307
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...
Hvala u napred...
- Attachments
-
- Digital Clock.zip
- (279.56 KiB) Downloaded 405 times
- morski_pas
- Odlično uznapredovao
- Posts: 639
- Joined: 07-03-2011, 23:58
- Location: Rijeka
Re: PIC 16f887 i DS1307
koje kvarcove koristiš za procesor i real time clock što ti ispisuje na displeju
Re: PIC 16f887 i DS1307
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
Re: PIC 16f887 i DS1307
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...
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...
Re: PIC 16f887 i DS1307
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
-
- Pravo uznapredovao :)
- Posts: 250
- Joined: 19-08-2009, 16:58
- Location: Tuzlanski kanton, JN94IF
Re: PIC 16f887 i DS1307
Nije do administratora, vjerovatno je ovo razlog: http://www.elektronika.ba/forum/viewtop ... 41#p136418
Re: PIC 16f887 i DS1307
Ok, onda se izvinjavam administratorima na prozivci
Re: PIC 16f887 i DS1307
No problemo
Sad nam opisi u cemu je bio problem i kako si ga rijesio, mozda jos neko bude imao isti problem u buducnosti...
Sad nam opisi u cemu je bio problem i kako si ga rijesio, mozda jos neko bude imao isti problem u buducnosti...
Re: PIC 16f887 i DS1307
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...
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 (98.85 KiB) Viewed 6458 times
-
- Projekat.zip
- (212.57 KiB) Downloaded 383 times
Re: PIC 16f887 i DS1307
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 ...)
Re: PIC 16f887 i DS1307
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
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 ....
Re: PIC 16f887 i DS1307
Hvala na odgovoru, probacu sa solid state relejima. Nisam znao da oni mogu da rade i sa induktivnim potrosacima