Hallo Leute,
habe hier einen soweit funktionierendes AVR NET IO Board.
Habe ein Script geschrieben, dass über die UART Schnittstelle einen
String sendet. Am Computer werden die gesendeten codes (Docklight)
wunderbar interpretiert. Eigentlich genau wie es sein soll.
Schließe ich die Platine an den Marantz SR 5004 an, reagiert dieser aber
nicht.
Habe natürlich getestet, kommt der Befehl direkt vom Computer reagiert
der Marantz Receiver.
An was kann es denn noch liegen? Habe ich den Carriag Return richtig
eingebunden??
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #include <stdio.h>
|
4 |
|
5 | int uart_putc(unsigned char c)
|
6 | {
|
7 | while (!(UCSRA & (1<<UDRE))) //warten bis Senden Mˆglich
|
8 | {}
|
9 | UDR = c;
|
10 | return 0;
|
11 | }
|
12 |
|
13 |
|
14 | void uart_puts (char *n)
|
15 | {
|
16 | char *s = n;
|
17 | while (*s)
|
18 |
|
19 | {/*so lange *s != '\0' also ungleich dem "String- Endzeichen" NULL */
|
20 | uart_putc(*s);
|
21 | s++;
|
22 | }
|
23 | }
|
24 |
|
25 | void uart_init(void)
|
26 | {
|
27 | #ifndef F_CPU
|
28 | #define F_CPU 16000000
|
29 | #endif
|
30 | #define UART_BAUD_RATE 9600
|
31 |
|
32 | //Hilfsmakro zur UBRR-Berechnung ("Formel laut Datenblatt)
|
33 | #define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
|
34 |
|
35 | UCSRB |= (1<<TXEN) | (1<<RXEN); //UART TX und RX einschalten
|
36 | UCSRC |= (1<<URSEL)| (3<<UCSZ0); //Asynchron 8N1
|
37 |
|
38 | UBRRH = (uint8_t)( UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ) >> 8);
|
39 | UBRRL = (uint8_t)UART_UBRR_CALC( UART_BAUD_RATE, F_CPU );
|
40 | }
|
41 |
|
42 |
|
43 | int main(void)
|
44 | {
|
45 | DDRA &= ~(1<<DDA7); /* Pin PA7 als Eingang */
|
46 | PORTA |= (1<<PA7); /* internen Pull-Up an PA7 aktivieren */
|
47 |
|
48 | uart_init();
|
49 |
|
50 |
|
51 | while (1)
|
52 | {
|
53 | if (!( PINA & ( 1 << DDA7 ) ))
|
54 | {
|
55 | uart_puts("Main Zone Power Off,@PWR:1\r");
|
56 |
|
57 | _delay_ms(3000);
|
58 | }
|
59 |
|
60 | }
|
61 | return 0;
|
62 | }
|