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

GPIO เป็นคำย่อสำหรับอินพุต / เอาต์พุตวัตถุประสงค์ทั่วไป โดยทั่วไปคำนี้จะใช้กับพินบนไมโครคอนโทรลเลอร์ (หรืออุปกรณ์อื่น ๆ ) ที่อาจเปลี่ยนแปลงได้ระหว่างอินพุตและเอาต์พุตภายใต้การควบคุมของซอฟต์แวร์ สามารถใช้เพื่อวัตถุประสงค์ที่กำหนดไว้ของแอปพลิเคชันซึ่งต่างจากการถูก จำกัด ไว้ที่ฟังก์ชันที่กำหนดเพียงฟังก์ชันเดียว

3
ดันดึง / เปิดท่อระบายน้ำ; ดึงขึ้น / เลื่อนลง
ฉันกำลังอ่านแผ่นข้อมูลของชิป ARM Cortex โดยเฉพาะบท GPIO ในที่สุดฉันต้องการกำหนดค่าหมุด GPIO ต่างๆเพื่อใช้ในโหมด "ฟังก์ชันสำรอง" สำหรับการอ่าน / เขียนการเข้าถึง SRAM จากการลงทะเบียน GPIO ทั้งหมดที่มีอยู่ฉันไม่เข้าใจสิ่งที่สอง: GPIO_PUPDRและGPIO_OTYPEซึ่งตามลำดับคือ "pull-up / pull-down register" และ "register type output" สำหรับGPIO_PUPDRฉันมีสามทางเลือก: ไม่มีการดึงขึ้นหรือดึงลง ดึงขึ้น ดึงลงมา สำหรับGPIO_0TYPEฉันมีสองทางเลือก: เอาท์พุทดึง เอาท์พุทเปิดท่อระบายน้ำ ความแตกต่างระหว่างการกำหนดค่าที่แตกต่างกันทั้งหมดและสิ่งใดจะเหมาะสมที่สุดสำหรับการสื่อสาร SRAM เอกสารสำหรับคณะกรรมการที่ฉันทำงานอยู่สามารถดูได้ที่นี่ (ดูหน้า 24 สำหรับแผนงาน SRAM) คู่มืออ้างอิงสำหรับชิป ARM มีอยู่ที่นี่ (ดูหน้า 145 และ 146 สำหรับการลงทะเบียน GPIO)

2
STM32 การทำความเข้าใจการตั้งค่า GPIO
ในไลบรารีอุปกรณ์ต่อพ่วง STM32 มาตรฐานเราจำเป็นต้องกำหนดค่า GPIO แต่มีฟังก์ชั่น 3 ตัวที่ฉันไม่แน่ใจว่าจะกำหนดค่าได้อย่างไร GPIO_InitStructure.GPIO_Speed GPIO_InitStructure.GPIO_OType GPIO_InitStructure.GPIO_PuPd ในGPIO_Speedมีการตั้งค่า 4 แบบให้เลือก GPIO_Speed_2MHz /*!< Low speed */ GPIO_Speed_25MHz /*!< Medium speed */ GPIO_Speed_50MHz /*!< Fast speed */ GPIO_Speed_100MHz ฉันจะรู้ได้อย่างไรว่าฉันจะเลือกความเร็วไหน มีข้อดีหรือข้อเสียในการใช้ความเร็วสูงหรือความเร็วต่ำหรือไม่? (เช่น: การใช้พลังงาน?) ในGPIO_OTypeมีการตั้งค่า 2 แบบให้เลือก GPIO_OType_PP // Push pull GPIO_OType_OD // Open drain จะรู้ได้อย่างไรว่าควรเลือกแบบไหน? และท่อระบายน้ำแบบเปิดและดันแบบดึงคืออะไร? ในGPIO_PuPdมีการตั้งค่า 3 แบบให้เลือก GPIO_PuPd_NOPULL …

6
โปรโตคอลการ จำกัด / การซิงโครไนซ์เทคนิคแบบอนุกรม
เนื่องจากการสื่อสารแบบซีเรียลแบบอะซิงโครนัสแพร่กระจายอย่างกว้างขวางในอุปกรณ์อิเล็กทรอนิกส์ทุกวันนี้ฉันเชื่อว่าพวกเราหลายคนได้พบคำถามเช่นนี้เป็นครั้งคราว พิจารณาอุปกรณ์อิเล็กทรอนิกส์Dและคอมพิวเตอร์PCที่เชื่อมต่อกับสายอนุกรม (RS-232 หรือคล้ายกัน) และจำเป็นต้องมีการแลกเปลี่ยนข้อมูลอย่างต่อเนื่อง Ie PCกำลังส่งเฟรมคำสั่งแต่ละเฟรมX msและDกำลังตอบกลับด้วยรายงานสถานะ / เฟรม telemetry แต่ละรายการY ms(สามารถส่งรายงานเป็นการตอบสนองต่อคำขอหรือเป็นอิสระ - ไม่สำคัญเลยที่นี่) กรอบการสื่อสารสามารถมีข้อมูลไบนารีใด ๆ โดยพลการ สมมติว่าเฟรมการสื่อสารเป็นแพ็กเก็ตที่มีความยาวคงที่ ปัญหา: เนื่องจากโปรโตคอลมีความต่อเนื่องด้านการรับอาจหลุดการซิงโครไนซ์หรือเพียงแค่ "เข้าร่วม" ที่อยู่ตรงกลางของเฟรมที่ส่งต่อเนื่องดังนั้นมันจะไม่รู้ว่าจุดเริ่มต้นของเฟรม (SOF) นั้นอยู่ที่ไหน ข้อมูลมีความหมายที่แตกต่างกันไปตามตำแหน่งของ SOF ข้อมูลที่ได้รับจะเสียหายและอาจเกิดขึ้นตลอดไป ทางออกที่ต้องการ รูปแบบการลด / ประสานที่เชื่อถือได้ในการตรวจจับ SOF ด้วยเวลาการกู้คืนสั้น ๆ (เช่นไม่ควรใช้เวลามากกว่านั้นพูด 1 เฟรมเพื่อซิงโครไนซ์อีกครั้ง) เทคนิคที่มีอยู่ฉันรู้ (และใช้บางส่วน) ของ: 1) ส่วนหัว / การตรวจสอบ - SOF เป็นค่าไบต์ที่กำหนดไว้ล่วงหน้า ตรวจสอบผลรวมในตอนท้ายของเฟรม จุดเด่น:เรียบง่าย …
24 serial  communication  protocol  brushless-dc-motor  hall-effect  hdd  scr  flipflop  state-machines  pic  c  uart  gps  arduino  gsm  microcontroller  can  resonance  memory  microprocessor  verilog  modelsim  transistors  relay  voltage-regulator  switch-mode-power-supply  resistance  bluetooth  emc  fcc  microcontroller  atmel  flash  microcontroller  pic  c  stm32  interrupts  freertos  oscilloscope  arduino  esp8266  pcb-assembly  microcontroller  uart  level  arduino  transistors  amplifier  audio  transistors  diodes  spice  ltspice  schmitt-trigger  voltage  digital-logic  microprocessor  clock-speed  overclocking  filter  passive-networks  arduino  mosfet  control  12v  switching  temperature  light  luminous-flux  photometry  circuit-analysis  integrated-circuit  memory  pwm  simulation  behavioral-source  usb  serial  rs232  converter  diy  energia  diodes  7segmentdisplay  keypad  pcb-design  schematics  fuses  fuse-holders  radio  transmitter  power-supply  voltage  multimeter  tools  control  servo  avr  adc  uc3  identification  wire  port  not-gate  dc-motor  microcontroller  c  spi  voltage-regulator  microcontroller  sensor  c  i2c  conversion  microcontroller  low-battery  arduino  resistors  voltage-divider  lipo  pic  microchip  gpio  remappable-pins  peripheral-pin-select  soldering  flux  cleaning  sampling  filter  noise  computers  interference  power-supply  switch-mode-power-supply  efficiency  lm78xx 

1
การรับสัญญาณเอาต์พุตดิจิตอลจำนวนมาก (~ 100) จาก Arduino
ฉันต้องการที่จะสามารถควบคุมประมาณ 100 ไฟ LED ที่เป็นอิสระโดยใช้ Arduino ปัญหาคือว่า Arduino ไม่มีพินที่เกือบพอที่สามารถกำหนดค่าสำหรับสิ่งนี้ อะไรจะเป็นวิธีในการแก้ปัญหานี้? มีชิปที่สามารถ demux สัญญาณที่ซับซ้อนกว่าจาก Arduino ที่สามารถควบคุมไฟ LED ได้หรือไม่? หรือมีวิธีแก้ไขปัญหาอื่น

5
การใช้งานตัวต้านทานแบบพูลดาวน์และพูลดาวน์บนหมุด MCU หรืออินพุตหรือเอาต์พุต
ตัวต้านทานแบบดึงขึ้น - ลง (ไม่ว่าภายในหรือภายนอก) จำเป็นสำหรับพิน MCU INPUT เท่านั้นหรือไม่ ในทางตรงกันข้ามขา MCU ที่กำหนดค่าเป็น OUTPUT "รู้ระดับที่" เพราะมันใช้ในการขับรถ - ขา "MCU" ขาออกของ MCU ที่ผูกติดกับอินพุตของวงจรอื่นไม่เข้าท่าเพราะสถานะของพิน MCU สูงหรือต่ำได้ฉันมีสิทธิ์นี้หรือไม่ ในตอนนี้เมื่อการบูทหรือล้มเหลวของ MCU มันอาจเป็นประโยชน์ที่จะมีการดึงขึ้น / ลงที่เชื่อมโยงกับสาย "เอาท์พุท MCU กับอินพุต IC" เพื่อให้แน่ใจว่าอินพุตไปยัง IC บางตัวไม่เคยลอย บางทีฉันอาจตอบคำถามของฉันเองที่นี่ ... ตัวต้านทานแบบดึงขึ้น - ลงสามารถใช้ได้ทั้งขาเข้าและขาออกขึ้นอยู่กับการใช้งาน

5
BJTs เหมาะสำหรับตัวเปลี่ยนระดับหรือไม่? ดูเหมือนว่า FET นั้นเป็นเรื่องธรรมดามากกว่าพวกเขาจะเปรียบเทียบได้อย่างไร
ฉันเป็นนักอดิเรกและไม่เคยผ่านเอกสารข้อมูล / บทแนะนำสำหรับทรานซิสเตอร์ FET; ฉันเป็นผู้ชาย BJT ฉันไม่เคยพบการสนทนาเกี่ยวกับ BJT กับ FET และแอปพลิเคชันเฉพาะที่เหมาะสมที่สุดสำหรับแต่ละประเภท โครงการของฉันเป็นวงจรสวิตชิ่งและวงจรแบบเกทที่ง่ายมาก ดังนั้นเมื่อฉันได้รับ BJT เพื่อตอบสนองความต้องการของโครงการฉันเพิ่งอยู่กับสิ่งที่ได้ผล ฉันใช้เวลาช่วงบ่ายค้นคว้าสิ่งนี้ทาง EE-SE และพบสิ่งดีๆมากมาย ฉันพบว่า FET ดูเหมือนจะเป็นตัวเลือกยอดนิยมสำหรับตัวเปลี่ยนระดับ ฉันหวังว่าใครบางคนสามารถให้คำอธิบาย "สำหรับหุ่น" เกี่ยวกับจุดแข็ง / จุดอ่อนและการแลกเปลี่ยนที่เกี่ยวข้องกับ FETs และ BJT ในการใช้งานทั่วไปบางอย่าง ฉันเลือกตัวเปลี่ยนระดับนี้สำหรับโครงการของฉัน: ฉันต้องการขับรีเลย์ 5V โดยใช้ ESP8266 ซึ่งมี GPIO 3.3V ฉันวัดกระแสคอยล์ของรีเลย์ว่าถูกต้องประมาณ 100mA ฉันต้องการใช้ S8050 และชิ้นส่วนขั้นต่ำความต้องการไม่สูง ฉันแค่ใช้ ESP8266 เพื่ออ่านพินบนเซ็นเซอร์ PIR และอ่านสวิตช์สลับบางตัวเพื่อควบคุมแสงโดยใช้รีเลย์ วงจรข้างต้นเป็นตัวเลือกที่ดีหรือไม่? ฉันออกแบบวงจรของตัวเอง …

3
ทำไมฉันต้องตั้งค่าและทิศทางของ GPIO ในโปรเซสเซอร์แบบฝังตัวก่อน
ฉันมีงานเต็มเวลาในฐานะวิศวกรเฟิร์มแวร์ ฉันเพิ่งได้รับมอบหมายให้ตรวจสอบการกำหนดค่า GPIO และเปลี่ยนการตั้งค่าตามต้องการ ฉันพบพินไม่กี่ตัวที่ได้รับการกำหนดค่าอย่างไม่ถูกต้องดังนั้นฉันจึงกำหนดค่าใหม่ตามธรรมชาติ แต่ฉันก็บอกว่าทำตามลำดับที่ผิด นี่คือสิ่งที่ฉันพูดถึง: ก่อน: GPIO1.direction = INPUT; หลัง: GPIO1.direction = OUTPUT; GPIO1.value = 0; อย่างไรก็ตามในระหว่างการตรวจสอบรหัสฉันได้รับแจ้งว่าฉันต้องเปลี่ยนลำดับของการเริ่มต้นเป็นต่อไปนี้: GPIO1.value = 0; GPIO1.direction = OUTPUT; กล่าวอีกนัยหนึ่งตั้งค่าก่อนแล้วกำหนดทิศทางของหมุด ฉันได้รับแจ้งด้วยว่านี่เป็นวิธีที่ต้องใช้กับโปรเซสเซอร์ที่ทันสมัยเนื่องจากใช้สองรีจิสเตอร์สำหรับอินพุตและหนึ่งสำหรับเอาต์พุตอย่างไรก็ตามโปรเซสเซอร์เก่าใช้เพียงรีจิสเตอร์เดียวดังนั้นลำดับของการดำเนินการจึงไม่สำคัญ (หมายเหตุ: ทันสมัย ​​= ARM Cortex M3 ขึ้นไป, เก่า = Intel 8051) ฉันขอคำอธิบายที่ดีกว่าในที่ทำงาน แต่ฉันไม่สามารถรับคำตอบที่ดีได้ นั่นเป็นเหตุผลที่ฉันตัดสินใจที่จะถามที่นี่ ดังนั้นนี่คือคำถามของฉัน: เหตุใดลำดับของการกำหนดค่าเริ่มต้นจึงสำคัญกับโปรเซสเซอร์ใหม่ ทำไมลำดับของการเริ่มต้นไม่สำคัญกับโปรเซสเซอร์รุ่นเก่า? พวกเขากำลังพูดถึงสองสิ่งในโปรเซสเซอร์ที่ทันสมัย? พวกเขากำลังพูดถึงอะไรกันบ้างเกี่ยวกับโปรเซสเซอร์รุ่นเก่า? หากใครบางคนสามารถจัดเรียงของไดอะแกรมมันจะดีกว่านี้
16 embedded  gpio 

4
วิธีการขับ LED 20mA จาก GPIO สูงสุด 4mA
ฉันมี IC ที่มี GPIO ซึ่งฉันต้องการขับ LED เนื่องจากอุปกรณ์จะใช้แบตเตอรี่จนหมดทำให้กำลังไฟเหลือน้อย (อาจเป็นศูนย์) ในขณะที่ไฟ LED ดับเป็นสำคัญ GPIO ใช้ 3.3V เมื่อเปิดใช้งานและปิดการลงคะแนน 0.0V นอกจากนี้ยังมีขีด จำกัด สูงสุด 4mA LED มีกระแสไปข้างหน้า 20mA และต้องการแรงดันไปข้างหน้า 2.0V เมื่อเปิดไฟ LED มันมักจะกระพริบ (ใช้ PWM) ในช่วงกิโลเฮิร์ตซ์ต่ำ หลังจากแหย่ไปมาผมเชื่อว่านี่อาจเป็นประเภทของวงจรที่ฉันต้องการ คำถามที่ 1: ฉันยังสนิทกับการติดตามที่ถูกต้องหรือไม่ คำถามที่ 2: องค์ประกอบที่ถูกต้องที่จะใช้สำหรับรายการ (5), (Transistor หรือ Mosfet) คืออะไรและฉันจะหาชิ้นส่วนได้อย่างไร (ที่ Frys ท้องถิ่น RadioShack ออนไลน์) และระบุ (ระบุ) …
16 led  transistors  gpio 

1
เปิด Drain เทียบกับ Open Collector
มีความแตกต่างในทางปฏิบัติระหว่างเอาต์พุตของ Open Drain และ Open Collector หรือเป็นคำที่ใช้แทนกันได้หรือไม่? หากพวกเขาแตกต่างกันอย่างแท้จริงบริบทใดที่แต่ละข้อได้เปรียบ ลางสังหรณ์ของฉันคือสิ่งที่พวกเขามีฟังก์ชั่นเทียบเท่า แต่ Open Drain ถูกนำมาใช้กับเทคโนโลยี FET ในขณะที่ Open Collector ใช้งานด้วยเทคโนโลยี BJT

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

2
โมดูล USB ไปยัง GPIO
ฉันกำลังทำงานในโครงการที่เกี่ยวข้องกับการให้ผู้ใช้กดปุ่มบนหน้าเว็บที่เซิร์ฟเวอร์ต้องการส่งไปยังไมโครคอนโทรลเลอร์ในรูปแบบของสัญญาณ GPIO พอร์ตเดียวที่มีในเซิร์ฟเวอร์คือ USB ฉันมีความคิดสองสามข้อ: เพียงใช้บอร์ด Arduino เป็นอินเตอร์เฟส USB to GPIO ใช้โมดูลที่สร้างขึ้นเพื่อวัตถุประสงค์เช่นhttp://numato.com/8-channel-usb-gpio-module (นี่เป็นโมดูลที่เปิดขึ้นมาในการค้นหาของ Google อย่างรวดเร็ว ใช้สิ่งที่เหมือนกับที่อธิบายไว้ในคำถามนี้ ขับ LED จาก USB ใครบ้างที่มีประสบการณ์ในด้านนี้สามารถให้คำแนะนำได้หรือไม่?
15 usb  gpio 

3
อินพุต 12 V บน 3.3 V GPIO, TVS ถูกดึงลงหรือ Schottky pull up?
ฉันกำลังสร้าง PLC ของตัวเองที่ต้องยอมรับอินพุตถาวรสูงถึง 30 V DC ใน STM32F พร้อมอินพุต 3.3 V อินพุตที่ถูกสับเปลี่ยนจะต้องทำงานกับ 8-30 V แต่ 90% ของเวลาแรงดันไฟฟ้าขาเข้าจะถูกกำหนดไว้ที่ 12 V หรือ 24 V. อินพุตจะเป็นสวิตช์เช่นลิมิตสวิตช์เท่านั้นดังนั้นฉันจึงไม่ใส่ใจเกี่ยวกับการตรวจจับ อินพุตน้อยกว่า 8 V หรืออินพุตจากเซ็นเซอร์ ฯลฯ ฉันไม่ต้องกังวลเกี่ยวกับความเร็วเนื่องจากสวิทช์ที่เคลื่อนที่เร็วที่สุดคือทุก 1 วินาที ฉันแค่ต้องแน่ใจว่าไมโครคอนโทรลเลอร์ของฉันได้รับการปกป้อง ฉันต้องการวงจรสากลที่ฉันสามารถใช้กับผลิตภัณฑ์ / โครงการประเภทเดียวกันหลายรายการดังนั้นการนับส่วนประกอบต้นทุนและพื้นที่ PCB ต้องเป็นอย่างน้อยที่สุดดังนั้นฉันจึงไม่ต้องการใช้ออปโตคัปเปลอร์จริงๆ วิศวกรอิเล็กทรอนิกส์สองคนได้แนะนำสิ่งต่อไปนี้ แต่ฉันก็ไม่แน่ใจเหมือนกันว่าวิธีใดดีที่สุด: ฉันควรใช้ตัวท็อปท็อปหรืออันล่าง? ทำไม?

1
เสียบ LDR เข้ากับ GPIO พินของ Raspberry Pi
ฉันต้องการเชื่อมต่อ LDR เข้ากับ GPIO พินของ Raspberry Pi ของฉันฉันรู้ว่า Raspberry Pi ไม่มีตัวแปลงแอนะล็อกเป็นดิจิทัลดังนั้นสิ่งที่ฉันต้องการทำคือส่งสัญญาณ HIGH (3.3v) บน GPIO เมื่อมีความต้านทานต่ำใน LDR (บางสิ่งบางอย่างต่ำกว่า 200 โอห์ม) และสัญญาณ LOW เมื่อความต้านทานของ LDR สูง (สูงกว่า 2k เป็นต้น) กระแสสูงสุดที่ฉันสามารถดึงได้อย่างปลอดภัยจาก GPIO ของ Raspberry Pi ตามเอกสารคือ 50mA ฉันจะคำนวณตัวต้านทานที่ต้องการได้อย่างไรฉันจะต้องเพิ่มตัวต้านทานแบบดึงขึ้น / ลงด้วยหรือไม่ ฉันไม่มีความคิดที่ชัดเจนเกี่ยวกับวิธีการทำอย่างปลอดภัยโดยไม่ต้องเผาโปรเซสเซอร์ของฉัน ฉันคิดว่าฉันต้องเสียบตัวต้านทานบนวงจรเพื่อให้แน่ใจว่ามันจะมีความต้านทานเสมอเมื่อ LDR อยู่ในสถานะต้านทานต่ำมาก อัปเดต : ใช้งานได้ดีฉันสร้างวงจรและแสดงในโพสต์นี้ขอบคุณสำหรับความช่วยเหลือ

4
การกดปุ่มควบคุมระยะไกลด้วย GPIO และทรานซิสเตอร์
ฉันพยายามควบคุมประตูโรงรถระยะไกลด้วยพิน GPIO จาก Raspberry Pi ของฉัน แทนที่จะขับรีเลย์มันจะง่ายกว่าการกดปุ่มกดสั้น ๆ บนรีโมท นี่เป็นวิธีที่ฉันควรทำหรือไม่? ฉันต้องการไดโอดป้องกันหรือไม่และถ้าเป็นเช่นนั้นจะไปที่ไหน? มันเป็นเรื่องสำคัญที่ pin GPIO 3.3V ถูกอ้างอิงไปยังดินที่แตกต่างกัน (กราวด์ Raspberry Pi) กว่ากราวด์ระยะไกลหรือไม่? จะขอบคุณคำแนะนำเกี่ยวกับทรานซิสเตอร์ที่จะใช้และค่าตัวต้านทาน UPDATE; ข้อมูลเพิ่มเติมจากความคิดเห็นโดย OP: หลังจากตรวจสอบคุณถูกต้องปุ่มกดเพียงแค่ลัดวงจรวงจรไปยังเส้นทางกลับของแบตเตอรี่ 9V ข้อกังวลหลักของฉันคือ 3.3V ที่อ้างอิงถึง GND ในขณะที่ทุกอย่างบนรีโมทนั้นลอย

3
ทำความเข้าใจกับ GPIO แอนะล็อกและดิจิตอล
ฉันพยายามที่จะเข้าใจ GPIO และได้อ่านบล็อกโพสต์ต่าง ๆ มากมายและฉันคิดว่าฉันใกล้จะเข้าใจแล้ว แต่ยังคงดิ้นรนกับบางสิ่ง ฉันเห็นการอ้างอิงถึง GPIO เพียงไม่สามารถทำงานกับค่าไบนารีได้ แต่โพสต์อื่น ๆ ที่บอกว่าค่าสามารถอยู่ในช่วง 0-255 ฉันถือว่านี่คือความแตกต่างระหว่างอนาล็อกและดิจิตอล GPIO ถูกต้องหรือไม่ เป็นไปได้ไหมที่ขา GPIO เดียวสามารถทำหน้าที่เป็นทั้งแบบอะนาล็อกและดิจิตอลได้
11 gpio 

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