1-wire bus stm32

Started by tha, January 08, 2015, 09:16:36 AM

Previous topic - Next topic

tha

พอดีมี DS18S20+ อยู่ตัวหนึ่งและคุณ ae123 จะให้ DHT-11 มาอีกตัวหนึ่ง(จะซื้อแต่คุณ ae123 เขาให้มาศึกษาก็ขอขอบคุณมา ณ ที่นี้ แต่ของยังมาไม่ถึง) ก็เลยมาศึกษา 1-wire bus ดู
http://www.maximintegrated.com/en/app-notes/index.mvp/id/126
http://www.maximintegrated.com/en/app-notes/index.mvp/id/162 กำลังอ่านอันนี้อยู่
http://www.maximintegrated.com/en/app-notes/index.mvp/id/4377
และมีตัวอย่างที่ใช้กับ stm32f4discovery
http://mikrocontroller.bplaced.net/wordpress/?page_id=2506
เลยดาวน์โหลดโปรแกรมเขามาลองศึกษาดู เป็นโปรแกรมอ่านค่า rom code ตัวอุปกรณ์ 1-wire bus ดูแล้วคงจะอ่าน rom code อุปกรณ์ที่อยู่บน bus เพียงตัวเดียว ถ้ามีอุปกรณ์อยู่บนบัสหลายตัวคงต้องทำตามวิธีใน APP162 และได้ทำการทดลองกับ DS18S20+ ทำการดีบัก ไฟเขียวติด โชว์ค่า rom code ได้ตามรูป



(ผมต่อสาย power supply ของ DS18S20+ กลับกัน แต่คงไม่เป็นไรเพราะมาต่อใหม่แล้วทดลองกับ stm32f4 ก็ยังทำงานได้อยู่)
เลยลอง modify program มาใช้กับ stm32f103rb แต่กลับใช้งานไม่ได้ ดีบักแล้วโชว์ search FAIL ไม่รู้ผิดที่ตรงไหน ท่านใดเชี่ยวชาญ 1-wire bus ช่วยตรวจเช็คให้ด้วย
https://mega.co.nz/#!FNFkURhI!zX7Xsa9Bf6Nr6xbmVK0lce9fBQCnBOtCYBXZ7vQPyvE
ตัวอย่างที่โชว์ temp (ยังไม่ได้ศึกษา)
http://mikrocontroller.bplaced.net/wordpress/?page_id=2518


crywolf

แก้ที่ TIM2 ครับ

TIM2 ใช้ APB1 สูงสุดไม่เกิน Clock / 2

#define ONE_WIRE_PRESCALE   0
#define ONE_WIRE_PERIOD     35

tha

ลองแล้ว ไม่ได้ครับ clock เซตไว้ถูกแล้วครับ เพราะ TIM2,3, 4   If (APB1 prescaler =1) x1 else x2



มีอีก 2 ตัวอย่างที่น่าศึกษาครับ
http://stm32f4-discovery.com/2014/05/library-12-onewire-library-for-stm43f4xx/
http://stm32f4-discovery.com/2014/05/13-reading-temperature-with-dallas-ds18b20-on-stm32f429-discovery-board/


crywolf

เห็นอีกที่ เอา Pull-Up ออก

  //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

วงจรต่อ R Pull-up รึป่าวครับ


tha

ต่อ R pullup 4.7k ตามปกติครับ
  //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; ตรงนี้เอาออกครับเพราะ stm32f103 ไม่มีพารามิเตอร์ตัวนี้ สงสัยไม่รู้เป็นที่จุดนี้หรือเปล่า?

tha

มันแตกต่างกันตรงจุดนี้จริงๆด้วย จะมีผลหรือเปล่า?

stm32f103 จะเป็นอย่างนี้



ส่วน F4 เป็นอย่างนี้



tha

บิต DataLo กับ DataHi ก็ไม่ได้สลับกัน เซตถูกต้องแล้วใช่รึเปล่าครับ

F4 BSRR register



ที่ผมแก้มาใช้กับ F1



tha

 //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
ลองกับ stm32f4discovery เปลี่ยนเป็น NOPULL ก็ทำงานได้ครับ