Forum: Mikrocontroller und Digitale Elektronik UART, RS232 Soundmodul


von Hans B. (hans_b92)


Lesenswert?

Hallo,


ich bastel gerade mit einem Atmega8 (4MHZ Quarz) und dem USART rum. 
Anhand diverse Codebeispiele habe ich den Mikrocontroller nun auch 
soweit über die RS232 Schnittstelle auf ein Terminalprogramm am PC die 
gewünschten Daten auszugeben.

Soweit so gut.

Endziel ist es dieses Soundmodul anzusteuern: 
http://mdfly.com/Download/Module/AU5121Sspec.pdf

Dieses Soundmodul speißt sich direkt aus der 9V Quelle, der Atmega ist 
mit entsprechender Beschaltung an ner 5V Spannung. RS232 Schaltung habe 
ich dem Tutorial entnommen und ausweißlich der Übertragung ans 
Terminalprogramm auch getestet.

Nach meinem Verständnis sollte die Ansteuerung nun so funktionieren, 
dass ich an den entsprechenden MAX232-Ausgang den Reciever-Pin des 
Soundmoduls anhänge und 0x01 sende um bspw. das File 001.mp3 
abzuspielen.

Hierbei verwende ich folgenden Code
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
#include <string.h>
5
6
#define F_CPU           4000000UL
7
8
#include <util/delay.h>
9
10
#define UART_BAUDRATE  4800
11
12
#define UART_SETTING  ((F_CPU/16L/UART_BAUDRATE)-1)
13
14
// #define debounce ... Define zwecks Lesbarkeit ausgeblendet
15
16
void setup_uart()
17
{
18
  /* Baudrate einstellen */
19
  UBRRH = (char) (UART_SETTING >> 8);
20
  UBRRL = (char) (UART_SETTING);
21
22
  /* Empfänger und Sender einschalten */
23
  UCSRB = (1<<RXEN) | (1<<TXEN);
24
25
  /* Asynchron, 8N1 */
26
  UCSRC = (1<<URSEL) | (3<<UCSZ0);
27
}
28
29
void uart_putchar(char c)
30
{
31
  
32
  while (!(UCSRA & (1 << UDRE)))
33
    ;
34
  UDR = c;
35
}
36
37
void uart_putstring(char *str)
38
{
39
  unsigned char i;
40
41
  for (i=0;i<255;i++) 
42
  {
43
    if (str[i] != 0)
44
      uart_putchar(str[i]);
45
    else
46
      break; 
47
  }
48
}
49
50
char uart_getchar()
51
{
52
  if (bit_is_set(UCSRA, RXC))
53
    return UDR;
54
  else 
55
    return -1;
56
}
57
58
void uart_readline(char *str)
59
{
60
  char c;
61
  unsigned char index;
62
  
63
  index = 0;
64
65
  while (1)
66
  {
67
    c = uart_getchar();
68
    if (c != -1)
69
    {
70
      if (c == 13) 
71
      {
72
        str[index] = 0;
73
74
        return;
75
      }
76
      else 
77
      {
78
        str[index] = c;
79
        index++;
80
      }
81
    }
82
  }
83
}
84
85
86
int main(void)
87
{
88
89
  DDRD=0xff;
90
  DDRB = (1<<PB1);
91
        DDRC = 0b11111100;
92
  PORTD=0b10111111;
93
        PORTC = (1<<PC1) | (1<<PC0);          
94
95
        sei(); // Interrupts für Servotests, Code ausgeblendet               
96
 
97
   sekunden = 0;
98
  msekunden = 0;
99
100
  setup_uart();
101
102
103
  while(1)
104
  {
105
  if(debounce(PINC, PC5))
106
    uart_putchar(0x01);
107
  }  
108
  return 1;
109
}

Und nun die Tragik: Es funktioniert nicht (wer hätte es gedacht?). Hat 
zufällig jemand einen Tipp für mich was ich falsch mache?

Vielen lieben Dank
Grüße aus der Pfalz

von Achim M. (minifloat)


Lesenswert?

du gehst vom AVR-TX an den RX-Pin an einer Dsub9-Buchse? Das geht so 
nicht, da muss noch eine Pegelwandlung, mindestens ein Inverter 
dazwischen. Einzelner PNP Transistor mit Emitter an +5V, AVR-TX über 
sagen wir mal 10kΩ an die Basis, Kollektor über 1kΩ an Masse oder sogar 
an eine Negative Spannung. vom Kollektor aus dann an Soundmodul-RX.

Echtes RS232 arbeitet auf den Datenleitungen mit "falsch herummen 
Pegeln".
mfg mf

PS: besser wärs den MAX232 rauszuwerfen und direkt "rüber zu gehen", 
vllt über nen 1kΩ "Angstwiderstand".
PS2: Zur Transengeschichte mach ich dir gern einen ASCII-Schaltplan.

von Hans B. (hans_b92)


Angehängte Dateien:

Lesenswert?

Hi,

erstmal Danke für die Antwort, ich habe als Diskussionsgrundlage noch 
die Schaltung kurz als Bild angehängt - ich hoffe dadurch wird klarer 
wie ich es beschalten habe!

Grüße

von Hannes L. (hannes)


Lesenswert?

Hans B. schrieb:
> Hi,
>
> erstmal Danke für die Antwort, ich habe als Diskussionsgrundlage noch
> die Schaltung kurz als Bild angehängt - ich hoffe dadurch wird klarer
> wie ich es beschalten habe!
>
> Grüße

Ist Dir auf Seite 1 des Datenblattes des Soundmoduls in der Tabelle der 
Pinbelegung nicht aufgefallen, dass RXD und TXD TTL-Pegel haben? Der von 
Dir eingesetzte MAX232 wird vermutlich nur den RXD-Pin des Soundmoduls 
zerstören.

Andere Frage: Was kostet das Ding incl. Versand nach Deutschland?

...

von Hans B. (hans_b92)


Lesenswert?

Hi,

doch, ist mir schon aufgefallen, ich weiß nur nichts mit der Info 
anzufangen :D

Das Modul gabs über Ebay inkl. Versand für ca. 10 Eus!

von Hans B. (hans_b92)


Lesenswert?

Auch meine Google-Recherche zum Thema TTL bringt mich leider nicht 
wirklich weiter. Erzeugt der USART des Atmega8 bereits TTL-Niveau?

Meine Schaltung habe ich im Prinzip deshalb so gebaut, da das Soundmodul 
sich selber "RS232 Soundmodul" schimpft, ich also davon ausging, dass 
die Ansteuerung im Rahmen des RS232-Stils erfolgt.

Mag mich wer erleuchten?

von Hannes L. (hannes)


Lesenswert?

Hans B. schrieb:
> Auch meine Google-Recherche zum Thema TTL bringt mich leider nicht
> wirklich weiter. Erzeugt der USART des Atmega8 bereits TTL-Niveau?

Ja sicher doch.

>
> Meine Schaltung habe ich im Prinzip deshalb so gebaut, da das Soundmodul
> sich selber "RS232 Soundmodul" schimpft, ich also davon ausging, dass
> die Ansteuerung im Rahmen des RS232-Stils erfolgt.

RS232 hat erstmal nicht allzuviel mit den Pegeln zu tun, sondern mit 
Bitfolge und Baudrate. Für kurze Strecken, besonders innerhalb eines 
Gerätes, kann man durchaus mit TTL-Pegeln arbeiten. Für PCs und Geräte, 
die für den Anschluss an den PC bestimmt sind, gilt zusätzlich V.24, die 
die Pegel beschreibt.

>
> Mag mich wer erleuchten?

...

von Hans B. (hans_b92)


Lesenswert?

Will heißen: Rx des Soundmoduls direkt an den USART Tx Ausgangspin des 
Atmega8 und dann müsste es laufen?

Dies hatte ich bereits versucht, leider ohne nennenswerte (bzw. hörbare) 
Ergebnisse :)

edit: Ganz vergessen mich zu bedanken, sorry! Vielen Dank für die 
Unterstützung!

von Hannes L. (hannes)


Lesenswert?

Hans B. schrieb:
> Will heißen: Rx des Soundmoduls direkt an den USART Tx Ausgangspin des
> Atmega8 und dann müsste es laufen?

So sollte es sein, aber ich kann mich da auch irren, denn ich habe das 
Modul (noch) nicht in den Händen, ich habe es gerade eben bestellt, 
Gesamtpreis 11,83 Eu.

>
> Dies hatte ich bereits versucht, leider ohne nennenswerte (bzw. hörbare)
> Ergebnisse :)

Normal müsste es gehen.
Baudrate stimmt?
AVR läuft mit Baudratenquarz?
AVR wird (über MAX232) vom PC verstanden?
Soundmodul lässt sich (über MAX232) vom PC ansteuern?

>
> edit: Ganz vergessen mich zu bedanken, sorry! Vielen Dank für die
> Unterstützung!

Nix zu danken, ist doch gegenseitige Hilfe. Ich danke auch für die Info 
betreffs Versandkosten.
Ich hatte das Ding schon länger im Auge, allerdings nicht in der Bucht, 
sondern direkt bei mdfly.com. Ich habe aber keinerlei Erfahrung mit 
Lieferung aus USA, daher hielt ich mich bisher mit dem Kauf zurück.

...

von Hans B. (hans_b92)


Lesenswert?

Hallo,

Hannes Lux schrieb:

> Normal müsste es gehen.
> Baudrate stimmt?
> AVR läuft mit Baudratenquarz?
> AVR wird (über MAX232) vom PC verstanden?
> Soundmodul lässt sich (über MAX232) vom PC ansteuern?
>


Baudrate stimmt, ich habe derzeit nen 4MHZ Quarz dran. Pc versteht den 
AVR perfekt über den Max232, insofern hab ich den USART weniger in 
Verdacht.

Den Vorschlag das Modul über den Max232 vom PC anzusteuern werde ich mal 
versuchen - ich berichte dann.

Zu der Bestellung aus den USA noch: Bei mir ging das relativ problemfrei 
innerhalb von 1-2 Wochen!

Viele Grüße
Hans

von Hannes L. (hannes)


Lesenswert?

Hans B. schrieb:
> Hallo,
>
> Hannes Lux schrieb:
>
>> Normal müsste es gehen.
>> Baudrate stimmt?
>> AVR läuft mit Baudratenquarz?
>> AVR wird (über MAX232) vom PC verstanden?
>> Soundmodul lässt sich (über MAX232) vom PC ansteuern?
>>
>
>
> Baudrate stimmt, ich habe derzeit nen 4MHZ Quarz dran. Pc versteht den
> AVR perfekt über den Max232, insofern hab ich den USART weniger in
> Verdacht.
>
> Den Vorschlag das Modul über den Max232 vom PC anzusteuern werde ich mal
> versuchen - ich berichte dann.

Wenn's vom PC aus auch nicht geht, dann könnte es sein, dass ich 
"RXD(TTL)" falsch interpretiert habe und noch ein Inverter (Transistor) 
nötig wird. Das ist jetzt aber Spekulation.

>
> Zu der Bestellung aus den USA noch: Bei mir ging das relativ problemfrei
> innerhalb von 1-2 Wochen!

Danke, ich werde ja sehen, wie das läuft. Mit Ebay-Kram aus China bzw. 
Hongkong habe ich bisher gute Erfahrungen gemacht.

>
> Viele Grüße
> Hans

...

von Hans B. (hans_b92)


Lesenswert?

Testlauf mit Eingabe entsprechender Hex-Werte über ein Terminalprogramm 
am PC, über MAX232N an Rx des Soundmoduls hat leider ebenfalls nicht 
geklappt.

Evtl habe ich den Rx wirklich bereits geschrottet, mal sehen wie ich das 
überprüfen kann.

Ansonsten werde ich nunmal die Strategie über den Inverter versuchen - 
kosten ja nicht die Welt und ich freue mich immer über den abschätzigen 
Blick des Conradmitarbeiters...

Hat jemand ne Idee zur Beschaltung?

Vielen Dank und beste Grüße aus der Pfalz

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.