Forum: Mikrocontroller und Digitale Elektronik Adruino Every USART3


von Ingo L. (corrtexx)


Lesenswert?

Hallo,
ich habe ein Arduino Every Board, bei dem ich vom Atmega4809 über dem 
SAM, welcher als USB-Schnitstellenanbindung funktioniert, Daten an ein 
Terminal senden möchte. Das Board meldet sich als COM6 an, jedoch kommt 
im Terminal nur Müll an. Ich habe verschiedene Baud-Raten versucht und 
auch die Pegel zum SAM mal invertiert (wegen des Levelshifters). Leider 
ohne Erfolg. Auf welcher Baudrate muss der SAM denn angesprochen werden? 
Ich programmiere das Ding ohne die Arduino-Lib -und IDE.

Auf dem Oszi sehe ich, dass das was am Pin des SAMs ankommt, mit dem was 
ich sende übereinstimmt. Aber der SAM weigert sich, die Daten an das 
Terminal bzw. die COM-Schnittstelle zu übergeben. Ich spreche auf 9600 
Baud mit ihm.

Ich habe folgenden Code zum Initialisieren:
1
#define USART0_BAUD_RATE(BAUD_RATE) ((float)(F_CPU * 64 / (16 * (float)BAUD_RATE)) + 0.5)
2
3
  //RS-232
4
  /*  
5
    PB04 = TXD0
6
    PB05 = RXD0
7
  */
8
  //Remap Pins
9
//  PORTB.PIN4CTRL |= PORT_INVEN_bm;
10
  PORTB.DIRSET = PIN4_bm;
11
  PORTMUX.USARTROUTEA |= PORTMUX_USART3_ALT1_gc;
12
  USART3.BAUD = (uint16_t) USART0_BAUD_RATE( 9600 );    // Baudrate 9600k
13
  USART3.CTRLC |= USART_CHSIZE_8BIT_gc;  // 8Bit Size
14
  USART3.CTRLB |= USART_RXEN_bm | USART_TXEN_bm;      // Enable Reciever/Transmitter

Ich habe den globalen Prescaler deaktiviert vom 4809, er läuft also auf 
20MHz.

von Ingo L. (corrtexx)


Lesenswert?

Senden tue ich:
1
while (!(USART3.STATUS & USART_DREIF_bm));
2
    USART3.TXDATAL = 'A';
3
    _delay_ms( 200 );
zyklisch in der Main (natürlich nur bis das Terminal auch läuft...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ingo L. schrieb:
> Baudrate 9600k
Echt jetzt?

> Auf welcher Baudrate muss der SAM denn angesprochen werden?
Welche hast du denn im Terminal für die COM6 eingestellt?

> Auf welcher Baudrate muss der SAM denn angesprochen werden?
Ich würde mal einfach vom PC-Terminal laufend ein Zeichen ausgeben und 
am Ausgang des SAM messen, welche Bitzeit der da verwendet und daraus 
die Baudrate berechnen...

von Ingo L. (corrtexx)


Lesenswert?

Lothar M. schrieb:
>> Baudrate 9600k
> Echt jetzt?
Nee. 9600, sorry

> Welche hast du denn im Terminal für die COM6 eingestellt?
Die Selbe wie vom Sender

> Ich würde mal einfach vom PC-Terminal laufend ein Zeichen ausgeben und
> am Ausgang des SAM messen, welche Bitzeit der da verwendet und daraus
> die Baudrate berechnen...
Himmel, das is ne sehr gute Idee! Ich mach mich gleich dran...

von Ingo L. (corrtexx)


Lesenswert?

Das wars, auf 115,2k spricht er mit mir, vielen Dank!

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.