Forum: Mikrocontroller und Digitale Elektronik ATmega128 - UART0 RX-Problem


von Tim B. (deatplayer)


Lesenswert?

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

von Kay I. (imperator)


Lesenswert?

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?

von Tim B. (deatplayer)


Lesenswert?

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.

von Christian K. (the_kirsch)


Lesenswert?

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

von Tim B. (deatplayer)


Lesenswert?

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