สารบัญ:
- ขั้นตอนที่ 1: ข้อมูลเชิงลึก
- ขั้นตอนที่ 2: การเริ่มต้นพอร์ต
- ขั้นตอนที่ 3: พลังงานต่ำเป็นพิเศษ
- ขั้นตอนที่ 4: TIMER
- ขั้นตอนที่ 5: โหมดพลังงานต่ำ
- ขั้นตอนที่ 6: ISR-Timer
- ขั้นตอนที่ 7: ฮาร์ดแวร์ขัดจังหวะ
- ขั้นตอนที่ 8: ISR- รีเซ็ต/ กดปุ่ม
- ขั้นตอนที่ 9: รหัส
- ขั้นตอนที่ 10: รหัสอ้างอิง
วีดีโอ: ตัวนับ MSP430 วินาที: 10 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
ยินดีต้อนรับ! การสร้างตัวนับวินาที: การใช้ CCStudio 8 และ MSP430F5529 สำหรับโครงการ
ภาษา C เพื่อเข้ารหัสไมโครคอนโทรลเลอร์ การใช้โหมดพลังงานต่ำ ตัวจับเวลา และอินเตอร์รัปต์ เอาต์พุตจะแสดงผ่าน 7 Segment
ขั้นตอนที่ 1: ข้อมูลเชิงลึก
เอาล่ะ!
เริ่มต้นตัวจับเวลาจ้องจับผิดเป็นสถานะ OFF โดยใช้รหัสผ่านที่จำเป็นสำหรับตัวจับเวลาจ้องจับผิด (ช่วยในการตรวจสอบการวนซ้ำที่ไม่สิ้นสุด ทำให้โปรเซสเซอร์ปลอดภัย)
#รวม
/** * main.c */
int หลัก (เป็นโมฆะ)
{
WDTCTL = WDTPW | WDTHOLD; // หยุดนาฬิกาจับเวลา
กลับ 0;
}
ขั้นตอนที่ 2: การเริ่มต้นพอร์ต
{
P3DIR=0xFF; // P3DIR=0x00;
P6DIR=0xFF;
P4DIR |=0x00;
P4REN |=0xFF;
P4OUT |=0xFF;
}
P3DIR |=0x00 บอกเราว่า PORT-3 ทั้งหมดถูกเตรียมใช้งานเพื่อรับอินพุต
P3DIR |=0xFF บอกเราว่า PORT-3 ทั้งหมดถูกเตรียมใช้งานเพื่อให้เอาต์พุต
P3DIR |=0x01 เฉพาะพิน P3.0 เท่านั้นที่เริ่มต้นเพื่อส่งออกใน PORT-3 สิ่งนี้เป็นไปตามการแมปพอร์ตเลขฐานสิบหก
P4REN |=0xFF แสดงว่าพินของ PORT-4 เปิดใช้งานตัวต้านทานแบบดึงขึ้น/ลง
ในการเลือกระหว่าง Pull UP หรือ Pull DOWN จะใช้คำสั่ง P$OUT |=0xFF
หากใช้ 0xFF จะกำหนดค่าเป็นตัวต้านทานแบบดึงขึ้น และหาก 0x00 จะถูกกำหนดค่าเป็นแบบดึงลง
ขั้นตอนที่ 3: พลังงานต่ำเป็นพิเศษ
MSP430F5529 ช่วยให้เราลดการสูญเสียพลังงานจากโปรเซสเซอร์ สิ่งนี้มีประโยชน์ในแอปพลิเคชันแบบสแตนด์อโลน
สิ่งนี้เรียกร้องให้มีการประกาศพินหรือพอร์ตทั้งหมดเพื่อส่งออก
{
P7DIR |= 0xFF;
P6DIR |= 0xFF;
P5DIR |= 0xFF;
P4DIR |= 0xFF;
P3DIR |= 0xFF;
P2DIR |= 0xFF;
P1DIR |= 0xFF;
}
ขั้นตอนที่ 4: TIMER
การใช้ตัวจับเวลาสำหรับการสร้างการหน่วงเวลาหนึ่งวินาที สิ่งนี้ใช้ SMCLK ที่ 1MHz และตัวจับเวลาจะทำงานในโหมดพลังงานต่ำ (ในขั้นตอนต่อไป หลังจากนับถูกขัดจังหวะจาก LPM) กระบวนการนี้ช่วยประหยัดพลังงานและภาระของโปรเซสเซอร์
TA0CCTL0=CCIE;
TA0CCR0=999;
TA0CTL = TASSEL_2 + MC_1;
ค่าคือ 999 เนื่องจากต้องใช้เวลาอีกหนึ่งครั้งเพื่อย้อนกลับเป็นศูนย์ในการลงทะเบียนตัวจับเวลา
ขั้นตอนที่ 5: โหมดพลังงานต่ำ
_BIS_SR(LPM0_bits+GIE);
สิ่งนี้จะเปิดใช้งาน General interrupt Enable (GIE) และทำให้ CPU เป็น LPM0 โดยที่ MCLK ที่รองรับ cpu ปิดอยู่ และ SMCLK และ ACLK จะทำงานเพื่อให้ตัวจับเวลาทำงานต่อไป ดังนั้นเราจึงสามารถเห็นได้ว่า CPU ถูกปิด โดยการประหยัดพลังงาน
ขั้นตอนที่ 6: ISR-Timer
#pragma vector=TIMER0_A0_VECTOR
_interrupt โมฆะ Timer_A (โมฆะ)
{
z++;
ถ้า(z>ล่าช้า)
{
P3OUT=รหัส[x];
P6OUT=code1[y];
x++;
ถ้า(x==10)
{
x=0;
ย++;
}
ถ้า(y==6)
y=0;
z=0;
}
}
เวกเตอร์ Pragma ใช้สำหรับการแสดง ISR ใน C embd
code[x] และ code1[y] คืออาร์เรย์ที่มีค่าเอาต์พุตสำหรับสองเซ็กเมนต์เจ็ดส่วน สำหรับการแสดงตัวนับ 60 วินาที
ขั้นตอนที่ 7: ฮาร์ดแวร์ขัดจังหวะ
P2DIR=0x00;
P2REN=0x02;
P2OUT=0x02;
P2IE |=BIT1;
P2IES |=BIT1;
P2IFG &= ~BIT1;
ที่นี่ P2.1 ถูกประกาศเป็นการขัดจังหวะของฮาร์ดแวร์ หากกดปุ่ม ตัวนับจะรีเซ็ตเป็นค่า
โปรแกรมที่เหลือเขียนอยู่ใน ISR ของการขัดจังหวะนี้
ขั้นตอนที่ 8: ISR- รีเซ็ต/ กดปุ่ม
#pragma vector=PORT2_VECTOR
_interrupt โมฆะ port_2(โมฆะ)
{
P2IFG &=~BIT1;
x=0; y=0;
P3OUT=รหัส[x];
P6OUT=code1[y];
วี++;
สำหรับ(i=0;i
{
P1OUT |= BIT0; //P1.0 = สลับ
_delay_cycles(1048576);
P1OUT &=~BIT0; // P1.0 = สลับ
_delay_cycles(1048576);
}
ISR นี้จะรีเซ็ตตัวนับ และนับจำนวนครั้งที่กดที่เหลือ
(นี่คือการแสดงผลโดยใช้การสลับแบบ LED นอกจากนี้ยังสามารถใช้อาร์เรย์และตัวจับเวลาอื่นเพื่อแสดงค่าเหล่านั้นเป็นเอาต์พุตใน 7 เซ็กเมนต์)
ขั้นตอนที่ 9: รหัส
#รวม
#define ดีเลย์ 1000
รหัสถ่าน={0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};
รหัสถ่าน1={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};
int ที่ไม่ได้ลงนามที่ระเหยได้ x=0, y=0, z=0;
int ที่ไม่ได้ลงนามผันผวน v=0, i=0;
เป็นโมฆะหลัก ()
{
WDTCTL = WDTPW | WDTHOLD; // หยุดนาฬิกาจับเวลา
P7DIR |= 0xFF;
P7OUT |= 0x00;
P8DIR |= 0xFF;
P8OUT |= 0x00;
P4DIR |= 0xFF;
P4OUT |= 0x00;
P5DIR |= 0xFF;
P5OUT |= 0x00;
P1DIR=0xFF;
P3DIR=0xFF;
P6DIR=0xFF;
P2DIR=0x00;
P2REN=0x02;
P2OUT=0x02;
P2IE |=BIT1;
P2IES |=BIT1;
P2IFG &= ~BIT1;
TA0CCTL0=CCIE;
TA0CCR0=999;
TA0CTL = TASSEL_2 + MC_1;
_BIS_SR(LPM0_bits+GIE);
}
// ตัวจับเวลา A0 ขัดจังหวะบริการประจำ
#pragma vector=TIMER0_A0_VECTOR
_interrupt โมฆะ Timer_A (โมฆะ)
{
z++;
ถ้า(z>ล่าช้า)
{
P3OUT=รหัส[x];
P6OUT=code1[y];
x++;
ถ้า(x==10)
{
x=0;
ย++;
}
ถ้า(y==6)
y=0;
z=0;
}
}
// ฮาร์ดแวร์ขัดจังหวะบริการรูทีน
#pragma vector=PORT2_VECTOR
_interrupt โมฆะ port_2(โมฆะ)
{
P2IFG &=~BIT1;
x=0;
y=0;
P3OUT=รหัส[x];
P6OUT=code1[y];
วี++;
สำหรับ(i=0;i
{ P1OUT |= BIT0; // P1.0 = สลับ
_delay_cycles(1048576);
P1OUT &=~BIT0; // P1.0 = สลับ
_delay_cycles(1048576);
}
}
ขั้นตอนที่ 10: รหัสอ้างอิง
GitHub Repository
แนะนำ:
ตัวนับ Arduino โดยใช้จอแสดงผล LED TM1637 และเซ็นเซอร์หลีกเลี่ยงอุปสรรค: 7 ขั้นตอน
ตัวนับ Arduino โดยใช้จอแสดงผล LED TM1637 และเซ็นเซอร์หลีกเลี่ยงสิ่งกีดขวาง: ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีสร้างตัวนับตัวเลขอย่างง่ายโดยใช้จอแสดงผล LED TM1637 และเซ็นเซอร์หลีกเลี่ยงสิ่งกีดขวางและ Visuino ดูวิดีโอ
สร้างวิดเจ็ตของคุณเองได้อย่างง่ายดาย - ตัวนับ BPM ที่รวดเร็ว: 6 ขั้นตอน
สร้างวิดเจ็ตของคุณเองอย่างง่ายดาย - ตัวนับ BPM ที่รวดเร็ว: เว็บแอปเป็นสถานที่ทั่วไป แต่เว็บแอปที่ไม่ต้องการการเข้าถึงอินเทอร์เน็ตนั้นไม่ใช่ ในบทความนี้ ฉันจะแสดงให้คุณเห็นว่าฉันสร้าง BPM Counter ในหน้า HTML ง่ายๆ ควบคู่ไปกับ vanilla javascript ได้อย่างไร ( ดูที่นี่) หากดาวน์โหลด วิดเจ็ตนี้สามารถใช้ออฟไลน์ได้
วิธีทำ DIY Arduino ตั้งเวลาซัก 30 วินาที, หยุดการแพร่กระจายของ COVID: 8 ขั้นตอน
วิธีทำ DIY Arduino ตั้งเวลาซัก 30 วินาที หยุดการแพร่กระจายของ COVID: สวัสดี
การตั้งค่า DS3231 RTC (นาฬิกาเรียลไทม์) อย่างแม่นยำ รวดเร็ว และอัตโนมัติโดยใช้ Java (+-1 วินาที): 3 ขั้นตอน
การตั้งค่า DS3231 RTC (นาฬิกาตามเวลาจริง) อย่างแม่นยำ รวดเร็วและอัตโนมัติโดยใช้ Java (+-1s): คำแนะนำนี้จะแสดงวิธีตั้งเวลาบนนาฬิกาเรียลไทม์ DS3231 โดยใช้ Arduino และแอปพลิเคชัน Java ขนาดเล็กที่ใช้ การเชื่อมต่อแบบอนุกรมของ Arduino ตรรกะพื้นฐานของโปรแกรมนี้:1. Arduino ส่งคำขอซีเรียล
ตัวนับ E-Ink YouTube ในปี 1970: 7 ขั้นตอน (พร้อมรูปภาพ)
ตัวนับ E-Ink YouTube ในยุค 70: นาฬิกาดิจิทัลที่โดดเด่นในยุค 1970 นี้มีชีวิตใหม่ในการแสดงสถิติของ YouTube ต้องขอบคุณ Pimoroni "Inky pHAT" จอแสดงผล e-ink และ Raspberry Pi Zero มันใช้สคริปต์ Python อย่างง่ายเพื่อสืบค้น Youtube API เป็นประจำ อ้างอิง