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
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.
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
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?
...
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!
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?
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?
...
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!
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.
...
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
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
...
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.
|