Witam!
próbuje przesłać dane z komputera, na atmege i wyświetlić je binarne na LCD. Problem tkwi w tym że wyświetlane dane nie zgadzają się z tym co wysłałem z PC. Używam Atmegi 16 na kwarcu 16 Mhz.Oto kody programów od strony PC i Atmegi:
PC [C#] :
ATMEGA C:
Jak widać programy są maksymalnie uproszczone pod kątem problemu.
Po naciśnięciu buttona w programie od strony PC, na LCD wyskakują jakieś niechciane dane....
Jeśli widzi ktoś jakieś błędy, przeoczenia, proszę o pomoc
próbuje przesłać dane z komputera, na atmege i wyświetlić je binarne na LCD. Problem tkwi w tym że wyświetlane dane nie zgadzają się z tym co wysłałem z PC. Używam Atmegi 16 na kwarcu 16 Mhz.Oto kody programów od strony PC i Atmegi:
PC [C#] :
using ...
namespace RS232
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
serialPort1.StopBits = System.IO.Ports.StopBits.One;
serialPort1.DataBits = 8;
serialPort1.Parity = System.IO.Ports.Parity.None;
serialPort1.BaudRate = 9600;
serialPort1.Open();
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Write("U");
}
}
}
ATMEGA C:
#include <avr/io.h>
#include <LCD.h>
void USART_INIT()
{
UCSRB = (1<<RXEN)|(1<<TXEN); // RXEN , TXEN włączony
UCSRC = 0b00000110; // 8 bit, NP, 1 bit stopu
UBRRL = 0b01100111; // 9600 [b/s]
UBRRH = 0b00000000;
}
unsigned char USART_RECEIVE()
{
while(!(UCSRA & (1<<RXC)))
;
return UDR;
}
int main()
{
DDRA=0b11111111;
USART_INIT();
LCD_INIT();
unsigned short BYTE = USART_RECEIVE();
for(unsigned short i = 128 ; i>=1 ; i=i/2)
{
if((BYTE & i) == i)
WRITE_CHAR('1');
else
WRITE_CHAR('0');
}
}
Jak widać programy są maksymalnie uproszczone pod kątem problemu.
Po naciśnięciu buttona w programie od strony PC, na LCD wyskakują jakieś niechciane dane....
Jeśli widzi ktoś jakieś błędy, przeoczenia, proszę o pomoc