Guten Abend liebes µC-Forum! :D Ich habe einen "ATmega128 USB V2 BL" von mikrocontroller-praxis.de mit Bootloader und dazu das BTM222-Modul. Das BT-Modul habe ich an die UART0 vom µC angeschlossen, ich kann soweit auch problemlos AT-Befehle an das Modul übergeben und Daten an z.B. mein Handy mit passender Empfangs-Software versenden. Was mir nun allerdings ein paar Probleme bereitet ist das Empfangen von Daten auf dem RX Pin (PE0). Ich habe mir mal das Datenblatt genauer angesehen und gelesen, dass das SPI mitunter den PE0 Pin in Verwendung hat und es so eine Art "Prioritäts-Liste" gibt, die festlegt welche Funktion des Pin's "bevorzugt" wird. Leider konnte ich auch nach Stunden langer Suche keine Lösung dafür finden wie ich den RX nun für die UART verwenden kann. Ich hoffe sehr das mir jemand von euch evtl. bei dem Problem weiterhelfen kann. Gruß, Tim
Tim Bendig schrieb: > problemlos AT-Befehle an das Modul übergeben und Daten an z.B. mein > Handy mit passender Empfangs-Software versenden. --> heißt, Du hast folgenden Aufbau: ATMega128 BTM222 Tx0--------------->-------Rx Rx0---------------<-------Tx Warum kannst Befehle an das Modul schicken? Zeigt es die jeweils erwartete Reaktion und gibt am Rx0 des AtMega ein entsprechendes Acknowledge? Was ist die "passende Emfpangs-Software"? Code auf dem uC? Womit flashst Du den uC? Mit dem ISP? Seine Pins scheinen auch mit PE0 belegt zu sein. Gibt es sonst noch andere "Teilnehmer" auf dem Rx0-Potential?
Aufbau sieht wie folgt aus: ATmega128 Pegelwandler BTM222 ____ Tx0 ------------->| |---------> Rx ---- Rx0 <----------------------------- Tx Das ich Befehle an das Modul senden kann weiß ich auf Grund dessen das sich z.B. der Device-Name wenn ich das Modul über Bluetooth von z.B. meinem Handy suchen lasse, mein festgelegter Name als Gerät angezeigt wird. Programmieren tue ich es mit dem Atmel Studio 6 und flashe die .hex mit dem Programm "MegaLoad .NET" über die im Chip eingebaute USB<->UART Bridge (das ist der µC: http://mikrocontroller-praxis.de/de/Development-Tools/AVR-Mikrocontroller-Module/MEGA128-USB-V2-BL.html ) Hier noch Code-Ausschnitte wie ich die UART Initialisiere etc.:
1 | void uart_init(int uart_0_1, int baud_val, int rx_i, int tx_i) // Initialisierung UART |
2 | {
|
3 | cli(); |
4 | if(uart_0_1 == 0) |
5 | {
|
6 | // Konfiguriert die Baudrate
|
7 | UBRR0H = baud_val >> 8; |
8 | UBRR0L = baud_val; |
9 | |
10 | if(rx_i == 1) |
11 | {
|
12 | UCSR0B = (1<<RXEN0) | (1<<RXCIE0); |
13 | sei(); |
14 | }
|
15 | if(tx_i == 1) |
16 | {
|
17 | UCSR0B = (1<<TXEN0) | (1<<TXCIE0); |
18 | sei(); |
19 | }
|
20 | |
21 | }
|
Die Baudrate beträgt 19200baud bei bei ner Taktfrequenz von 16MHz des ATmega's, woraus sich folgender Funktionsaufruf ergibt:
1 | uart_init( 0, 0x33, 1, 1); |
Kay Imperator schrieb: > Gibt es sonst noch > andere "Teilnehmer" auf dem Rx0-Potential? Was genau meinst du mit "andere 'Teilnehmer' auf dem Rx0-Potential?" ? Meinst du ob sonst noch ein Gerät/Modul/Sonstiges Daten auf diese Schnittstelle sendet? Wenn ja, nein das BTM222 is das einzige Modul.
Tim Bendig schrieb: > if(rx_i == 1) > { > UCSR0B = (1<<RXEN0) | (1<<RXCIE0); > sei(); > } > if(tx_i == 1) > { > UCSR0B = (1<<TXEN0) | (1<<TXCIE0); > sei(); > } Wenn tx_i == 1 überschreibt das die Einstellungen von dem rx_i == 1 Zweig somit ist dein UART nicht für den Empfang konfiguriert
Christian K. schrieb: > Wenn tx_i == 1 überschreibt das die Einstellungen von dem rx_i == 1 > Zweig Ohman.. Ich hab an alles gedacht, nur nicht daran. Ich bin ein Idiot haha :D Vielen vielen Dank für diesen Hinweis, habe die Funktion eben umgeschrieben und nun funktioniert auch das Empfangen problemlos. Gruß Tim
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.