Hallo, ich arbeite noch nicht sehr lange mit meinem mrc board, ich habe aber ein programm geschrieben, sodass ich über ein terminal programm Zeichen zu meinem board schiken kann und diese werden mir als acsii code auf dem board angezeigt. das ganze passiert über die serielle schnittstelle. hier mal der code: #include <avr/io.h> #include <util/delay.h> int x = 65; void usart1_init(unsigned long baudrate) // Initialize USART0 { UBRR1H = 0; UBRR1L = 0x10; // set baud rate UBRRN sei 12 für 8 MHZ und 38400 UCSR1B = (1<<RXEN) | (1<<TXEN); // enable receiver and transmitter UCSR1C = 0x06;// 8 Datenbit 1 Stoppbit no parity } void usart1_tx (char data) // transmit byte via usart0 { while (!(UCSR1A & (1 << UDRE1))); // wait for empty transmit buffer UDR1 = data; // put data to buffer = send data } void uart1_send(unsigned char *buf, unsigned int size) // sendet Daten über UART { for(int i=0; i<=size;i++) { while ( !(UCSR1A &(1<<UDRE1))); /* warten bis Senden moeglich */ { } UDR1 = buf[i]; } } void main() { DDRA = 0xFF; usart1_init(16); while(1) { unsigned char buffer; // Warten bis Daten empfangen wurden while ( !(UCSR1A & (1<<RXC)) ) ; // Empfangsregister auslesen buffer = UDR1; PORTA= buffer; /* PORTA = 0x01; _delay_ms(3000); PORTA = 0x00; _delay_ms(3000); */ } } ich will jetzt nurnoch das das borad nicht nur empfangen sondern auch senden kann, und das will eifach nicht klappen. ich hab jetzt stundenlang seiten durchsucht, und ihr seid meine letzte hoffnung^^ ich bedanke mich schonmal im vorraus für die hilfe :-) lg koshiro
Hälst du nix von den Routinen und Beispielen im AVR UART Tutorial in der Artikelsammlung oder kennst du die nicht?
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | |
4 | void usart1_init(unsigned long baudrate) // Initialize USART0 |
5 | {
|
6 | UBRR1H = 0; |
7 | UBRR1L = 0x10; // set baud rate UBRRN sei 12 für 8 MHZ und 38400 |
8 | UCSR1B = (1<<RXEN) | (1<<TXEN); // enable receiver and transmitter |
9 | UCSR1C = 0x06;// 8 Datenbit 1 Stoppbit no parity |
10 | }
|
11 | |
12 | unsigned char usart1_rx(void) // receive byte via usart1 |
13 | {
|
14 | while ( !(UCSR1A & (1<<RXC)) ) |
15 | ;
|
16 | // Empfangsregister zurückgeben
|
17 | return UDR1; |
18 | }
|
19 | |
20 | void usart1_tx (char data) // transmit byte via usart1 |
21 | {
|
22 | while (!(UCSR1A & (1 << UDRE1))) |
23 | ; // wait for empty transmit buffer |
24 | UDR1 = data; // put data to buffer = send data |
25 | }
|
26 | |
27 | void uart1_send(unsigned char *buf, unsigned int size) |
28 | {
|
29 | for(int i=0; i<=size; i++) |
30 | {
|
31 | usart1_tx( buf[i] ); |
32 | }
|
33 | }
|
34 | |
35 | int main(void) |
36 | {
|
37 | DDRA = 0xFF; |
38 | usart1_init(16); |
39 | while(1) |
40 | {
|
41 | unsigned char buffer; |
42 | buffer = usart1_rx(); // Zeichen empfangen |
43 | usart1_tx(buffer); // und als Echo zurücksenden |
44 | PORTA = buffer; // Lokale Ausgabe |
45 | }
|
46 | }
|
Wenn das nicht funktioniert, dann den Loopback-RS232 Test machen, um die Hardware zu prüfen: AVR aus der Fassung nehmen, RXD und TXD in der Fassung brücken und vom PC aus etwas senden. Das Gesendete sollte als Echo zurück kommen.
Ich danke dir für die schnelle antwort :-) ich denke das wird mir auf jeden fall weiter helfen, besten dank. ich hatte mal ein avr uart tutorial aber das war ziemlich kompliziert erklärt und bin da nur teilweise durchgestiegen ^^ lg koshiro
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.