C109 冬コミに申し込みました

電子工作の活動を始めてからブログを書くようになって、同人イベントでいろんな電子工作をやっている人の展示を見るようになって長らく経ちました。

私も何かしらの展示をしたいなーとずっと思っていましたが重い腰が上がらず過ごしていました。

今回C108を会社の中の良いメンバーと巡ることで今まで一人孤独に電子工作をしていた身から少しだけ前進したのでサークル参加に申し込もうという意思を持つことができました。

今回は軽く告知の記事のみにします。

サークルカットは下記の通り。

今まで記事にしてきた内容を製本する形で進めていきます。

当選したら頑張って本作りますのでよろしくお願いします。

 

 

バウンダリースキャンについて

メモとして残しておきます。

 

JTAGバウンダリースキャンはI/Oレジスタ、プログラムレジスタをスキャン(というか、レジスタの書き込み読み出し)をするものがほとんどです。

ですので、I/Oピンを一pinごと動かしたり、プログラムレジスタをセットして(プログラム動作中のあるステートに固定して)プログラムカウンタを一つずつ進めて動作状態のデバッグをICEと同じようにできます。(SoC設計時にそのように設計されていればですが。)

で、このバウンダリースキャンのポートは動作用の制御線とは別に用意されているので動作中にクロックを停止してI/Oの状態を読み取ることもできますよ。

IEEE1149.1 をみるか、過去だとデザインウエーブマガジンか、特電のサイトやっている人か、アンドールのHPからたどれるところが理解する元としてはいいかな?

 

 

PICマイコンのお勉強

Arduinoはとても楽でいい。

しかしそれでは勉強にならないことも多い。

ArduinoIDEから一歩飛び立ってみたい。

下記URLが面白かったのでメモしておきたく。

 

https://ameblo.jp/denshi-1996/entry-12728648424.html

 

以上。

Arduino同士のSPI通信について

参考になるURLを添付していきます。

 

Arduino同士のSPI通信について調べる #ISR - Qiita

mega328PB.pdf

 

 

ATmega328PのデータアドレスはSRAMEEPROMの2種類に分かれます。SRAMは2Kバイトで、アドレスは0x0000から0x07FFまで、EEPROMは1Kバイトで、アドレスは0x0000から0x03FFまでです。
 
SRAM (Static RAM)
  • 2Kバイト (2048バイト)
  • アドレス範囲: 0x0000 - 0x07FF
  • データ保持のために継続的に電力を必要とするメモリ
  • プログラム実行中に変数やデータ構造を格納するために使用される
     
EEPROM (Electrically Erasable Programmable Read-Only Memory)
  • 1Kバイト (1024バイト)
  • アドレス範囲: 0x0000 - 0x03FF
  • 電源を切ってもデータが保持される不揮発性メモリ
  • 設定値や校正データなど、プログラム実行中に変更される可能性のあるデータを保存するために使用される
     
その他

 

 

 

AI による概要
 
ArduinoでSPI通信を用いて値読み出しを行う場合、SPIライブラリを使用し、`transfer()関数でデータを送受信します。具体的には、スレーブデバイスのアドレスと読み出したいデータのアドレスをtransfer()`関数で送信し、その後、`transfer()`関数でデータを読み出します。
 
以下に具体的な手順とコード例を示します。
 
手順:
 
  1. SPIライブラリのインクルード:
     
   #include <SPI.h>
  1. スレーブデバイスの選択:
     
`SPI.transfer()`関数を呼び出す前に、スレーブデバイスの選択ピン(通常はCSピン)をLOWに設定します。
 
  1. データ送信:
`SPI.transfer()`関数に送信したいデータを引数として渡します。この関数は、送信したデータと同時に受信したデータを返します。
 
  1. データ受信:
`SPI.transfer()`関数を再度呼び出し、スレーブデバイスから受信したいデータを引数として渡します。この関数は、送信したデータと同時に受信したデータを返します。
 
  1. スレーブデバイスの非選択:
`SPI.transfer()`関数の呼び出しが完了したら、スレーブデバイスの選択ピンをHIGHに設定します。
 
コード例:
 
#include <SPI.h>const int chipSelectPin = 10; // スレーブデバイスのCSピンvoid setup() {  Serial.begin(115200);  SPI.begin();  pinMode(chipSelectPin, OUTPUT);  digitalWrite(chipSelectPin, HIGH); // 初期状態ではスレーブを非選択}void loop() {  // 例: スレーブデバイスから1バイト読み込む  byte data = readSPI(0x01); // 読み出すアドレスが0x01の場合  Serial.print("受信データ: ");  Serial.println(data, HEX);  delay(1000);}byte readSPI(byte address) {  byte receivedData;  digitalWrite(chipSelectPin, LOW); // スレーブを選択  SPI.transfer(address); // アドレスを送信  receivedData = SPI.transfer(0x00); // ダミーデータを送信してデータを受信  digitalWrite(chipSelectPin, HIGH); // スレーブを非選択  return receivedData;}
解説:
 
  • chipSelectPin: スレーブデバイスのCSピン番号を定義します。
  • SPI.begin(): SPI通信を開始します。
  • digitalWrite(chipSelectPin, HIGH): 初期状態ではスレーブデバイスを非選択状態にします。
  • readSPI(byte address): 指定されたアドレスから1バイトデータを読み込む関数です。
  • digitalWrite(chipSelectPin, LOW): スレーブデバイスを選択します。
  • SPI.transfer(address): 読み出すアドレスをスレーブデバイスに送信します。
  • SPI.transfer(0x00): ダミーデータを送信して、スレーブデバイスからの応答を受信します。
  • digitalWrite(chipSelectPin, HIGH): スレーブデバイスを非選択状態にします。
  • Serial.println(data, HEX): 受信データを16進数でシリアルモニタに出力します。
     
注意点:
 
  • スレーブデバイスによって、SPI通信の設定(クロック極性、クロック位相など)が異なる場合があります。Arduinoの`SPI.beginTransaction()`関数で設定する必要があります。
  • スレーブデバイスのデータシートを参照し、正しいアドレスやデータ形式で通信を行うようにしてください。
  • SPI通信は、クロック信号に合わせてデータが送受信される同期通信です。スレーブデバイスがクロック信号を生成しない場合は、Arduino側でクロック信号を生成する必要があります。
     
この情報が、ArduinoでのSPI値読み出しに役立つことを願っています。

 

 

 

検索ワード:ATmega328p 保存アドレス指定

AI による概要
ATmega328PのフラッシュメモリとEEPROMの保存アドレス指定について説明します。ATmega328Pには、プログラムを保存するフラッシュメモリと、データを保存するEEPROMが搭載されています。それぞれの保存アドレスの指定方法を解説します。
フラッシュメモリ:
ATmega328Pのフラッシュメモリは、32KB (32768バイト) の容量を持ちます。
アドレスは、0から32767 (0x0000から0x7FFF) までの範囲で指定します。
プログラムを書き込む際には、このアドレス範囲内で、プログラムの各命令やデータを配置します。
Arduino IDEでは、通常、ブートローダー領域を除いた部分にプログラムが書き込まれます。
ブートローダーは、Arduinoのシリアル通信などを利用して、フラッシュメモリにプログラムを書き込むためのコードです。
EEPROM:
ATmega328Pには、1KB (1024バイト) のEEPROMが搭載されています。
アドレスは、0から1023 (0x0000から0x03FF) までの範囲で指定します。
EEPROMは、電源を切ってもデータが保持されるため、設定値やログデータなどを保存するのに便利です。
Arduinoのライブラリでは、EEPROM.read()やEEPROM.write()などの関数を使って、EEPROMへのアクセスを簡潔に行うことができます。
アドレス指定の例:
フラッシュメモリの先頭アドレスに値を書き込む場合: 0x0000
フラッシュメモリの終端アドレスに値を書き込む場合: 0x7FFF
EEPROMの先頭アドレスに値を書き込む場合: 0x0000
EEPROMの終端アドレスに値を書き込む場合: 0x03FF
注意点:
フラッシュメモリは、書き込み回数に制限があります。(一般的に1万回から10万回程度)
EEPROMも書き込み回数に制限があります。(一般的に10万回程度)
アドレス指定を間違えると、プログラムの誤動作やデータの破損につながるため、注意が必要です。
Arduinoのライブラリを使用する場合は、ライブラリが提供する関数を使って、安全にアクセスすることが推奨されます。
ATmega328PのフラッシュメモリとEEPROMのアドレス指定は、それぞれのメモリの容量と、Arduinoのライブラリや開発環境によって異なります。正確なアドレスを指定することで、プログラムの正常な動作を確保できます。

 

3Dプリンタ(Ender3pro)のトラブル対処一覧

連続的に様々なトラブルがでてくるので印刷が一向に進まずイライラして進捗が出せないことが多々ある。現在進行形である。
エラーが起きてから色々と調べていくのに効率の悪さを感じるので対策をした内容を書き溜めていくことにした。
機器:Ender3pro
CAD:Fusion360
スライサー:Cura
データ転送:microSDカード
印刷設定(大体いつもの)

Curaの印刷設定


フィラメントが出てこない
大体はノズルの問題で出てこないことがほとんどである。
対策としては下記のようなものが考えられるが印刷温度を上げるのはやめるべき。
一時的に解決するが後の故障原因であるフィラメントを通すチューブが焦げ付いてもっとひどい故障を引き起こしてしまい分解が面倒になってしまう。
エクストルーダーが悪かったことは経験上一度もないのだが余計な調整を入れて壊しそうになったりするのでよくない。
・ノズルを交換する
・ノズルの清掃をする
・印刷温度を上げて無理やり出力させる
・エクストルーダーのかみ合わせを見直す

 

フィラメントが出ずエクストルーダーが滑る、フィラメントが引き抜けない
ノズルをいくら変えても、温度をいくら上げてもフィラメントが出てこない。
加えてエクストルーダーがから滑りを繰り返す。(余計なチューニングで破壊を招く)
フィラメントを引き抜こうとしても固着して出てこない。

詳細は記事の通りだが原因はフィラメントを通すチューブの先端が焦げ付いてしまっていることが原因のようで、Ender系ではよくある故障例らしい。
チューブを抜き取って焦げた部分を切り落とせば問題なく復帰する。
ヒーターとチューブがかなり近接しており高温で使用するとこの温度でチューブを焦がしてしまうようで構造的な問題のため230度以上で使用しない方がよさそう。

フィラメントが出ない!ノズル詰まりの対処法【Ender-3】│3Dプリンター IT CUBE


特定のデータの特定の位置で毎回フリーズする
このエラーで止まる場合、Ender3自体が固着して画面操作を一切受け付けなくなる。
おそらくgcodeのバグによる処理停止の不具合であると考えられる。
対処法としては下記のような方法が色々とあるみたいだが一番お手軽なのはスライサーの設定を変えるか、元のモデルをちょい変することでgcodeの生成データを変化させるのがいいと思われる。
また、毎回止まる部分を考えたとき曲線部が多い気がするのでgcode生成を考えたときデータを量子化するのに中途半端なデータとなるような図面を描かないように留意するとこの問題は起きづらくなると考えられる。
・SDカードを変える
・USB転送に変える
・Curaの設定を変える(サポート材の有り無し、モデル位置の変更、など)
・3Dデータを変える(影響の薄い形状の一部を変更する)

「Ender3v2」での印刷時、特定のデータの特定の位置で毎回フリーズ... - Yahoo!知恵袋
3Dプリンタがエラーコードも吐かずに途中で止まることがあり、ため... - Yahoo!知恵袋

 

印刷物が反り上がる
これは温度の不均一によって起こる現象であるがフィラメントやプレートにも影響される。
色々試しているがいまだに根本的な解決策が分からない。
直近で聞いた話では雰囲気温度を均一に保つためにシュラウドで囲ってしまった方がいいとのことだったので段ボールもしくはそれに類する材料で3DP全体を囲っている。
大きい造形物でどのくらい効果が出るか確認中。

追記_20260325



 

 

以上