發表文章

目前顯示的是有「arduino」標籤的文章

SD-10G and DSM 改!!

圖片
自從9XII的30個Model被我記滿了後,就在找新的搖控器.... SD-10G的外型不怎麼樣, 但是開放的功能卻是非常的多....原機雖然只有20個model, 但是有幾個方法可以解.... 1. SD-10G有TX跟RX的pins, 可以down load到PC, 也可以再load回去... DRMA大大的部落格有詳細記載 , 我有量過,那兩隻腳都是3.3V的...但是傳輸的protocol不明, 只知道是uart... 2. 用 memory card, 插在上面就擴到60組....及時讀取...也可以再用一片去做back up,這樣對我來說是最好的....SD card都不見得比這好 改天應該把內容讀出來, 看看有沒有辦法看得懂... 很多人常在latency上考慮很多事情, 但是latency是個整體面上的考量, 這一部分 Sanwa 的 FH3我覺得很有用心, RF 的packet rate已經很優了,他進一步在servo signal 的 update rate 上做改進... 一般2.4G不管在RF的改善如何, 最後到receiver對servo那裏的update rate都是20~23ms, FH3的接收機把這個部分縮到7.5ms....這部分就會讓"人"感覺到servo變快了...前提是analog servo沒有燒掉的話....數位的當然就沒問題了.... 細節的部分請參照 DRMA大大的 blog . 接下來要把DSM的module裝到SD-10G裏面.... 在 DSM2-心得2 裏, 我已經順利解決frame rate的問題, 目前訂在20ms,一切正常...有空再來縮到10ms看看....聽老外說也可以....不知道receiver那頭update rate會不會變..我相信可能可以改善, 不過應該有極限....因為receiver的MCU應該也是用timer interrupt去生成各channel的PWM...total cycle應該有限吧.... 我後來有把code改成一個LED燈, 正常時恆亮, 配對時閃爍, 沒有PPM時久久閃一下... 接下來就是拆!! SD-10G算是好拆的, 後面有4顆螺絲, 解開可以拆下背板, 上面把手附近有兩顆螺絲, 拆下可以拿起上蓋......

burining Arduino bootloader with FTDI

圖片
每次要燒錄bootloader時都要上網找一下才會想起當時是怎麼燒的.... 試了很多方式, 用得最順手的是這個 Kimio Kosaka寫的 FTDI BITBANG mode... 基礎都是 Avrdude , 這個程式要跟 avrdude.conf 還有這個 avrdude-GUI 都放在同一個資料夾下, 這樣比較不會找不到file 1.首先解開 serjtag-0.3 2. 把這個目錄下的\serjtag-0.3\ 的binary刪掉.... 3. 把上面copy下來的 avrdude.conf copy 到 \serjtag-0.3\avrdude-serjtag\binary 把原來的蓋掉... 這個down load下來的有修改 ftdi 232的燒錄參數,也有支援 328P 4. 把那個avrdude-GUI野放到這裡 \serjtag-0.3\avrdude-serjtag\binary 5.直接執行 avrdude-GUI 硬體上是利用FTDI的IO來做燒錄的控制,對應如下...168P miso PB4; # CTS X3(1) sck PB5; # DSR X3(2) mosi PB3; # DCD X3(3) reset PC6; # RI X3(4) CTS/DSR/DCD/RI是FTDI 232R的腳位... 最後那個1234就是Duemilanove上X3 connector上的腳位: Arduino上面的ICSP pin define是這樣... 如果是要燒DIP得那就這樣接就行了... 打開avrdude gui,照這樣設... Port那一格留白... 第一次燒錄的新chip說只能用 4800的baud rate. 但是燒過一次的就可以把 -B 4800拿掉... avrdude的command大小寫有不一樣的定義....一定要照著打... 接下來先讀fuse bits... Fuse的設定跟chip的momory/clock等都有關,168跟328就不一樣, 不同的設定也會不一樣....arduino: chip/ Hfuse/ L fuse/ e fuse/ lock bits 168P/ ...

DSM2 讀書心得 2

圖片
上次根據RC group上的討論做了一個給Futaba FF9用的DSM2 用的low power module後, 信心大增... 傳說DX4e裏的module是full range的, 弄了一個來看看....沒錯....18dbm..... 背面.... 產線上裝配時應該是先用雙面膠黏起來,再焊排針的....拆的時候, 我先用尺把泡棉雙面膠搞破, 再在排針面上一堆錫, 來回加熱 慢慢拔起....要小心... 這個module除了是full range外, 他還支援DSMX.....我沒有很清楚DSMX跟DSM2是改了哪些地方...但是這個模組是兩者共用的,應該是軟體的差異.... RC group上給 futaba 用的chematic是這樣接的...這個先生的code使用了arduino的 internal pull high, 所以沒有pull high D8... 這回要接的是SD-10G, SD10G的PPM 訊號型態跟futaba相同, 但是信號準位約在6~8V,要看當時的電池電壓.... 我第一次試著用10K可變電阻去分壓, 不知為何, 一接上去, 訊號元的準位就低到一個不行....放棄.... 改用這樣接, 將D8 pull high到3.3V(我還是用3.3V的8Mhz pro mini), 再接一個蕭基特二極體, 這樣當PPM low的時候就會把D8 拉到low了... 這樣也有個問題, 那個 Low的時候, 不會到0V,而且跟pull high的阻值有關...可能是跟SD-10G PPM signal的內部線路有關吧...我試過,那個電阻約4K, arduino就能讀到信號了....最後我是拿17.8K(因為手頭上只有這個),這時low的準位看起來比較好.... 接好後, 程式看來也沒問題, C2PO的程式有個debug的選項, 可以先在PC上用serial monitor用115200去看要傳的資料有沒有對.... 幾個小心得: 1.使用debug,請把原來的#define DE_BUG 改成 #define DEBUG 2. 他的程式有rising edage跟falling edage選項, ( 很奇怪 他把Sanwa歸類跟JR成falling edage, 可是我的情況是跟futaba一...

Timer of 168/328 and Arduino/ servo PPM

話說花了一個晚上去看, mega168其實提供3個timers, Timer0, Timer1, Timer2 Timer1是16bits, timer0跟timer2都是8bits.... Timer 是根據system clock(當然clock source 也是可以另外選的),再去用prescale做除頻的動作.... 可以config的function很多.... arduino本身在wiring.c裏的initial 對 timer0 作了規劃,用來做 millis()跟micro() 的基本....他選了64當prescale 16Mhz/64=250Khz, 也就是說Timer一格是0.000004 s=4us, 這就是為什麼micros()的精確度最多到4us 8bit的timer0,over flow 是:4us*256=1024us=1.024ms,millis()就是用這個去做計算, 但是它有做誤差的補償... arduino另外對 timer1 也做了 PWM 輸出的規劃....拿來做analog.write,不幸得很, 他也是用64當prescale,所以解析度也是4us 解析度4us,其實用來輸出servo PPM時最大誤差會到7-8us,這就會有飄來飄去的問題... 4us對RC servo來說, 勉強而已....一般servo的death band約就在4us.... 其實以16Mhz, 16 bits timer, prescale=1, 解析度:0.0625us , overflow period:4.096ms prescale=8, 解析度:0.5us , overflow period:32.768ms Prescale=16, 解析度:1us overfolw period:65.536ms prescale=32, 解析度:2us overflow period:131.072ms prescale 選8 很適合需要快速反應的servo application. mega168在 timer1上還有一個capture mode, 有 noise filter可以選(其實就是要4個訊號都一...