Forum: Compiler & IDEs AVR NET IO RS232 Codes an Marantz Receiver


von Johannes S. (gnubert)


Lesenswert?

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
}

von g457 (Gast)


Lesenswert?

> Habe ich den Carriag Return richtig eingebunden??
[..]
> uart_puts("Main Zone Power Off,@PWR:1\r");

Das musst Du in der Speck nachlesen. '\r' ist jedenfalls eher 
ungewöhnlich (alte Mäcs mal ausgenommen).

HTH

von Johannes S. (gnubert)


Lesenswert?

komischerweise wird von Docklight beim Empfangen am PC ein <CR> am Ende 
erkannt...
aber vielleicht hilft docklight da beim interpretieren auch noch nach!?

Also der Marantz erwartet folgenden Code:
1
Main Zone Power Off,@PWR:1

gefolgt von einem cr


Baud Rate : 9600bps
Data Bits : 8bit
Parity : None
Stop bit : 1bit
Handshaking : None

von g457 (Gast)


Lesenswert?

..nebenbei bemerkt hast Du das schon mal vom Rechner aus getestet? Falls 
nein (oder falls es von dort aus ebenfalls nicht funktioniert hat:-): 
Bist Du sicher dass der Marantz das 'Main Zone Power Off,' hören will? 
Mir dünkt das dahinter sieht viel eher nach einem plausiblen 
Kommandoformat aus, das vorne dran ist arg menschenlesbar..

HTH

von DirkB (Gast)


Lesenswert?

Hast du auch das richtige Kabel? 1:1 bzw. Nullmodem.

von Johannes S. (gnubert)


Lesenswert?

Johannes Xy schrieb:
> Habe natürlich getestet, kommt der Befehl direkt vom Computer reagiert
> der Marantz Receiver

Also habe natürlich vom PC aus auch getestet. Und da funktioniert es.

Mit einem 1:1 Kabel.

Nehme ich das gleiche Kabel zwischen Platine <-> Marantz klappt es nicht

Platine <-> PC kommt eigentlich genau das an was ich auch haben will, 
nämlich
1
Main Zone Power Off,@PWR:1<CR>

Theoretisch könnte die Platine ja einen gedrehten RS232 Anschluss haben 
und der PC korrigiert das gleich !?

PDF zum Board
http://www.pollin.de/shop/downloads/D810058B.PDF

von DirkB (Gast)


Lesenswert?

Bei der RS232 gibt es zwei Sorten von Geräten: Datenendeinrichtung (DEE) 
und Datenübertragungseinrichtung (DÜE). Der PC ist ein DEE, ein Modem 
ein DÜE.

Dabei kommt es nicht so sehr auf die Funktion der Geräte sondern auf die 
Beschaltung der Schnittstelle an (Die Pins wo RxD und TxD angeschlossen 
ist)


Zwischen DEE und DÜE brauchst du ein 1:1 Kabel. ( TxD geht auf TxD,  RxD 
geht auf  RxD)
Zwischen DEE und DEE brauchst du ein Nullmodemkabel.( TxD geht auf RxD 
und umgekehrt.)
Zwischen DÜE und DÜE brauchst du ein Nullmodemkabel.

Das NET-IO ist als DÜE beschaltet. (1:1)
Der Marantz wohl auch (Gleiches Kabel?)

Dann brauchst du für NET-IO <-> Marantz ein Nullmodemkabel oder Adapter.


Man kann sich da leider weder auf die Pinbezeichnung noch auf 
Stecker/Buchse verlassen. Im Laufe der Jahrzehnte wurde alles gemacht.

Alles Klar? ;-)

von Johannes S. (gnubert)


Lesenswert?

ja klingt plausibel, werde ich mal ausprobieren.
danke!

von Johannes S. (gnubert)


Lesenswert?

So jetzt läufts, musste das Carriag Return via HEX übertragen
Johannes Xy schrieb:
> uart_puts("Main Zone Power Off,@PWR:1\r");
geändert in
1
uart_puts("Main Zone Power Off,@PWR:1\x0D");

und noch einen Nullmodemadapter zwischen klemmen.

danke!!

von DirkB (Gast)


Lesenswert?

'\r' und '\x0d' sollten das Gleiche sein.

Und lass mal den Kram vor dem @ weg:
1
uart_puts("@PWR:1\r");

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
Noch kein Account? Hier anmelden.