Forum: Mikrocontroller und Digitale Elektronik 8051 Probleme mit UART Kommunikation


von Matze (Gast)


Lesenswert?

Hallo zusammen:

ich möchte einen AT89C5131 mit 12 MHz den FS20 Empfänger von ELV 
(FS20WUE)über UART verbinden. Die Kommunkation mit einem 
Terminalprogramm am PC funktioniert, wenn ich jedoch den gleichen Befehl 
vom Mikrocontroller per UART an den FS20WUE sende, erhalte ich vom 
FS20WUE keine Reaktion. Der FS20WUE hängt am seriellen Port P3.0/P3.1, 
parallel dazu ist ein MAX232 angeschlossen, mit dem ich die Daten am PC 
empfangen kann.

Hat jemand eine Idee, woran es liegen könnte?
1
#include <at89c5131.h>            
2
3
void Uart_Init(crystal_t systemCrysal)
4
{
5
    // init uart
6
    SCON |= 0x50;        // SM1 (2^6) = 1; REN (2^4) = 1;
7
8
//-------------------------------------------------
9
    // Timer2 init
10
    T2CON |= 0x30;    // TCLK (2^4) = 1; RCLK (2^5) = 1;
11
    TR2 = 1;          // Timmer2 run T2CON 2^2
12
13
    if(systemCrysal == _12MHz)
14
    {
15
        // Reloadwert fuer 12MHz Quarz
16
        RCAP2H = 0xFF;
17
        RCAP2L = 0xB2;
18
    }
19
    else if  (systemCrysal == _24MHz)
20
    {
21
        // Reloadwert fuer 24MHz Quarz
22
        RCAP2H = 0xFF;
23
        RCAP2L = 0x66;
24
    }
25
    else {}
26
27
//-------------------------------------------------
28
    TI = 1;        // SCON; Ermoeglicht das Benutzen von printf()
29
}
30
31
void serial_send(unsigned char dat){
32
  while(!TI);
33
  TI = 0;
34
  SBUF = dat;
35
}
36
37
  unsigned char serial_read(){
38
  while(!RI);
39
  RI = 0;
40
  return SBUF;
41
}
42
43
44
45
void main (void){
46
  
47
48
  Uart_Init (_12MHz);
49
  
50
  serial_send (0x02);
51
  serial_send (0x01);
52
  serial_send (0xF0);
53
54
55
  while(1){
56
    
57
    
58
    serial_read();
59
  P2_0 = RI;
60
  P2_1 = TI;
61
62
  }}

von Peter D. (peda)


Lesenswert?

Matze schrieb:
> parallel dazu ist ein MAX232 angeschlossen

Den RXD-Ausgang des 232 darf man nicht mit einem anderen Ausgang 
parallel schalten!

von Uwe B. (uwe_beis)


Lesenswert?

Ich kann immer nur dazu raten, sich anzusehen, was auf der 
Schnittstelle passiert. Embedded Firmware zu schreiben, ohne in der Lage 
zu sein, sich die elektrischen Signale, die man erzeugt, ansehen zu 
können, scheint mir so ähnlich zu sein, wie mit geschlossen Augen Regie 
bei Filmaufnahmen zu führen.

Statt Oszi würde evtl. sogar die Soundkarte genügen, wenn die Rx- und 
Tx-Signal weit genug herunter geteilt werden und z. B. mit Audacity 
dargestellt werden.

von hardfault (Gast)


Lesenswert?

Ich würde mir die Baudratenerzeugung anschauen:
http://www.atmel.com/tools/CODEEXAMPLESFOR8051UART.aspx

von Matze (Gast)


Lesenswert?

Peter D. schrieb:
> Matze schrieb:
>> parallel dazu ist ein MAX232 angeschlossen
>
> Den RXD-Ausgang des 232 darf man nicht mit einem anderen Ausgang
> parallel schalten!

Vielen Dank, das war der entscheidende Tipp :) Leider bin ich noch in 
keinem Besitz eines Oszis, das wäre wohl die nächste Anschaffung...

von Georg G. (df2au)


Lesenswert?

Matze schrieb:
> keinem Besitz eines Oszis

Das gibt es von etwa 50.- bis <Lottogewinn>. Ein DS203 für 125.- ist 
imho für einen Anfänger ein guter Kompromiss. Aber selbst mit dem DS201 
kann man schon viele Käfer erschlagen. Wichtiger als das Werkzeug ist in 
jedem Fall das Hirn am anderen Ende der Prüfstrippe.

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.