To transmit data via UART with the ATmega328P microcontroller in AVR C using the Arduino IDE, you can follow these steps:
- Include the necessary header files:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
- Define the UART settings:
#define BAUDRATE 9600
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
- Initialize UART by configuring the baud rate and other settings:
void uart_init() {
UBRR0H = (uint8_t)(BAUD_PRESCALLER >> 8);
UBRR0L = (uint8_t)(BAUD_PRESCALLER);
UCSR0B = (1 << TXEN0); // Enable transmitter
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bit data format
}
- Implement the function to transmit data:
void uart_transmit(uint8_t data) {
while (!(UCSR0A & (1 << UDRE0))); // Wait for empty transmit buffer
UDR0 = data; // Put data into the buffer, sends the data
}
- Call the uart_init() function in your setup() function to initialize UART communication:
void setup() {
// Other setup code...
uart_init();
// More setup code...
}
- Use uart_transmit() to send data:
void loop() {
// Transmit a character
uart_transmit('A');
// Delay between transmissions
_delay_ms(1000);
}
Make sure to connect the appropriate UART pins (TX) to the corresponding pins on your Arduino board. Additionally, set the correct BAUDRATE value based on your desired communication speed.
Demo Program That Transmits String of Characters
#include <avr/io.h>
#include <util/delay.h>
#define BAUDRATE 9600
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
void uart_init() {
UBRR0H = (uint8_t)(BAUD_PRESCALLER >> 8);
UBRR0L = (uint8_t)(BAUD_PRESCALLER);
UCSR0B = (1 << TXEN0); // Enable transmitter
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bit data format
}
void uart_transmit(uint8_t data) {
while (!(UCSR0A & (1 << UDRE0))); // Wait for empty transmit buffer
UDR0 = data; // Put data into the buffer, sends the data
}
void uart_transmit_string(const char* str) {
for (size_t i = 0; str[i] != '\0'; ++i) {
uart_transmit(str[i]);
_delay_ms(100); // Delay between character transmissions
}
}
void setup() {
// Initialize UART
uart_init();
}
void loop() {
// Transmit a string
uart_transmit_string("Hello, world!");
// Delay before transmitting again
_delay_ms(2000);
}
Um Daten über UART mit dem ATmega328P Mikrocontroller in AVR C unter Verwendung der Arduino IDE zu übertragen, können Sie die folgenden Schritte befolgen:
Fügen Sie die erforderlichen Header-Dateien ein:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
Definieren Sie die UART-Einstellungen:
#define BAUDRATE 9600
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
Initialisieren Sie UART, indem Sie die Baudrate und andere Einstellungen konfigurieren:
void uart_init() {
UBRR0H = (uint8_t)(BAUD_PRESCALLER >> 8);
UBRR0L = (uint8_t)(BAUD_PRESCALLER);
UCSR0B = (1 << TXEN0); // Sender aktivieren
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-Bit Datenformat
}
Implementieren Sie die Funktion zum Senden von Daten:
void uart_transmit(uint8_t data) {
while (!(UCSR0A & (1 << UDRE0))); // Warten auf leeren Sendepuffer
UDR0 = data; // Daten in den Puffer schreiben und senden
}
Rufen Sie die Funktion uart_init() in Ihrer setup() Funktion auf, um die UART-Kommunikation zu initialisieren:
void setup() {
// Andere Setup-Code...
uart_init();
// Weitere Setup-Code...
}
Verwenden Sie uart_transmit(), um Daten zu senden:
void loop() {
// Ein Zeichen übertragen
uart_transmit('A');
// Verzögerung zwischen den Übertragungen
_delay_ms(1000);
}
Stellen Sie sicher, dass Sie die entsprechenden UART-Pins (TX) mit den entsprechenden Pins auf Ihrem Arduino-Board verbinden. Stellen Sie außerdem den korrekten BAUDRATE-Wert entsprechend Ihrer gewünschten Kommunikationsgeschwindigkeit ein.
Demo-Programm zum Senden einer Zeichenkette von Zeichen
#include <avr/io.h>
#include <util/delay.h>
#define BAUDRATE 9600
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
void uart_init() {
UBRR0H = (uint8_t)(BAUD_PRESCALLER >> 8);
UBRR0L = (uint8_t)(BAUD_PRESCALLER);
UCSR0B = (1 << TXEN0); // Enable transmitter
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bit data format
}
void uart_transmit(uint8_t data) {
while (!(UCSR0A & (1 << UDRE0))); // Wait for empty transmit buffer
UDR0 = data; // Put data into the buffer, sends the data
}
void uart_transmit_string(const char* str) {
for (size_t i = 0; str[i] != '\0'; ++i) {
uart_transmit(str[i]);
_delay_ms(100); // Delay between character transmissions
}
}
void setup() {
// Initialize UART
uart_init();
}
void loop() {
// Transmit a string
uart_transmit_string("Hello, world!");
// Delay before transmitting again
_delay_ms(2000);
}
एटीमेगा328पी माइक्रोकंट्रोलर के साथ AVR C और Arduino IDE का उपयोग करके UART के माध्यम से डेटा भेजने के लिए, आप निम्नलिखित चरणों का पालन कर सकते हैं:
आवश्यक हेडर फ़ाइलें शामिल करें:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
UART सेटिंग्स को परिभाषित करें:
#define BAUDRATE 9600
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
बॉड दर और अन्य सेटिंग्स को कॉन्फ़िगर करके UART को प्रारंभ करें:
void uart_init() {
UBRR0H = (uint8_t)(BAUD_PRESCALLER >> 8);
UBRR0L = (uint8_t)(BAUD_PRESCALLER);
UCSR0B = (1 << TXEN0); // ट्रांसमीटर सक्षम करें
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-बिट डेटा फ़ॉर्मेट
}
डेटा भेजने के लिए फ़ंक्शन को लागू करें:
void uart_transmit(uint8_t data) {
while (!(UCSR0A & (1 << UDRE0))); // खाली ट्रांसमिट बफर के लिए प्रतीक्षा करें
UDR0 = data; // डेटा को बफर में डालें, डेटा भेजें
}
आपकी सेटअप() फ़ंक्शन में uart_init() फ़ंक्शन को कॉल करें, UART संचार को प्रारंभ करने के लिए:
void setup() {
// अन्य सेटअप कोड...
uart_init();
// अधिक सेटअप कोड...
}
डेटा भेजने के लिए uart_transmit() का उपयोग करें:
void loop() {
// एक वर्ण भेजें
uart_transmit('A');
// भेजने के बीच में विलंब
_delay_ms(1000);
}
उचित UART पिन (TX) को अपने Arduino बोर्ड के संबंधित पिनों से कनेक्ट करने का सुनिश्चित करें। इसके अलावा, अपनी इच्छित संचार गति के आधार पर सही BAUDRATE मान सेट करें।
वर्ण स्ट्रिंग भेजने का डेमो प्रोग्राम
#include <avr/io.h>
#include <util/delay.h>
#define BAUDRATE 9600
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
void uart_init() {
UBRR0H = (uint8_t)(BAUD_PRESCALLER >> 8);
UBRR0L = (uint8_t)(BAUD_PRESCALLER);
UCSR0B = (1 << TXEN0); // Enable transmitter
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bit data format
}
void uart_transmit(uint8_t data) {
while (!(UCSR0A & (1 << UDRE0))); // Wait for empty transmit buffer
UDR0 = data; // Put data into the buffer, sends the data
}
void uart_transmit_string(const char* str) {
for (size_t i = 0; str[i] != '\0'; ++i) {
uart_transmit(str[i]);
_delay_ms(100); // Delay between character transmissions
}
}
void setup() {
// Initialize UART
uart_init();
}
void loop() {
// Transmit a string
uart_transmit_string("Hello, world!");
// Delay before transmitting again
_delay_ms(2000);
}
Leave a Reply