tuts aber, wieder die UUUUUUUUUU (also halt nur die Bit-Kopie, so wie vorher) :(Zitat:
Zitat von PicNick
andere Tasten nur irgendein Müll
Druckbare Version
tuts aber, wieder die UUUUUUUUUU (also halt nur die Bit-Kopie, so wie vorher) :(Zitat:
Zitat von PicNick
andere Tasten nur irgendein Müll
(Müll ist klar, das geht nur mit 0x55)
Ja, aber wenn er RX_M_DATA auslöst,
send_one_byte(bRxCount + 0x30);
kann doch kein "U" sein ?
Hopperla, da pfuscht uns die INT0 rein.
Lösch' das RX_M_RECEIVE erst zusammen mit dem RX_M_DATA , aber VOR dem Send_one...
if (bRxFlag & RX_M_DATA)
{
bRxFlag &= ~RX_M_DATA;
bRxFlag &= ~RX_M_RECEIVE;
send_one_byte(bRxCount + 0x30);
}
U's kommn immer noch :shock:
Noch ne Frage, bei 8 Datenbit 10101010 müßtn das net 0xAA sein?
Nein, LSB is first, er fängt beim kleinsten Bit an, also gew. rechts nach links
Was mich jetzt wundert, wieso send-One_byte scheinbar nix schickt, zwischen den U's
Stimmt auch wieder.. :-kZitat:
Zitat von PicNick
Aber eigentlich sollte doch das RX_M_DATA gesetzt werden oder nicht ?!?!
Ja, eben. das kann er doch nur versäumen, wenn er keine 8 Flanken erkennen kann ? Das kann er aber, sonst tät er ja nicht richtig kopieren (echo)
Da spuckt uns wer in die Suppe
Andere Strategie:
Du nimmst mal ganz normal die HW-UART zum senden und empfangen.
Den RxPin verbinden wir aber mit INT0 als Spion und der startet auch den Timer, der nix tut, außer bit zählen
Wenn beim empfangenen Byte das UDR signal gibt, müßte dieser Zähler ja unabhängig bis etwa 8 kommen. tut er das nicht, isser zu schnell oder langsam.
HW Uart stimmt no was net ganz.. Hab ich noch was vergessen zu initialisieren ??
Würd das dann mit unserem SW Uart kombinieren, so wie du meintest
INT0 mit dranhängen und in der Timer-ISR nur Bits mitzählen
Code:__task void main()
{
hw_uart_init(11); // 19200 @3.686 MHz
while(1);
}
void hw_uart_init(unsigned char baudrate)
{
UBRRL = baudrate;
UCSRB |= (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
}
void transmit_byte(unsigned char data)
{
UDR = data;
}
#pragma vector=USART_RXC_vect
__interrupt void UART_RX_interrupt(void)
{
unsigned char data;
data = UDR; //receive data
transmit_byte(data); // echo data
}
Morgen, in voller Frische ?
UBRRL = LOW(baudrate);
UBRRH = HIGH(baudrate);
Mag er net.
Kann ich doch auch so schreiben:
UBRRL = 0x0B;
UBRRH = 0x00;
Geht imma no net