รบกวนผู้มีประสบการณ์ด้วยครับ
อยากส่ง data เป็น Hexa ครับ แต่ปัญหาผมคือ ลองเช็ค output ด้วย logic analyzer แล้ว ออกมาไม่ตรงกับ ข้อมูลที่ส่ง เหมือนว่า bit กลับหน้าเป็นหลัง
ส่ง FF FF 03 output เป็น 03 FF FF แต่พอส่ง 03 FF FF output มันเพี้ยนๆ ไป
ผมใช้ Atmega328p ตัวโค๊ดคราวๆนะครับ
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <compat/deprecated.h>
#include <util/delay.h>
#define F_CPU 8000000UL
void Init_Serial(unsigned int baudrate);
void put_command(uint8_t c)
{
while(!(UCSR0A & (1<<UDRE0)));
UDR0 = c;
}
static void USART_Init(unsigned int baud)
{
UBRR0H = (unsigned char)(baud>>8);
UBRR0L = (unsigned char)baud;
UCSR0B |= (1<<TXEN0);
UCSR0C=(0<<UMSEL00)|(0<<UPM01)|(0<<UPM00)|
(0<<USBS0)|(0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
}
int main(void)
{
DDRD = 0x05;//DDD1 txd=1 output
sbi(PORTD,1);
USART_Init(51); //9600bps
put_command(0xFF);
put_command(0xFF);
put_command(0x03);
return 0;
}
อยากสอบถามเกี่ยวกับ AVR atmega เขียนสื่อสารผ่าน Rs485
อยากส่ง data เป็น Hexa ครับ แต่ปัญหาผมคือ ลองเช็ค output ด้วย logic analyzer แล้ว ออกมาไม่ตรงกับ ข้อมูลที่ส่ง เหมือนว่า bit กลับหน้าเป็นหลัง
ส่ง FF FF 03 output เป็น 03 FF FF แต่พอส่ง 03 FF FF output มันเพี้ยนๆ ไป
ผมใช้ Atmega328p ตัวโค๊ดคราวๆนะครับ
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <compat/deprecated.h>
#include <util/delay.h>
#define F_CPU 8000000UL
void Init_Serial(unsigned int baudrate);
void put_command(uint8_t c)
{
while(!(UCSR0A & (1<<UDRE0)));
UDR0 = c;
}
static void USART_Init(unsigned int baud)
{
UBRR0H = (unsigned char)(baud>>8);
UBRR0L = (unsigned char)baud;
UCSR0B |= (1<<TXEN0);
UCSR0C=(0<<UMSEL00)|(0<<UPM01)|(0<<UPM00)|
(0<<USBS0)|(0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
}
int main(void)
{
DDRD = 0x05;//DDD1 txd=1 output
sbi(PORTD,1);
USART_Init(51); //9600bps
put_command(0xFF);
put_command(0xFF);
put_command(0x03);
return 0;
}