Hello,
I have prepared code to send data via USART on ArduinoMega2560 without external library. I don’t want to use BuiltIIn Serial.print().
My Code is:
#define FOSC 16000000 // Clock Speed = 16MHz
#define BAUD 19200
#define USART_TX_BUFFER_SIZE 128
#define MYUBRR FOSC/16/BAUD-1
#include <Arduino.h>
void USART_init (unsigned int ubrr);
void USART_Transmit(char data);
void setup() {
USART_init(MYUBRR);
DDRB |= (1<<7);//sets PB7 as GPIO output
_delay_ms(500);
}
//=============================================================================
void loop() {
for ( int i=0; i<255;++i)
{
USART_Transmit(i);
_delay_ms(500);
PORTB ^= (1<<7);
long a=10;
char buf[10];
ltoa(a,buf,BIN);
USART_Transmit(10);
USART_Transmit(buf);
_delay_ms(500);
PORTB ^= (1<<7);
}
}
//=============================================================================
void USART_init (unsigned int ubrr)
{
UBRR0H = (unsigned char)(ubrr>>8);/*Set baud rate (Basically just setting the constant Value determined by MYUBRR in the UBRR0H&L Register */
UBRR0L = (unsigned char)ubrr;
UCSR0B = (1<<TXEN0) ;//| (1<<TXCIE0); /* Enable receiver, transmitter and transmit buffer interrupt */
UCSR0C = 0B00000000;
UCSR0C = (!(1<<USBS0))|(1<<UCSZ01)|(1<<UCSZ00);
}
void USART_Transmit(char data)
{
while (!( UCSR0A & (1<<UDRE0))); //Bit 5 – UDREn: USART Data Register Empty
UDR0 = data;
}
1. I have Warning:
src\main.cpp: In function ‘void loop()’:
src\main.cpp:28:24: warning: invalid conversion from ‘char*’ to ‘char’ [-fpermissive]
USART_Transmit(buf);
^
src\main.cpp:9:6: note: initializing argument 1 of ‘void USART_Transmit(char)’
void USART_Transmit(char data);
WHY?
2. On Terminal there is only proper “char”, but I can not display Binary Value or Register Value, f.e. for now I try to dsiplay DEC 10 in BIn. In future, I want to display Register Value, f.e. for USCR0C-> 00011000.
How to send value to terminal?