ธันวาคม 06, 2019, 09:10:37 pm *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: อยากสอบถามการใช้ DS3232 (RTC)  (อ่าน 6456 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
l3lackEagle
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 9


| |
« เมื่อ: กันยายน 11, 2013, 06:10:51 pm »

คือผมมี funtion ดึงเวลา กับวันออกมาได้แล้วตามข้างล่าง
แต่ผมต้องการที่จะแปลงข้อมูลให้เป็น วินาที ผมพยายามหลายวันแล้ว
ก็แปลงได้เพียงแค่จาก เวลา (HH:MM:SS) เป็น วินาที
แล้วก็ติดปัญหาเรื่องเวลามันนับเป็น AM PM ไม่ยอมนับเป็น 24 hr แก้ไม่ได้สักที
อยากรบกวนช่วยหน่อยครับ ปวดหัวมากเลย

นี้เป็นฟังชันที่แปลง เวลาเป็นวินาทีที่ผมทำครับ
Code:
unsigned char* DisplayTimeToLCD( unsigned char* pTimeArray)   // Displays time in HH:MM:SS AM/PM format
{
long inttemp;
int t1=0,t2=0,t3=0,t4=0,t5=0,t6=0;
xxx[0]=(pTimeArray[2]/10)+0x30;
xxx[1]=(pTimeArray[2]%10)+0x30;
xxx[2]=(pTimeArray[1]/10)+0x30; //1000
xxx[3]=(pTimeArray[1]%10)+0x30; //100
xxx[4]=(pTimeArray[0]/10)+0x30; //10
xxx[5]=(pTimeArray[0]%10)+0x30; //1

inttemp = atol(xxx);

t1= inttemp%10;
t2= ((inttemp/10)%10)*10;
t3= ((inttemp/100)%10)*60;
t4= ((inttemp/1000)%10)*600;
t5= ((inttemp/10000)%10)*3600;
t6= ((inttemp/100000)%10)*36000;

xxx[0]=segment[t6];
xxx[1]=segment[t5];
xxx[2]=segment[t4];
xxx[3]=segment[t3];
xxx[4]=segment[t2];
xxx[5]=segment[t1];

return xxx;
}


Code:
unsigned char* Get_DS1307_RTC_Time(void)
{
// Read Hours, Mins, Secs register from RTC
Read_Bytes_From_DS1307_RTC(0x00, pRTCArray, 3);

// Convert Secs back from BCD into number
Temp_Char = pRTCArray[0];
pRTCArray[0] = ((Temp_Char&0x7F)>>4)*10 + (Temp_Char&0x0F);

// Convert Mins back from BCD into number
Temp_Char = pRTCArray[1];
pRTCArray[1] = (Temp_Char>>4)*10 + (Temp_Char&0x0F);

// Convert Hours back from BCD into number
if(pRTCArray[2]&0x40) // if 12 hours mode
{
if(pRTCArray[2]&0x20) // if PM Time
pRTCArray[3] = PM_Time;
else // if AM time
pRTCArray[3] = AM_Time;

Temp_Char = pRTCArray[2];
pRTCArray[2] = ((Temp_Char&0x1F)>>4)*10 + (Temp_Char&0x0F);
}
else // if 24 hours mode
{
Temp_Char = pRTCArray[2];
pRTCArray[2] = (Temp_Char>>4)*10 + (Temp_Char&0x0F);
pRTCArray[3] = TwentyFourHoursMode;
}

return pRTCArray;
}

Code:
unsigned char* Get_DS1307_RTC_Date(void)
{
// Read Hours, Mins, Secs register from RTC
Read_Bytes_From_DS1307_RTC(0x03, pRTCArray, 4);

// Convert Date back from BCD into number
Temp_Char = pRTCArray[1];
pRTCArray[1] = (Temp_Char>>4)*10 + (Temp_Char&0x0F);

// Convert Month back from BCD into number
Temp_Char = pRTCArray[2];
pRTCArray[2] = (Temp_Char>>4)*10 + (Temp_Char&0x0F);

// Convert Year back from BCD into number
Temp_Char = pRTCArray[3];
pRTCArray[3] = (Temp_Char>>4)*10 + (Temp_Char&0x0F);

return pRTCArray;
}
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #1 เมื่อ: กันยายน 12, 2013, 04:49:16 pm »

ไม่ค่อยเข้าใจคำถาม
แต่มีคำถามว่า หากต้องการให้มันทำตัวเป็นโหมด 12 Hours และ 24 Hours คุณต้องเขียนข้อมูลไปยัง Address ไหน บิตที่เท่าไร่?
บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
l3lackEagle
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 9


| |
« ตอบ #2 เมื่อ: กันยายน 16, 2013, 11:54:29 am »

สามารถแก้ปัญหาได้ทั้งหมดแล้วครับ ขอบคุณมากครับ
แต่มีข้อสงสัยอย่างนึงครับ เราสามารถหยุดเวลาการเดินของ RTC ได้รึป่าวครับ
แล้วเขียนเข้าไปยังตำแหน่งไหน เพราะที่ลองๆอ่านดูใน data sheet และลองเขียนลงไปไม่ยอมหยุดสักที
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #3 เมื่อ: กันยายน 17, 2013, 10:09:06 am »

อ้างถึง
เราสามารถหยุดเวลาการเดินของ RTC ได้รึป่าวครับ
ได้ครับ
อ้างถึง
แล้วเขียนเข้าไปยังตำแหน่งไหน เพราะที่ลองๆอ่านดูใน data sheet และลองเขียนลงไปไม่ยอมหยุดสักที
datasheet ระบุไว้ชัดเจนครับ ว่าต้องเขียนอะไรไปที่บิตไหน ถ้าทำตามแล้วจริง แต่ยังไม่ยอมหยุดให้ตีความว่าเสีย (ไม่อุปกรณ์ ก็คน)
บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
l3lackEagle
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 9


| |
« ตอบ #4 เมื่อ: กันยายน 17, 2013, 04:15:51 pm »

น่าจะเป็นที่คนแล้วอะครับ เลยแก้ปัญหาแบบอ้อมๆไปแล้วครับ cheesy

ไม่ทราบพี่พอสะดวกแนะนำโค้ดให้หน่อยได้ไมครับ ผมน่าจะเขียนผิด แต่แก้ไม่ได้สักที
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #5 เมื่อ: กันยายน 17, 2013, 04:24:58 pm »

ช่วยโพส code ส่วนที่คุณพยายามจะสั่งให้มันหยุด ให้ดูก่อนครับ พร้อมระบให้ด้วยว่าคุณพยายามจะทำอะไร กับบิตไหน แล้วผมหรือคนอื่นๆ จะได้ช่วยแนะนำเพิ่มเติมได้ ว่าอะไรผิดอะไรถูก
บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
l3lackEagle
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 9


| |
« ตอบ #6 เมื่อ: ตุลาคม 09, 2013, 10:48:04 pm »

ต้องขอโทษด้วยครับที่ตอบ ตอนนี้สามารถทำๆได้แล้วครับ ขอบคุณมากครับผม
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #7 เมื่อ: ตุลาคม 10, 2013, 12:08:47 pm »

ยินดีด้วยครับ  smiley
บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
anime786
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 1


| |
« ตอบ #8 เมื่อ: ตุลาคม 04, 2019, 04:36:06 pm »

ตามด้วยครับ
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: