Nguyên văn bởi apple
Xem bài viết
Làm Đồng hồ để bàn với DS1307 và Mega8!
Collapse
X
-
ơ thế nếu dùng thanh ghi dịch như 595 chẳng hạn thì 12 led em phải dùng 12 con 74hc595 ạ, trời vậy thì cồng kềnhquá mà viết code cho nó cũng khủng qua đi mất
-
Đã xong, tuy nhiên mới làm cái alarm đơn giản thui. Bác xem rồi đóng góp thêm nhé!Nguyên văn bởi vuquangpsoc Xem bài viếtBác có thể viết về vụ Alarm đc không em rất chờ đợi đó.em nghĩ cũng có nhiều người chờ đợi như em
Code:/***************************************************** This program was produced by the CodeWizardAVR V1.24.2c Professional Automatic Program Generator © Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.ro e-mail:office@hpinfotech.ro Project : Version : Date : 10/7/2008 Author : Hoang Thang Company : thangktvta@gmail.com Comments: Chip type : ATmega8 Program type : Application Clock frequency : 1.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega8.h> #include <delay.h> // I2C Bus functions #asm .equ __i2c_port=0x18 ;PORTB .equ __sda_bit=0 .equ __scl_bit=1 #endasm #include <i2c.h> // DS1307 Real Time Clock functions #include <ds1307.h> unsigned char h,m,s,g,p; void disp(int add, unsigned char dat); void wr(unsigned char add, unsigned char dat); void reng(); unsigned char read(unsigned char add); // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { /*********************************************************************************** Nhan 1 phat thi chinh gio -----2----------------phut -----3----------------dat gio -----4----------------Dat phut /***********************************************************************************/ int a=0; g=h; p=m; while(1) { if (PIND.2==0) { a++; if (a>4) a=0; delay_ms(100); } disp(1,a); switch (a){ case 1: { if (PIND.0==0) { h++; // up delay_ms(300); } if (PIND.1==0) { h--; // Down delay_ms(300); } if (h>12) h=h-12; if (h<1) h=12; disp(3,(h/10)%10); disp(4,h%10); break; } case 2: { if (PIND.0==0) { m++; // up if (m==60) m=0; delay_ms(300); } if (PIND.1==0) { m--; // Down if (m==0) m=59; delay_ms(300); } disp(3,(m/10)%10); disp(4,m%10); break; } case 3: { if (PIND.0==0) { g++; // up delay_ms(300); } if (PIND.1==0) { g--; // Down delay_ms(300); } if (g>12) g=g-12; if (g<1) g=12; disp(3,(g/10)%10); disp(4,g%10); break; } case 4: { if (PIND.0==0) { p++; // up delay_ms(300); } if (PIND.1==0) { p--; // Down delay_ms(300); } if (p<1) p=59; if (p>59) p=1; disp(3,(p/10)%10); disp(4,p%10); break; } } if (PIND.3==0) // Thoat chinh gio. { delay_ms(10); rtc_set_time(h,m,s); delay_ms(500); wr(0,0); wr(0x08,g); wr(0x09,p); break; } } } // Declare your global variables here void disp(int add, unsigned char dat) { unsigned char num_led[5]={0,0x7f,0xbf,0xdf,0xef}; PORTC=dat; PORTD=num_led[add]; delay_ms(1); PORTD=0xff; } void wr(unsigned char add, unsigned char dat) { i2c_start(); i2c_write(0xd0); i2c_write(add); i2c_write(dat); i2c_stop(); } void reng(){ PORTB.2=0; } unsigned char read(unsigned char add) { unsigned char data; i2c_start(); i2c_write(0xd0); i2c_write(add); i2c_start(); i2c_write(0xd0 | 1); data=i2c_read(0); i2c_stop(); return data; } void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0xff; DDRB=0xff; // Port C initialization // Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out // State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0 PORTC=0xff; DDRC=0xfF; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T PORTD=0xff; DDRD=0xF0; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Low level // INT1: Off GICR|=0x40; MCUCR=0x00; GIFR=0x40; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; SFIOR=0x00; // I2C Bus initialization i2c_init(); // DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: On // Square wave frequency: 1Hz rtc_init(0,1,0); //wr(0,0); //rtc_set_time(19,18,0); // Global enable interrupts #asm("sei") while (1) { // Place your code here rtc_get_time(&h,&m,&s); if (h>12) h=h-12; if (h==read(0x08)& m==read(0x09)) reng(); disp(1,(h/10)%10); disp(2,h%10); disp(3,(m/10)%10); disp(4,m%10); }; }
Leave a comment:
-
Bác có thể viết về vụ Alarm đc không em rất chờ đợi đó.em nghĩ cũng có nhiều người chờ đợi như emNguyên văn bởi thangktvta Xem bài viếtMột tháng mà bác chạy sai mấy phút là phải xem lại phần cứng rồi đó, em chạy cả nửa năm gần như chẳng thấy sai tí nào. Có hôm tình cờ phát hiện ra một điều rất hay từ Mainboard máy tính đó là: Tất cả thạch anh họ đều nối mass cho vỏ???!!! Hihi, về áp dụng liền!
Leave a comment:
-
Một tháng mà bác chạy sai mấy phút là phải xem lại phần cứng rồi đó, em chạy cả nửa năm gần như chẳng thấy sai tí nào. Có hôm tình cờ phát hiện ra một điều rất hay từ Mainboard máy tính đó là: Tất cả thạch anh họ đều nối mass cho vỏ???!!! Hihi, về áp dụng liền!Nguyên văn bởi zemen Xem bài viếtMình đang chạy thử 1 con ds1307+th.anh 32768+AT89S52 thấy độ 1 tháng thì sai mất 1-2 phút ấy. Không biết là mạch đã chuẩn chưa nữa! Về giá thì tùy loại, có đợt hình như mua có 13nd, nhưng sợ sai nên lên sau mua cái khác thì giá lại >20nd, lâu rồi o nhớ giá chính xác.
Leave a comment:
-
Mình đang chạy thử 1 con ds1307+th.anh 32768+AT89S52 thấy độ 1 tháng thì sai mất 1-2 phút ấy. Không biết là mạch đã chuẩn chưa nữa! Về giá thì tùy loại, có đợt hình như mua có 13nd, nhưng sợ sai nên lên sau mua cái khác thì giá lại >20nd, lâu rồi o nhớ giá chính xác.
Leave a comment:
-
em sẽ quyết làm một cái đồng hồ xịn sử dụng DS307 xem sao, nó có đắt lăm không các anh nhỉ, thấy các anh bạn luận em đã vỡ ra được nhiều điều. ngày trước không biết đến con DS này có, em phải làm một mạch tích vào dây truyền đóng gói để đảm bảo sau 30 ngày khách hàng không trả tiền thì dựng hoạt động, em lấy luôn con đồng hồ 30k về lắp vào tạo xung
Leave a comment:
-
To: Các bác!
Cái vụ dùng LED to cho đồng hồ là hợp lý, vì khi treo lên hay để bàn mà nhìn từ xa mới thấy rõ được. Vấn đề ánh sáng bị mờ thì tôi đã giải quyết ok. Cơ bản là như thế này: Nguồn cấp cho CS(A not hay Catot) của LED là nguồn có thể thay đổi và dùng LM317. Nếu tính được Duty-cyle thì tốt, nếu không thì khi chạy chuơng trình xong rồi đo kiểm điện áp trung bình rồi răng dần áp đặt lên LED, khi nào cảm thấy độ sáng phù hợp là ok ( Điện áp trung bình không được vượt quá điện áp định mức của LED - tùy loại).
Còn vụ đặt giờ báo thức thì tôi đã viết code xong rồi, trước mắt là đặt 1 alarm thôi. Nếu có ý định làm chuông báo cho trường học thì nhất định phải config giờ mùa đông - hè bằng phím bấm vì cái này thay đổi hàng năm - do ban giám hiệu quyết định nên không cần auto làm gì cho tốn tài nguyên.
To em Bích: với Mega8 có thể vẫn dùng thạch anh 32.768 để tính chính xác RTC được ( Dùng 2 chân T1, T2 gì đó - anh chưa thử). Cách này không nên dùng cho đồng hồ chuyên nghiệp bởi vì đã tính thời gian thực thì phải có NVRAM, mà NVRAM thì = SRAM + PIN CMOS, mà Vdk sẽ ngốn PIN gấp mấy lần DS307 nên khả năng vài tháng phải chỉnh một lần là cái chắc (Giống như điều khiển TV phải thay PIN).
Leave a comment:
-
Cái này bác tải datasheet về đọc thêm để biết các chân nhé, mình chỉ nói sơ như vậy cho bác hiểu để tự ngâm cứu sẽ thấy hay hơn đó, đúng ko nhẩy...Chào bác apple rất vui vì có bác đã phát biểu nhưng bác có thể hướng dẫn vụ quét LED 7 bằng 595 đc ko bác em không biết cách sử dụng 595 dể quét.Bác cho cái Code là tốt nhất.Em chỉ muốn làm thế nào để on và off đc từ 595 tới LED 7 thôi.Cảm ơn bác trước
Con 74595 là một thanh ghi dịch có chốt ngõ ra khi bác cấp một xung clock vào chân clock thì nó sẽ nuốt một bít đang tồn tại ở chân data vào thanh ghi dịch bên trong nó, cứ thế mỗi lần cấp một xung clock nó sẽ nuốt data vào, các data bít vào sau sẽ đẩy data bit vào trước lên vị trí bit cao hơn, khi cần đưa giá trị của thanh ghi này ra các chân ngõ ra thì cấp cho nó một xung vào chân chốt ngõ ra để nó xuất data bên trong ra các chân ngõ ra. để sử dụng thanh ghi này có hai cách là dùng phần mềm tự tạo ra các dạng xung cấp cho 74595 hoặc phần cứng có thể dùng bộ SPI (Serial Peripheral Interface) của AVR sẽ tiện hơn. Bác có thể đọc thêm phần này bên Tutorial quét led ma trận, bên đó có code cho bạn đọc mệt nghỉ...
To Le Thi Bich:
À, anh ko có ý định bắt bẻ gì e đâu, "nâng như nâng trứng hứng như hứng hoa" còn ko hết nữa là...bắt chẹt...Nhưng nếu em tăng áp thì sẽ mất công tạo thêm phần áp riêng đó và có khi là sẽ thiếu an toàn nếu em giảm đi số lượng led được quét trong một MODE nào đó của cái đồng hồ. Nhưng mà chung quy nếu e đã thử và thấy nó hoạt động tốt thì cứ làm, a đâu có phải mấy ông thầy trừ bớt điểm của e đâu... a hiền khô như cục đá à...nếu tối quá em nghĩ mình có thể tăng áp nó lên vươt định mức một tí tẹo cũng được mà
Last edited by apple; 19-10-2008, 23:32.
Leave a comment:
-
vâng em cảm ơn anh.Nguyên văn bởi apple Xem bài viếtEm đã thử làm với loại led to cỡ 2inch chưa, chỉ cần em quét 6 con thôi là nhìn cũng thấy ko rõ lắm khi để ngoài sáng rồi đó em.các loại led nhỏ trong mỗi thanh chỉ có một diode sụt áp khoảng hơn 2v nhưng các loại led to thì mỗi thanh có tới 2 con diode mắc nối tiếp do vậy sụt áp cỡ khoảng hơn 4v chút xíu, hôm nào rảnh em có thể đo kiểm và làm thử sẽ rõ.
Em quét led cũng tương tự như em đang thực hiện điều xung ở chân Anode của thanh led đó vậy, em thử lấy giấy bút vẽ giản đồ thời gian hoặc giản đồ xung cho mỡi led7seg em sẽ thấy ngay thôi.
A ví dụ nhé, với 12con led của em, giả sử em quét với tần số 1Khz tức chu kỳ 1ms đúng ko, mỗi led sẽ sáng trong thời gian 1ms/12=0.083ms tương đương điều xung với duty circle là 0.083/1*100%=8,3%, hơi bị nhỏ đúng ko e, từ đó em sẽ tính ra áp trung bình đặt vào Anode đúng ko, em tính thử đi...Chúc e học tốt
nhưng mà đồng hồ treo tường thì cần gi leb to vậy anh,
nếu tối quá em nghĩ mình có thể tăng áp nó lên vươt định mức một tí tẹo cũng được mà
Leave a comment:
-
tất nhiên em không phải làm để tăng ai nên bàn luận với các anh để học hỏi các anh là chính.Nguyên văn bởi AVR_VN Xem bài viếtCon Mega8 nếu em dùng thạch anh bình thường thì không chính xác đâu, vì thạch anh gì mà chả có sai sô chút ít, đủ để sai giờ, nếu vẫn muốn dùng thì em dùng ngắt Timer chứ ai lại đi tính toán thời gian thực hiện lệnh,...
PS: Con gái trường Mình học ĐH khối A xinh thì hiếm ( có thể do A chưa thấy ) nhưng học Cao Đẳng Toàn Xinh thôi à! hê hê !!!
(em nghe con trai họ kháo nhau "quỷ BK ma XD")
Leave a comment:
-
Em đã thử làm với loại led to cỡ 2inch chưa, chỉ cần em quét 6 con thôi là nhìn cũng thấy ko rõ lắm khi để ngoài sáng rồi đó em.các loại led nhỏ trong mỗi thanh chỉ có một diode sụt áp khoảng hơn 2v nhưng các loại led to thì mỗi thanh có tới 2 con diode mắc nối tiếp do vậy sụt áp cỡ khoảng hơn 4v chút xíu, hôm nào rảnh em có thể đo kiểm và làm thử sẽ rõ.
Em quét led cũng tương tự như em đang thực hiện điều xung ở chân Anode của thanh led đó vậy, em thử lấy giấy bút vẽ giản đồ thời gian hoặc giản đồ xung cho mỡi led7seg em sẽ thấy ngay thôi.
A ví dụ nhé, với 12con led của em, giả sử em quét với tần số 1Khz tức chu kỳ 1ms đúng ko, mỗi led sẽ sáng trong thời gian 1ms/12=0.083ms tương đương điều xung với duty circle là 0.083/1*100%=8,3%, hơi bị nhỏ đúng ko e, từ đó em sẽ tính ra áp trung bình đặt vào Anode đúng ko, em tính thử đi...Chúc e học tốt
Leave a comment:
-
Con Mega8 nếu em dùng thạch anh bình thường thì không chính xác đâu, vì thạch anh gì mà chả có sai sô chút ít, đủ để sai giờ, nếu vẫn muốn dùng thì em dùng ngắt Timer chứ ai lại đi tính toán thời gian thực hiện lệnh,...
PS: Con gái trường Mình học ĐH khối A xinh thì hiếm ( có thể do A chưa thấy ) nhưng học Cao Đẳng Toàn Xinh thôi à! hê hê !!!
Leave a comment:
-
à em tưởng con DS j dó là vi điều khiển bình thường cơNguyên văn bởi AVR_VN Xem bài viếtôi trời ơi? thế người ta sinh ra con DS1307 với cả con thạch anh chính xác chuyên cho đồng hồ làm chi vậy? nếu tính được như em thì người ta dùng luôn thạch anh củng VDK chứ làm gì vất vả cho mệt... Đồng hồ mà 6 tháng chính 1 lần thì a củng thua, mấy năm không cần chỉnh nữa là
nếu có IC chuyên dùng vậy thì tốt quá nhưng anh lại phải lamf cồng kềnh mạch ra dẫn đến tốn pin hơn, em chỉ cần mỗi con mega8 làm toàn bộ
Leave a comment:
-
Chào bác apple rất vui vì có bác đã phát biểu nhưng bác có thể hướng dẫn vụ quét LED 7 bằng 595 đc ko bác em không biết cách sử dụng 595 dể quét.Bác cho cái Code là tốt nhất.Em chỉ muốn làm thế nào để on và off đc từ 595 tới LED 7 thôi.Cảm ơn bác trướcNguyên văn bởi apple Xem bài viếtChà dzụ này... phải xem xét cho kỹ một chút nghe e Bích (mà chả biết có phải em là "em" thiệt hôg hay là a chàng nào đó kiếm cái nick dễ thương để anh em DTVN quan tâm chăm sóc ấy các bác nhẩy
)
Về lý thuyết em có quét cả trăm con led7seg cũng ko sao cả, nhưng thực tế phải xem xét đến kích thước của led7seg. Nếu em quét 12led loại 14.2 mm thì còn tạm chấp nhận được chứ loại lớn thì thật khó để đủ dòng và áp cho led ság rõ (ban ngày).Nếu làm đồng hồ treo tường thì phải chơi led loại lớn một chút thì đứng xa nhìn mới rõ, mới đã, cỡ 2inch .
Bởi vì rèeng ... khi số lượng led tăng lên đồng nghĩa với thời gian off của led sẽ tăng lên, mà như thế led sẽ bị giảm độ sag mất rồi.
Ta có thể dùng nhiều cách, xin ví dụ một chút:
-dùng IC chốt cho mỗi led (cách này hơi tốn đường điều khiển một chút)
-dùng các thanh ghi dịch loại serial in, parallel out (cách này tốn rất ít đường điều khiển, minimum chỉ khoảng 3 chân thôi, ta có thể dùng Attiny quét cũng vô tư).
Chúc cả nhà học tập vui vẻ.
Leave a comment:
-
cho leb to hay bé thì quan trọng gì anh, phần hiển thị thì tất nhien phải dùng nguồn ngoài, thông qua tran đệm là được, thời gian tắt dài thì không lo anh ạ.Nguyên văn bởi apple Xem bài viếtChà dzụ này... phải xem xét cho kỹ một chút nghe e Bích (mà chả biết có phải em là "em" thiệt hôg hay là a chàng nào đó kiếm cái nick dễ thương để anh em DTVN quan tâm chăm sóc ấy các bác nhẩy
)
Về lý thuyết em có quét cả trăm con led7seg cũng ko sao cả, nhưng thực tế phải xem xét đến kích thước của led7seg. Nếu em quét 12led loại 14.2 mm thì còn tạm chấp nhận được chứ loại lớn thì thật khó để đủ dòng và áp cho led ság rõ (ban ngày).Nếu làm đồng hồ treo tường thì phải chơi led loại lớn một chút thì đứng xa nhìn mới rõ, mới đã, cỡ 2inch .
Bởi vì rèeng ... khi số lượng led tăng lên đồng nghĩa với thời gian off của led sẽ tăng lên, mà như thế led sẽ bị giảm độ sag mất rồi.
Ta có thể dùng nhiều cách, xin ví dụ một chút:
-dùng IC chốt cho mỗi led (cách này hơi tốn đường điều khiển một chút)
-dùng các thanh ghi dịch loại serial in, parallel out (cách này tốn rất ít đường điều khiển, minimum chỉ khoảng 3 chân thôi, ta có thể dùng Attiny quét cũng vô tư).
Chúc cả nhà học tập vui vẻ.
1leb cho giay, 2 leb cho phut, 2lep cho giờ, 2leb cho ngay, 2lep cho tháng và 4leb cho năm vậy có 13 leb vẫn tốt các anh ạ
chỉ cái đồng hồ thôi mạch làm cồng kềnh như cái dây truyền công nghiệp ấy thì to quá
"em là Bích học ngành tự động hóa trường đại học Bách Khoa Hà Nội (cao đẳng)"
Leave a comment:
dự án của bạn Tra theo mã, xem datasheet và đặt hàng trực tuyến. MicrochipROHMEpsonTaejin
Đặt hàng & tư vấn
Hà Nội024.3640 8561
TP.HCM028.3811 9870
Quét mã hoặc bấm để chat Zalo với R&PChat Zalo
Quét mã hoặc bấm để chat Zalo với R&PChat Zalo
Bài viết mới nhất
Collapse
-
Trả lời cho Tìm bạn thân quen cũ.bởi thuaimiVẫn nhớ và kính trọng Bác cũng các cao nhân trên dientuvietnam.net. Tính từ ngày tham gia trên này cũng đã hơn 20 năm rồi. Quá nhiều thay đổi cả trong công việc và cuộc sống. Nhưng được thấy lại các nick cũ vẫn sáng đèn là thấy vui rồi....-
Channel: Tâm tình dân kỹ thuật
26-10-2026, 16:33 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi nhathung1101Còn sống không lão??? Mất một thời gian chữa bệnh nên quên hỏi thăm.......
-
Channel: Tâm tình dân kỹ thuật
25-10-2026, 03:09 -
-
Trả lời cho Công suất truyền qua lõi máy biến ápbởi nhathung1101Thời buổi năng lượng xanh, nhất là xanh cả mặt... Thì Điện mặt giời, điện gió, sẽ lên ngôi.
Nếu không nắm bắt được cái cơ bản đó thì đi làm coder à? Mà coder giờ thất nghiệp cả lũ vì AI rồi!!!









...
-
Channel: Điện tử công suất
25-10-2026, 03:03 -
-
Trả lời cho Công suất truyền qua lõi máy biến ápbởi quangdonguehChà, lâu lắm rồi nhưng diễn đàn vẫn còn những chủ đề cốt lõi của điện tử công suất...-
Channel: Điện tử công suất
24-10-2026, 07:53 -
-
bởi bqvietNếu muốn tăng công suất cần tăng con chip và tăng biến áp lên lớn hơn. Thiết kế ban đầu dùng TNY25x và biến áp EE16 hoặc EE13. Tăng con chip lên TNY268 vẫn mạch nguyên lý đó và biến áp lên EE19 sẽ nâng công suất ra thêm nhiều. Tăng tối đa...-
Channel: Điện tử công suất
24-10-2026, 02:14 -
-
bởi Nexus 6PMạch này chỉ chạy cho LED 10W trở xuống, còn muốn chạy Led công suất cao thì sao bác thớt ơi?-
Channel: Điện tử công suất
22-10-2026, 14:33 -
-
bởi Nexus 6PMạch này chỉ chạy cho LED 10W trở xuống, còn muốn chạy Led công suất cao thì sao bác thớt ơi?-
Channel: Điện tử công suất
22-10-2026, 10:49 -
-
Trả lời cho Tìm VR 5 chânbởi dinhthuong80Cảm ơn bác bqviet . Nhưng hình như các VR 5 chân của linhkienchatluong là loại có 2 chân là công tắc đóng mở. Thấy trên Shopee có chỗ bán linh kiện đàn Organ, mà không biết đúng loại không, với lại sao ... mắc dữ dội luôn ấy!!!
...-
Channel: Hướng dẫn tìm thông tin linh kiện
19-10-2026, 11:30 -
Leave a comment: