Nguyên văn bởi mrcuongcon
Xem bài viết
Thông báo
Collapse
No announcement yet.
Giúp em ạ. Đồng hồ LCD của em làm đếm giờ sai số lớn quá...
Collapse
X
-
email:
Giá mà mạch điện tử không có nhiễu (noise) thì mình bây giờ đã là ... đại gia
-
Nguyên văn bởi otacon Xem bài viếtTheo tôi biết thì nhà sx cố tình làm thạch anh 11.0592 là để tạo ra thời gian 1us cho 1 chu kỳ máy,họ đã làm thực nghiệm và đưa ra con số này,nếu dùng 12Mhz thì kô còn chính xác nữahãy cố gắng dù vướn phải thất bại!!!!!!!!
Comment
-
BÁC nói quá chính xác, thực chất là con thạch anh 11.0592 MHz là chính xác nhất. tôi đã làm 1 lần với việc giao tiếp với máy tính dùng thạch anh 12MHz, mặc dù tính toán rất nhiều lần nhưng vẫn không thể giao tiếp đc, do sai tốc độ, lên gặp thầy hỏi thì thấy phán 1 câu, làm thạch anh 12 MHz thì kô chạy đâu, thử với thạch anh 11.0592 đi, tôi nghe lời và thay thạch anh, tính toán lại thông số, nạp 1 cái là chạy ngon lành, ha ha. rõ ràng là thạch anh 11.0592 OK hơn.
Dưới đây là một bảng nói về sai số trong truyền thông USART của họ AVR, ở đây họ đề cập đến sai số truyền thông khi dùng các loại thạch anh khác nhau, có lẽ mọi người đang hiểu rằng đây là sai số dao động của thạch anh , thật là sai lầm!Last edited by mrcuongcon; 20-10-2008, 19:47.
Comment
-
Theo tôi biết thì nhà sx cố tình làm thạch anh 11.0592 là để tạo ra thời gian 1us cho 1 chu kỳ máy,họ đã làm thực nghiệm và đưa ra con số này,nếu dùng 12Mhz thì kô còn chính xác nữa
Với thạch anh 11.0592 là 1000000/921600=1.08506944444.....................(us)
Với thạch anh 12 Mhz là 1000000/1000000=1 (us)
Việc sai số dao động của thạch anh thì do số trời quyết định thôi, mua phải con nào thì dùng con đó.
Comment
-
cac bac giup em nhe.em cung co ban code ve dong ho hien thi tren lcd. nhung gio em muon chuyen hien thi tren led thi phai thay doi j.giup em voi day lan ban code cua em #include <REGX52.H>
#include <stdio.h>
////////////////////
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
////////////////////
char x;
int daitan=1;
char so[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x3 9};
unsigned char gio,phut,giay,time;
/////////////////////////////
void delay(unsigned long int t)
{
unsigned long int i;
for(i=0;i<t;i++);
}
////////////////////////////
void busy_flag(void)
{
P2=0xff;
RS=0;
RW=1;
do
{
EN=1;
delay(10);
EN=0;
x=P2;
x=x&0x80;
}
while(x==0x80);
}
/////////////////////////
void write_command(unsigned char LCD_command)
{
busy_flag();
P2=LCD_command;
RS=0;
RW=0;
EN=1;
delay(50);
EN=0;
delay(50);
}
/////////////////////////
void write_data(unsigned char LCD_data)
{
busy_flag();
P2=LCD_data;
RS=1;
RW=0;
EN=1;
delay(50);
EN=0;
delay(50);
}
//////////////////////////////
void write_string(char *s)
{
while(*s)
{
write_data(*s);
s++;
}
}
//////////////////////////////
void init(void)
{
write_command(0x03);
write_command(0x38);
write_command(0x06);
write_command(0x0c);
write_command(0x01);
}
/////////////////////////////
////////////////////////////////
void main()
{
time=giay=phut=gio=0;
TMOD=0x01;
IE=0x83;
IP=0x01;
IT0=1;
TF0=1;
delay(1000);
init();
while(1)
{
write_command(0x80);
write_string("DESIGNER:NC-HUAN");
write_command(0xC4);
write_data(so[gio/10]);
write_data(so[gio%10]);
write_string(":");
write_data(so[phut/10]);
write_data(so[phut%10]);
write_string(":");
write_data(so[giay/10]);
write_data(so[giay%10]);
write_string(" ");
}
}
void ngatTimer0(void) interrupt 1 //dem thoi gian
{
TF0=0;
TR0=0;
TH0=-50200/256;
TL0=-50200%256;
TR0=1;
time++;
if(time==20)
{
giay++;
if(giay==60)
{
phut++;
if(phut==60)
{
gio++;
if(gio==24)
gio=0;
phut=0;
}
giay=0;
}
time=0;
}
}
void ngatngoai0(void) interrupt 0 //chinh thoi gian
{
TR0=0;
do
{
P0=0xff;
if(P0==0xfe)
{
++giay;
if(giay==60)
giay=0;
delay(2000);
}
if(P0==0xfd)
{
++phut;
if(phut==60)
phut=0;
delay(2000);
}
if(P0==0xfb)
{
++gio;
if(gio==24)
gio=0;
delay(2000);
}
write_command(0xC4);
write_data(so[gio/10]);
write_data(so[gio%10]);
write_string(":");
write_data(so[phut/10]);
write_data(so[phut%10]);
write_string(":");
write_data(so[giay/10]);
write_data(so[giay%10]);
} while(P0!=0xf7);
P0=0xff;
TR0=1;
}
Comment
-
bai nao biet giup gium em nha em ko biet neu hien thi tren led thi code se thay doi nhu the nao
hothieugia86@gmail.com
Comment
-
bạn phải dùng con thời gian thực thì chạy mới có thể gọi là chính xác được, chẳng hạn minh dùng con DS1307, làm cái đồng hồ hiển thị bằng Led 7 thanh, chạy cũng khá chính xác, chạy 5 tháng rùi mà vẫn ngon, minh là dân Hệ thống điện nên chỉ làm cho vui thui
đây là code
/*//////////////////////////////////////////////////
* DONG HO DIEN TU SO
* File: version2.c
* Programmer: Nguyen Van Dung
* Email: dungbk51@yahoo.com.vn
* Version: 2.0
* Compiler: Keil uVision 3
* Update: dungbk51 12/08/2008
* System:
- ...
*///////////////////////////////////////////////////
#include <AT89X51.h>
#define SDA P2_1 //SDA
#define SCL P2_0 //SCL
#define s_inc P3_0
#define s_dec P3_1
#define select P3_3
#define DISABLE_INT IE=0x00; //cam toan bo ngat
#define ENABLE_INT IE=0x81; //cho phep ngat ngoai so 0
#define CLK {SCL=1;{};{};{};{};{};SCL=0;{};{};{};{};{};}
#define ACK {SDA=0;CLK;}
#define NO_ACK {SDA=1;CLK;}
#define I2C_START {SDA=1;SCL=1;{};{};{};{};{};SDA=0;{};{};{};{};{};S CL=0;{};{};{};{};{};} // Marco
#define I2C_STOP {SDA=0;SCL=1;{};{};{};{};{};SDA=1;{};{};{};{};{};}//Marco
bit flag;
unsigned char sec,min,hour,day,date,mon,year,tgmin,tghour,tg1,tg 2,i;
unsigned char sec1,min1,hour1,day1,date1,mon1,year1;//ma thap phan
unsigned char sec2,min2,hour2,day2,date2,mon2,year2;//ma thap phan
unsigned char led_array[11]={0x40,0x73,0x24,0x21,0x13,0x09,0x08,0x63,0x00,0x0 1,0x7f};
//doi thap phan sang thap luc phan va nguoc lai
unsigned char hex_dec(unsigned char hex)
{
return((hex/0x10)*0xA+(hex%0x10));
}
unsigned char dec_hex(unsigned char dec)
{
return((dec/0xA)*0x10+(dec%0xA));
}
void I2C_RW(unsigned char);
unsigned char I2C_RD(bit);
void RTC_Read(void);
void RTC_Write(void);
//chuong trinh hien thi dong ho
void delay(void);
void dislay(void);
void set_clock(void);
void tre_1phan6_giay(void);
//chuong trinh chinh
void main ()
{
P3=0xff;
ENABLE_INT
//can lam chuong bao khi co dien o day
while(1)
{
RTC_Read();
sec1=sec/16; //doan nay tre qua lon den khong sang deu
sec2=sec%16;
min1=min/16;
min2=min%16;
hour1=hour/16;
hour2=hour%16;
if (hour1==0) hour1=10;
date1=date/16;
date2=date%16;
if (date1==0) date1=10;
mon1=mon/16;
mon2=mon%16;
if(mon1==0) mon1=10;
year1=year/16;
year2=year%16;
dislay();
if (flag!=0)
{
flag=0;
sec1=sec2=0;
hour=hex_dec(hour);
min=hex_dec(min);
mon=hex_dec(mon);
date=hex_dec(date);
year=hex_dec(year);
set_clock();
//sau khi da chinh xong
min=dec_hex(min);
hour=dec_hex(hour);
mon=dec_hex(mon);
date=dec_hex(date);
year=dec_hex(year);
RTC_Write();//sau khi thuc hien cau lenh nay thi thoat
P3=0xff;
flag=0;
}
}}
voidflag() interrupt 0 //ngat ngoai so 0
{
flag =1;
}
void I2C_WR(unsigned char c)
{
char i;
for (i=7;i>=0;i--)
{ //sau khi START thi SCL=0;SDA=1---co the thay doi data khi SCL=0
SDA= (c>>i) & 0x01;
CLK;
}
ACK;
}
unsigned char I2C_RD(bit ack)
{
unsigned char c=0;
bit a;
char i;
for (i=7;i>=0;i--)
{
SDA=1;//cau hinh lam cong vao
SCL=1;
{};{};{};{};{}; // SCL tu 1 xuong 0
a=SDA;
SCL=0;{};{};{};
c=c<<1;
if (a) c++;
}
SDA=ack; //bit ACK
CLK;
return (c);
}
void RTC_Read()
{
I2C_START
I2C_WR(0xd0);
I2C_WR(0x00); //vi tri con tro RTC
I2C_STOP
I2C_START
I2C_WR(0xd1);
sec=I2C_RD(0);
min=I2C_RD(0);
hour=I2C_RD(0);
day=I2C_RD(0);
date=I2C_RD(0);
mon=I2C_RD(0);
year=I2C_RD(1); //ket thuc doc du lieu
I2C_STOP
}
/*----------------------------------
--------------------------------*/
void RTC_Write()
{
I2C_START
I2C_WR(0xd0);
I2C_WR(0x00); //vi tri con tro RTC
I2C_WR(0x00); //giay
I2C_WR(min); //phut
I2C_WR(hour); //gio
I2C_WR(day); //thu
I2C_WR(date); //ngay
I2C_WR(mon); //thang
I2C_WR(year); //nam
I2C_WR(0x10);
I2C_STOP;
}
void delay(void)
{
TMOD=0x01;
TL0=0x72;
TH0=0xdf;
TR0=1;
while(TF0==0);
TR0=0;
TF0=0;
}
void dislay(void)
{
tre_1phan6_giay();
tre_1phan6_giay();
tre_1phan6_giay();
tre_1phan6_giay();
tre_1phan6_giay();
tre_1phan6_giay();
}
/*--------------------------------------*/
void tre_1phan6_giay(void)
{
unsigned char i;
for(i=1;i<5;i++)
{
P2=0xdf;
P0=led_array[date1];
P1=led_array[hour1];
delay();
P2=0xbf;
P0=led_array[date2];
P1=led_array[hour2];
delay();
P2=0x7f;
P0=led_array[mon1];
P1=led_array[min1];
delay();
P2=0xef;
P0=led_array[mon2];
P1=led_array[min2];
delay();
P2=0xf7;
P0=led_array[year1];
P1=led_array[sec1];
delay();
P2=0xfb;
P0=led_array[year2];
P1=led_array[sec2];
delay();
}
}
void set_clock(void)
{
//chinh theo thu tu ngay thang nam gio phut giay
while(1)//set_hour
{
delay();//chong rung phim
for(i=0;i<6;i++)
{
P3=0xff;//cong P3 lam cong vao
if(i<3) {hour1=hour2=10;}
else {hour1=hour/10; hour2=hour%10;}
tre_1phan6_giay();//hien thi va chong rung phim
tre_1phan6_giay();
if(s_inc==0) //cho tang gio
{
hour++;
if(hour==24) hour=0;
//chong rung phim
}
if(s_dec==0)
{
hour--;
if(hour==0xff) hour=23;
//chong rung phim
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap for cua chinh gio
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap while cua set_hour
}
if(flag!=0) goto exit;
hour1=hour/10;
hour2=hour%10;
while(1)//set_min
{
delay();//chong rung phim
for(i=0;i<6;i++)
{
P3=0xff;//cong P3 lam cong vao
if(i<3) {min1=min2=10;}
else {min1=min/10; min2=min%10;}
tre_1phan6_giay();//hien thi va chong rung phim
tre_1phan6_giay();
if(s_inc==0)
{
min++;
if(min==60) min=0;
//chong rung phim
}
if(s_dec==0)
{
min--;
if(min==0xff) min=59;
//chong rung phim
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap for
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap while
}
if (flag!=0) goto exit;
min1=min/10;
min2=min%10;
while(1)//set_date
{
delay();//chong rung phim
for(i=0;i<6;i++)
{
P3=0xff;//cong P3 lam cong vao
if(i<3) {date1=date2=10;}
else {date1=date/10; date2=date%10;}
tre_1phan6_giay();//hien thi va chong rung phim
tre_1phan6_giay();//hien thi va chong rung phim
if(s_inc==0)
{
date++;
if(date==32) date=1;
//chong rung phim
}
if(s_dec==0)
{
date--;
if(date==0) date=31;
//chong rung phim
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap for
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap while
}
if (flag!=0) goto exit;
date1=date/10;
date2=date%10;
while(1)//set_mon
{
delay();//chong rung phim
for(i=0;i<6;i++)
{
P3=0xff;//cong P3 lam cong vao
if(i<3) {mon1=mon2=10;}
else {mon1=mon/10; mon2=mon%10;}
tre_1phan6_giay();//hien thi va chong rung phim
tre_1phan6_giay();//hien thi va chong rung phim
if(s_inc==0)
{
mon++;
if(mon==13) mon=1;
//chong rung phim
}
if(s_dec==0)
{
mon--;
if(mon==0) mon=12;
//chong rung phim
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap for
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap while
}
if (flag!=0) goto exit;
mon1=mon/10;
mon2=mon%10;
while(1)//set_year
{
delay();//chong rung phim
for(i=0;i<6;i++)
{
P3=0xff;//cong P3 lam cong vao
if(i<3) {year1=year2=10;}
else {year1=year/10; year2=year%10;}
tre_1phan6_giay();//hien thi va chong rung phim
tre_1phan6_giay();//hien thi va chong rung phim
if(s_inc==0)
{
year++;
if(year==100) year=0;
//chong rung phim
}
if(s_dec==0)
{
year--;
if(year==0xff) year=99;
//chong rung phim
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap for
}
if((flag!=0)|(select==0)) break; //thoat ra khoi vong lap while
}
if (flag!=0) goto exit;
year1=year/10;
year2=year%10;
exit: flag=0;
}
còn đây là sản phẩm, minh đang dự đinh nâg cấp thành hiển thị LCD và có hẹn h, bạn nào quan tâm thì liên hệ nvdung8987@yahoo.com hoặc dungbk51@yahoo.com.vn
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nhathung1101
-
Channel: Điện tử dành cho người mới bắt đầu
31-12-2024, 17:39 -
-
Comment on Thắc mắc về hạ áp cho adapter laptopbởi nguyendinhvan
-
Channel: Điện tử dành cho người mới bắt đầu
29-12-2024, 23:20 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nguyendinhvanPhải làm đúng quy chình thì mới được
Bươc 1 lấy cái nguồn điều chỉnh, set về đúng 12v, cấp cho đường out 19v như hình. Chú ý là phần đầu vào adaptor không cấp điện.
Bước 2 . Kiểm tra điện áp tại chân số 3 das001 có đúng...-
Channel: Điện tử dành cho người mới bắt đầu
29-12-2024, 23:20 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi LamVoNhấp nháy có thể do chu kỳ hoạt động bị rút ngắn quá dẫn đến không đủ nguồn nuôi ic, bác thử tăng giá trị tụ nguồn phụ nuôi ic và giảm giá trị điện trở hạn dòng cho nó xem có cải thiện không....
-
Channel: Điện tử dành cho người mới bắt đầu
29-12-2024, 08:45 -
-
Trả lời cho Mạch tự động bật nguồnbởi nhathung1101Bác đúng là hệ Pháp, nên toàn quên chữ "d".
Nếu em được như bác, đúng 0h mới được stand by với hũ rượu và vợ thì tuyệt.
Nhưng đời không như là mơ, em và lão Đinh Vặn ngấm đủ mà.
Lão Đinh Vặn...-
Channel: Điện tử gia dụng
29-12-2024, 00:17 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nhathung1101Vì bản chất của nó hoạt động theo dòng. Áp chỉ để mức giới hạn.
Cứ hiểu như bạn khôn hơn 10 người, nhưng khả năng thu nhận kiến thức chỉ bằng 1/10 người khác, thì nó sẽ tự điều chỉnh thôi.-
Channel: Điện tử dành cho người mới bắt đầu
28-12-2024, 23:41 -
-
Trả lời cho Mạch tự động bật nguồnbởi nhathung1101Ựa... có lý...
Dưng mà lão chỉ dùng 1 con opto là nguy hiểm lắm.
Có khi nó on lúc lão với ấy ấy về nhà lúc vắng vợ thì khổ. Nên phải thêm cái mạch logic nữa mới được....-
Channel: Điện tử gia dụng
28-12-2024, 23:20 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi lct1610Bác có cách nào khác ngoài quấnlại/rút bớt vòng dây BA (và mua mới ) k nhỉ ? Tại gỡ ra cũng khá lằng nhằng và kì công...
-
Channel: Điện tử dành cho người mới bắt đầu
28-12-2024, 19:30 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi mèomướpDạ với mức áp chênh lệch quá nhìu thì ngoài chỉnh hồi tiếp thì chú cần quấn lại thứ cấp biến áp nữa ạ. Tùy loại mà có thể sẽ khéo léo rút bớt vòng dây đỡ phải tách lõi ferit ạ...
-
Channel: Điện tử dành cho người mới bắt đầu
28-12-2024, 18:57 -
-
bởi lct1610E có adapter laptop cũ hiệu asus chạy tốt ,có đầu ra ổn định ở 19,4v dòng 3,42A ( công suất 60w). E định là hạ nó xuống 12v để cấp nguồn cho đầu camera. Và e đã thử bằng cách can thiệp vào phần hồi tiếp (sử dụng ic DAS001 hay TSM103W) thông...
-
Channel: Điện tử dành cho người mới bắt đầu
28-12-2024, 18:44 -
Comment