ATtiny13上の別のソフトウェアUART





すべてのhabroyuzeryにこんにちは。 最近、同志HiはATtiny13で彼のUARTの記事または52pのMKからデータを出力する方法を公開しました。私はAttiny13からのかなり面白いプロジェクトHappy Christmas and Happy New Year wishesから切り取りました 。また、読み取りと送信の両方のソフトウェアUARTがあり、SPIに何か他のものがあります。一般的に、リソースは英語ですが、興味のあるすべての人に目を向けることをお勧めします。

これが仕事のビデオです:







同志Vinod.Sのコードから私にとって不必要なものをすべて切り離した結果 、次のようになりました。



ソースコード
#define F_CPU 9600000 #include <avr/io.h> #include <util/delay.h> #define SOFT_TX_PIN (1<<PB1) // PB1    TXD #define SOFT_TX_PORT PORTB #define SOFT_TX_DDR DDRB int helloHabr = 0; int main (void) { uart_tx_init (); //  . UART while (1) { helloHabr++; uart_print("Hello Habr, I'm ATtiny13 "); //  num_to_str(helloHabr, 4); // 0..9999 ..  4    uart_print(" counds"); uart_print("\r\n"); //     _delay_ms(1000); } return 0; } void uart_tx_init () { TCCR0A = 1 << WGM01; // compare mode TCCR0B = 1 << CS00; // prescaler 1 SOFT_TX_PORT |= SOFT_TX_PIN; SOFT_TX_DDR |= SOFT_TX_PIN; OCR0A = 75; //115200 baudrate at prescaler 1 } //     void num_to_str(unsigned int value, unsigned char nDigit) { switch (nDigit) { case 4: uart_send_byte((value / 1000) + '0'); case 3: uart_send_byte(((value / 100) % 10) + '0'); case 2: uart_send_byte(((value / 10) % 10) + '0'); case 1: uart_send_byte((value % 10) + '0'); } } void uart_print(char *str) { byte i = 0; while (str[i]) { uart_send_byte(str[i++]); } } //bitbanged UART transmit byte void uart_send_byte (unsigned char data) { unsigned char i; TCCR0B = 0; TCNT0 = 0; TIFR0 |= 1 << OCF0A; TCCR0B |= (1 << CS00); TIFR0 |= 1 << OCF0A; SOFT_TX_PORT &= ~SOFT_TX_PIN; while (!(TIFR0 & (1 << OCF0A))); TIFR0 |= 1 << OCF0A; for (i = 0; i < 8; i++) { if (data & 1) SOFT_TX_PORT |= SOFT_TX_PIN; else SOFT_TX_PORT &= ~SOFT_TX_PIN; data >>= 1; while (!(TIFR0 & (1 << OCF0A))); TIFR0 |= 1 << OCF0A; } SOFT_TX_PORT |= SOFT_TX_PIN; while (!(TIFR0 & (1 << OCF0A))); TIFR0 |= 1 << OCF0A; }
      
      







Arduino IDEは問題なく飲み込みました:







これはすべて470バイト、つまりATtiny13メモリの半分未満を必要としますが、マイクロコントローラーのリソースを巧みに使用すれば、多くのプログラムを作成できます。



ご覧のとおり、Hello Habr文字セット、I'm ATtiny 13はuart_print( "...")関数を使用して表示されます そして、変数の値は、例えば、変数が値と呼ばれると、コンテンツ行への出力は、関数num_to_str(値、4)を使用して実行されます。 4は桁数です。この場合、 0〜9999の値を表示できます。行はuart_print( "\ r \ n")です。 UARTに出力するときに行を終了し、キーボードのEnterボタンと同様に新しいものに切り替えます。 TXDとして機能するポートは、行#define SOFT_TX_PIN(1 << PB1)で指定されます。 ポートマップでは、次のようになります。







そして最後に-ATtiny13は、9.6 MHzの周波数に調整された内部RCチェーンからクロックされ、8分周器が無効になり、これはffビットlf 0x7Aによって設定されます。



UART速度115200ボー(eng。ボー)。



そして最後に、写真撮影:
画像



画像



写真が消えないように。



参照:



ATtiny13のUARTまたは52rのMKからのデータを表示する方法。



ATtiny13上の3チャンネルUART ADC;



Attiny13からのハッピークリスマスと新年あけましておめでとうございます



ATtiny13ファームウェアとArduinoを使用したプログラミング(更新);



すべての出版物



PSマイクロコントローラーが60度まで加熱されると、ゴミが出始めます。個人的に確認しましたが、これはATtiny13の価格を考えると簡単です。



All Articles