คำถามติดแท็ก microcontroller

อุปกรณ์ซึ่งรวมถึงหน่วยประมวลผลกลาง (CPU) หน่วยความจำและ (โดยทั่วไป) ชุดอุปกรณ์ต่อพ่วง I / O (UART, ADC, DAC, I / O วัตถุประสงค์ทั่วไป, I2C และอื่น ๆ ) ในสแตนด์อะโลน บรรจุภัณฑ์

2
เหตุใดเขตข้อมูลบิตที่เกี่ยวข้องแบบตรรกะในการลงทะเบียน MCU มักจะอยู่ในตำแหน่งที่ตั้งอื่น?
ยกโทษให้ฉันถ้าคำถามนี้ได้รับคำตอบแล้ว แต่ฉันไม่สามารถหาคำตอบได้ในหน้านี้หรือในอินเทอร์เน็ตที่กว้างขึ้น ฉันเป็นนักพัฒนาที่มีประสบการณ์และมีความรู้ที่ดีเกี่ยวกับการเขียนโปรแกรมระดับต่ำ แต่ค่อนข้างใหม่ในการพัฒนาแบบฝัง ฉันสอนการพัฒนาระบบสมองกลฝังตัวด้วยบอร์ด ST-NUCLEO144 ซึ่งมี STM32F746ZG MCU คำถามหนึ่งที่ดูเหมือนไม่ชัดเจนสำหรับฉันคือว่าทำไมฟิลด์บิตที่เกี่ยวข้องอย่างมีเหตุผลในรีจิสเตอร์อาจอยู่ในตำแหน่งที่ตั้งอื่น ตัวอย่างหนึ่งคือการUSART_CR1ลงทะเบียนใน STM32746ZG M0และM1บิตเขตร่วมกันควบคุมความยาวของคำใน USART TX / RX, รวมมูลค่า 2 บิต0b00ระบุ 8 บิต0b01ระบุ 9 บิต ฯลฯ นี่คือทั้งหมดที่ค่อนข้างตรงไปตรงมายกเว้นว่าM0ที่บิตที่ 12 และM1ที่บิต 28 ... ทำไมเป็นอย่างนี้? นี่คือเหตุผลการออกแบบที่สืบทอดมาเช่นมีการแทรกคุณลักษณะใหม่ลงในพื้นที่ที่สงวนไว้ก่อนหน้านี้หรือไม่ สำหรับเหตุผลที่เกี่ยวข้องกับการออกแบบชิปที่ฉันไม่ได้พิจารณาหรือมีจุดประสงค์ที่ยิ่งใหญ่กว่านี้สำหรับสิ่งที่ฉันไม่เห็นหรือไม่? เห็นได้ชัดว่านี่เป็นเรื่องเล็กน้อยที่จะเอาชนะด้วยการหลอกลวงเล็กน้อย แต่ฉันแค่อยากรู้

2
บางคนสามารถอธิบายอินเตอร์เฟส ADC ของไมโครคอนโทรลเลอร์ (สำหรับการอ่านแรงดันแผงโซลาร์เซลล์) ได้หรือไม่?
ฉันพยายามที่จะเข้าใจการทำงานของวงจรที่พบในTIDA-00121 (คุณสามารถดาวน์โหลดไฟล์ออกแบบได้จากที่นี่ ) ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับความจริงที่ว่า PV ไม่ได้ผูกติดอยู่กับพื้นโดยตรง (กระแสมอสเฟตย้อนกลับอาจถูกปิดเมื่อแรงดันแผงโซลาร์เซลล์ต่ำเกินไปเพื่อป้องกันกระแสย้อนกลับไหลเข้าแผง) สำหรับฟังก์ชั่นการถ่ายโอน (จากซอร์สโค้ด ) แรงดันไฟฟ้าที่ด้านไมโครคอนโทรลเลอร์เท่ากับ: V = 0.086045Pv-0.14718475V (PV คือแรงดันแผง) สิ่งนี้สกัดจากข้อเท็จจริงที่ว่า Vref = 2.39,10 บิต ADC และสมการของซอร์สโค้ด: แรงดันแผงควบคุม = 36.83 * PV - 63 เพื่อตรวจสอบสมมติฐานของฉันจากซอร์สโค้ด: แรงดันแบตเตอรี่ = BV * 52.44 ซึ่งให้แรงดันที่ด้านไมโครคอนโทรลเลอร์ของตัวแบ่งแรงดันแบตเตอรี่: V = 0.122BV ซึ่งเป็นอัตราส่วนแบ่งแรงดันไฟฟ้า (เครือข่าย 14K / 100K) คำถามคือ: บทบาทของเครือข่ายทรานซิสเตอร์ pnp คืออะไร? วิธีการคำนวณฟังก์ชั่นการถ่ายโอนของแรงดันไฟฟ้าที่ด้านไมโครคอนโทรลเลอร์? …

2
การพิมพ์อักขระตัวแปรไปยัง UART ไม่ทำงานค่าคงที่ทำงานได้ดี
ฉันมีปัญหาที่ค่อนข้างแปลกด้วย XC8 ในไมโครคอนโทรลเลอร์ PIC18F27K40 ใน PIC16F1778 มันใช้งานได้ ฉันได้กำหนด: void uart_putch(unsigned char byte) { while (!PIR3bits.TX1IF); TX1REG = byte; } เมื่อในของฉันmainห่วงผมเรียกuart_putch('a');นี้ทำงานได้ดี อย่างไรก็ตามเมื่อฉันกำหนดconst char c = 'a';และโทรuart_putch(c);มันไม่ทำงาน มันพิมพ์อะไรบางอย่าง แต่ไม่ได้a- ฉันคิดว่าพวกเขาเป็นตัวละครที่ฉันได้รับจาก0x00 hexdump -x /dev/ttyUSB0นี่ไม่ใช่ปัญหากับพอร์ตอนุกรมในคอมพิวเตอร์ของฉัน ฉันมองด้วยขอบเขตและสัญญาณแตกต่างกัน (ทำงานซ้ายใช่ไหม): รหัสง่าย ๆ : void main(void) { init(); // Sets up ports and UART control registers while (1) …

3
จริงๆแล้วคืออะไร: ไมโครคอนโทรลเลอร์ (uC), ระบบบนชิป (SoC) และตัวประมวลผลสัญญาณดิจิตอล (DSP)
คำถามที่แท้จริงคือในตอนท้าย แต่การอ่านเพียงอย่างเดียวอาจไม่แสดงให้คุณเห็นว่าทำไมฉันถึงสับสน ฉันเขียนโพสต์นี้เริ่มต้นด้วยคำนิยามสมมติฐานและการคาดเดาและถามคำถามจริง ฉันคิดเสมอว่าฉันรู้ถึงความแตกต่าง แต่เมื่อฉันได้รับคำถามเช่น: "ถ้าฉันใส่ตัวรับส่งสัญญาณด้วย uC ตอนนี้เป็น SoC หรือไม่" ฉันสับสนมากขึ้นและไม่รู้วิธีตอบ ผมจำได้เมื่อฉันได้บอกว่าUC เป็นหลัก SoC แต่ฉันมีหลักฐานอะไรบ้าง แต่ Arduino ไม่ได้อยู่บนชิปตัวเดียว! ฉันสามารถนำโปรเซสเซอร์ Atmeg ออกจาก "บอร์ด" ได้ตลอดเวลา! เมื่อฉันตรวจสอบออนไลน์ฉันจะได้รับคำตอบทุกรูปแบบที่ยืนยันหรือขัดแย้งกับสิ่งที่ฉันพูดไปทั้งทางตรงและทางอ้อม สิ่งนี้สร้างความสับสนให้กับฉันเสมอและฉันก็โทษคนอื่นที่ไม่ใช่นักการตลาดที่ใช้คำเหล่านี้อย่างหลวม ๆ และบางครั้งก็สลับกันได้ ดังนั้นฉันจึงตัดสินใจค้นหาความหมายพื้นฐานของคำสามคำนี้: uC, SoC และ DSP เพราะตัวอย่างเช่นเมื่อฉันสับสนเกี่ยวกับแรงดันไฟฟ้าในวงจรฉันมักจะกลับไปที่พื้นฐานทางฟิสิกส์พื้นดินไม่ได้เป็นศูนย์จริงๆมันเป็นเพียง "อ้างอิง" และแรงดันไฟฟ้าไม่ได้เป็น "สัมบูรณ์" พวกเขาเป็น "ญาติ" สิ่งนี้ชี้ให้ฉันไปในทิศทางที่ถูกต้องเสมอ แต่ไม่มีฐานที่จะไปเมื่อพูดถึง uC "micro" "controller" เป็นคอนโทรลเลอร์ที่เล็กจนอยู่ในระดับไมโครมิเตอร์ แต่เราไม่มีคำว่า nanocontroller ใช่ไหม? ดังนั้นวิธีคิดนี้จะไม่ช่วย สิ่งที่ฉันพยายามตอบคือ: uC …

2
ไมโครคอนโทรลเลอร์พลังงานจากตัวเก็บประจุซุปเปอร์
ฉันมี uC ที่ใช้กับ 1.8V ถึง 3.3V การบริโภคในปัจจุบันอยู่ที่ประมาณ 20uA ในโหมดสลีปและประมาณ 12 mA ในสถานะใช้งาน uC จะเข้าสู่สถานะแอคทีฟประมาณ 100 ms ทุกนาที ดังนั้นฉันจึงพยายามที่จะขับเคลื่อนสิ่งนี้จาก Vishay super cap: 15F ที่ 2.8 โวลต์พร้อม ESR ที่ 1.2O ที่ 1kHz คณิตศาสตร์บอกว่าฉันสามารถดึงประมาณ 4.10 mA จากฝานี้ก่อนที่แรงดันจะลดลงถึง 1.8 โวลต์ที่จุดนี้ไมโครจะปิดตัวลง ดังนั้น .. คำถาม: ฉันหายไปบางอย่าง? ฉันควรเพิ่มอิเล็กโทรไลต์เล็ก ๆ ระหว่าง super cap และ micro หรือไม่? ซีเนอร์ตัวเล็กเพื่อ จำกัด …

4
เป็นไปได้หรือไม่ที่จะให้ MCU ทำงานที่ -55 องศากับข้อกำหนดของสภาพแวดล้อมการทำงาน -40 ถึง 85 องศา?
ฉันได้ยินมาว่ามีคนพูดถึงวิธีการคัดกรอง: ให้มี 10 MCUs ทำงานที่ -55 องศาและหาคนที่สามารถทำงานได้อย่างถูกต้องโยนคนที่แตกหักออกไป วิธีนี้ใช้ได้หรือไม่? ฉันกังวลว่า MCU อาจทำงานได้อย่างเหมาะสมที่ -55 องศาในการทดสอบการคัดกรองของฉันและล้มเหลวในสภาพแวดล้อมการทำงานจริง หากไม่สามารถแก้ไขได้ เราใช้ stm32f4 เนื่องจากประสิทธิภาพของ DSP ที่ดีมาก MCUs ทำงานที่ -55 องศาเราพบว่าไม่มี DSP และสามารถทำงานที่ความถี่ต่ำประมาณ 20MHz

4
Microcontroller ปิดเนื่องจากการสูญเสียพลังงานในเวลาสั้น ๆ ตัวเก็บประจุสามารถแก้ไขได้หรือไม่?
ฉันมีไมโครคอนโทรลเลอร์เชื่อมต่อกับแหล่งจ่ายไฟ 5v ซึ่งต้องผ่านตัวปรับแรงดันไฟฟ้าที่ลดลงจาก 12v ฉันสมมติว่ามันกำลังรีบูทเพราะเป็นไปได้ว่าแรงดันไฟฟ้าจะลดลงอย่างรวดเร็วในเวลาไม่กี่นาทีซึ่งเพียงพอที่จะทำให้ชิปรีบูต สมมติฐานนี้ถูกต้องหรือไม่ สามารถเพิ่มตัวเก็บประจุในวงจรเพื่อแก้ปัญหานี้ได้หรือไม่?

2
สามารถใช้หน่วยความจำแฟลชโปรแกรมไมโครคอนโทรลเลอร์สำหรับจัดเก็บการกำหนดค่าผู้ใช้ได้หรือไม่
ไมโครคอนโทรลเลอร์หลายตัวเช่นPIC18Fมีหน่วยความจำโปรแกรมแฟลช: "หน่วยความจำโปรแกรมแฟลชสามารถอ่านและเขียนได้ในระหว่างการทำงานปกติ" นี่หมายความว่าฉันสามารถจัดเก็บการกำหนดค่าผู้ใช้บางอย่างไว้ในหน่วยความจำของโปรแกรม

4
ใช้เคสสำหรับ ADC ภายนอก
Microcontrollers (uC) ส่วนใหญ่มี Analog to Digital Converter (ADC) เป็นส่วนหนึ่งของชุดอุปกรณ์ต่อพ่วงของพวกเขาซึ่งเป็นปรากฎการณ์เพราะมันรวมสององค์ประกอบเข้าด้วยกันในแพ็คเกจเดียว ADCs เหล่านี้มักจะทำการแมปด้วยเช่นกันซึ่งทำให้สามารถดึงข้อมูลได้อย่างรวดเร็วและง่ายดาย แม้จะมีการรวมที่แน่นหนานี้คุณยังสามารถซื้อ ADC ภายนอกได้ ฉันเห็นหลายกรณีสำหรับสิ่งเหล่านี้: ADC ต้องแยกออกจาก uC ความลึกบิตของตัวอย่าง ADC จะต้องสูงกว่า ADC ของ uC แรงดันไฟฟ้าต่อความรู้สึกอยู่ไกลจากไมโครคอนโทรลเลอร์และสายอะนาล็อกยาวไม่เป็นที่ยอมรับ แรงดันไฟฟ้าต่อความรู้สึกอยู่ในสภาพแวดล้อมที่ไม่เอื้ออำนวยสำหรับยูซีซี ADC ภายนอกตัวอย่างเร็วกว่า ADC ของ uC มาก แรงดันไฟฟ้าอ้างอิงสำหรับบางตัวอย่างนั้นแตกต่างจากตัวอื่น ๆ ซึ่งต้องใช้ Vref หลายอัน (และทำให้ ADC ภายนอกหลายตัว) uC ปัจจุบันไม่มีช่อง ADC เพียงพอและค่าใช้จ่ายในการติดตั้ง uC ใหม่นั้นเป็นสิ่งต้องห้าม ADC ภายนอกใช้พลังงานน้อยกว่า ADC ของ …

6
ตำแหน่งของไมโครคอนโทรลเลอร์ 8 และ 16 บิตคืออะไร เหตุใดจึงไม่ได้รับ 32 บิต
จุดตัดยอดที่แท้จริงคืออะไรในแง่ของการแลกเปลี่ยนระหว่างต้นทุนและประสิทธิภาพสำหรับการเลือกไมโครคอนโทรลเลอร์ 32 บิต? กล่าวอีกนัยหนึ่งด้วยการเพิ่มขึ้นและการครอบงำของสถาปัตยกรรม ARM เหตุใดเราจึงยังใช้ไมโครคอนโทรลเลอร์ 8 บิตและ 16 บิต พวกเขายังถูกกว่าหรือไม่ ฉันเข้าใจว่าอุปกรณ์ต่ำสุดไม่จำเป็นต้องใช้ทรัพยากรที่เสนอโดยสถาปัตยกรรมที่ใหญ่และซับซ้อนกว่านี้ อย่างไรก็ตามอะไรคือแรงจูงใจที่แท้จริงที่จะยังคงใช้มันหากค่าใช้จ่ายดูเหมือนจะแปรเปลี่ยนไปสู่ระดับเดียวกัน

8
ลอจิกเกทสามารถใช้กับวงจรที่มีตัวควบคุมแบบไมโคร
ฉันสงสัยว่าตรรกะประตูจะใช้กับวงจรที่มีตัวควบคุมขนาดเล็กหรือไม่มีกรณีที่ต้องการตรรกะตรรกะประตูมากกว่าตัวควบคุมไมโครและสิ่งที่เป็นแกดเจ็ตบางส่วนที่ใช้ประตูตรรกะแบบอะนาล็อกใน อายุของไมโครโปรเซสเซอร์และตัวควบคุม

2
ขับสายสัญญาณเซอร์โว 4.8V โดยใช้ 3.3V
ฉันมีเซอร์โวที่มีแรงดันไฟฟ้า 4.8V ฉันต้องการขับเซอร์โวจาก MCU ที่ทำงานบน 3.3V ฉันยังไม่ได้ลอง แต่ก็สงสัยว่าถ้าฉันต้องขับสายสัญญาณไปที่ 4.8V โดยใช้ทรานซิสเตอร์ MOSFET หรือ NPN เป็นไปได้หรือไม่ที่จะขับเซอร์โว 4.8V ด้วยสัญญาณ 3.3V? ประสิทธิภาพจะได้รับผลกระทบหรือไม่ ถ้าฉันต้องขับด้วย 4.8V ฉันจะเชื่อมต่อได้อย่างไร? ประตูไปที่สัญญาณอย่างชัดเจน (ด้วยความต้านทานที่จำเป็น) แต่ฉันจะเชื่อมต่อสายสัญญาณของเซอร์โวได้อย่างไร ฉันควรเชื่อมต่อสายสัญญาณกับ 4.8V และสายดินกับท่อระบายน้ำหรือไม่? ฉันเดาว่านี่จะไม่ทำงาน เป็นไปได้ไหม

3
ซีพียูสำหรับโครงการโรงเรียนคอมพิวเตอร์ย้อนยุค
ฉันเป็นนักเรียนในโรงเรียนไอทีและเรากำลังพยายามนึกถึงโครงการที่เราสามารถใช้เพื่อแสดงให้นักเรียนชั้นปีที่ 1 ทราบว่าสิ่งต่าง ๆ ทำงานอย่างไรหลังเวทีและในที่สุดเราก็คิดว่าจะทำคอมพิวเตอร์ย้อนยุค ฉันได้อ่านหลายสิ่งเกี่ยวกับโปรเซสเซอร์ Z80 แล้ว แต่ฉันคิดว่าคงต้องมีอะไรที่ทรงพลังกว่านี้เรายังคงสงสัยเกี่ยวกับสถาปัตยกรรมแม้ว่า ARM อาจจะเป็นทางเลือกที่ดีเมื่อเราพบเอกสารจำนวนมากเรามี ยังสร้างความต้องการพิเศษบางอย่าง: บัสแอดเดรสภายนอกถ้าเราต้องการ RAM เพิ่ม > 50Mhz 16 หรือ 32 บิต ไม่มีแพ็คเกจ BGA / QFN ไม่มีบอร์ด FPGA อินเตอร์เฟสแบบอนุกรม (?) ไม่แพงเกินไปอย่างใดอย่างหนึ่งเนื่องจากเรามีงบประมาณ จำกัด P8X32A-D40 ดูเหมือนซีพียูที่ดี แต่ขาดจำนวน RAM ที่เราต้องการ (32k) ฉันคิดเกี่ยวกับบางสิ่งมากกว่า> 1MB บางที eZ80 นั้นคุ้มค่าที่จะพิจารณา เราต้องการคำตอบจากคนที่ถูกทดลองเหมือนคุณ ขอบคุณ. แก้ไข:แม้ว่าฉันจะได้รับคำตอบเมื่อมันตอบสนองความต้องการของเรา แต่คำถามยังคงเปิดรับข้อเสนอแนะอื่น ๆ เนื่องจากเราจะต้องหารือเกี่ยวกับทางเลือกกับทีมของนักเรียนที่เต็มใจเข้าร่วมโครงงาน

3
มอเตอร์กระแสตรงชนิดใดบ้างที่ล็อคตัวเอง?
ฉันมีมอเตอร์เกียร์ DC ขนาดเล็กซึ่งใช้เป็นแกนพลาสติก เมื่อฉันได้ใช้งานมอเตอร์เพื่อทำให้สายแน่นขึ้นฉันต้องการล็อคให้เข้าที่เพื่อไม่ให้สายหลุดออก ฉันต้องการให้อยู่ในตำแหน่งนี้โดยทางกลไกเพื่อที่ฉันจะได้ไม่ต้องใช้การถือกระแส เมื่อฉันพร้อมที่จะปล่อยสายแล้วฉันต้องการที่จะสามารถย้อนกระบวนการไฟฟ้าและปลดล็อค มีการออกแบบมาตรฐานที่ตรงกับความต้องการนี้หรือไม่?

3
เฟิร์มแวร์และวงจรของ ATtiny45 direct USB 2.0 Connection
ฉันต้องการสร้างอุปกรณ์ USBแบบแยกส่วนของตัวเองโดยใช้ ATtiny45ที่เพียงแค่ส่งข้อมูลไปยังพีซีผ่านทาง USB ฉันไม่ได้อ่านข้อมูลดังนั้นการเชื่อมต่อทางเดียว (ATtiny -> PC) ก็ไม่เป็นไร ฉันใช้Arduino Uno เป็น ISPพร้อมร่าง ArduinoISP มาตรฐานที่โหลดจากภายในซอฟต์แวร์ Arduino ฉันคิดว่าจะใช้ AVRDUDE เพื่อเขียนโปรแกรม ATtiny45 กับ Arduino เป็น ISP เพราะฉันต้องการที่จะใช้รหัส C ที่คอมไพล์กับ HEX เพราะมันเป็นขั้นสูงกว่า Arduino Programming Langue ความคิดพื้นฐานของฉันเกี่ยวกับวงจร: อย่างที่คุณเห็นฉันต้องการการเชื่อมต่อ USB "โดยตรง" จนถึงตอนนี้ฉันรู้ว่าฉันต้องใช้โซลูชันซอฟต์แวร์พื้นฐานสำหรับเรื่องนี้ ฉันจัดการSoftwareSerialเพื่อทำงานกับ ATtiny45 ของฉันแล้ว สำหรับสิ่งนี้ฉันได้ใช้ซอฟต์แวร์ Arduino เพื่อเขียนโปรแกรม ATtiny45 ด้วยรหัสต่อไปนี้: #include <SoftwareSerial.h> #define rxPin 3 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.