Forum: Mikrocontroller und Digitale Elektronik RS232 Kommunikation mit AT91SAM7 funktioniert, liefert aber nur Datenmüll


von JacK (Gast)


Lesenswert?

Hi,

mittlerweile habe ich mich in das Thema AT91SAM7x soweit eingelesen das 
ich das RS232 Tutorial von sparkfun.com compilieren und flashen kann.

Nur leider liefert das Ganze nur Datenmüll.
Der Beispielcode empfängt 10 Zeichen und sendet sie zurück.
Wenn ich jetzt ein 'a' sende bekomme ich ein 'x' zurück.
Wenn ich den µC den Wert 25 senden lassen, bekomme ich ein 's' also 115.
Ich kann keine Regelmäßigkeit und keinen Offset erkennen. Aber das 
verhalten ist reproduzierbar.
Im Tutorial wird ein 18,4320 MHz Quarz verwendet. Selbigen habe ich auf 
meiner Platiene. Ich würde jetzt vermuten irgendwo ist eine Einstellung 
falsch. Es gibt beim AT91SAM7x so viele Einstellungen und 
Frequenzteiler. Aber die Einstellungen sind doch alle im Code enthalten.

Hat der AT91SAM7x so etwas wie fuses?
Wo könnte mein fehler liegen?

code: 
http://www.sparkfun.com/datasheets/DevTools/SAM7/serial_tutorial_source.zip

besagtes tutorial: 
http://www.sparkfun.com/datasheets/DevTools/SAM7/at91sam7%20serial%20communications.pdf

von Peter (Gast)


Lesenswert?

Hallo,

Bei mir kam mit den Beispielen, die ich verwendet habe auch nur Müll 
raus (ein Ändern der BPS im Terminal brachte Besserung). Hier meine 
(abgeänderte ini für 115200/8/N/1):

#define EXT_OC          18432000        /* Exetrnal ocilator MAINCK  */
#define MCK             48054857        /* MCK (PLLRC div by 2)    */
#define MCKKHz          (MCK/1000)
#define BR    115200              /* Baud Rate        */
#define BRD  (MCK/10/BR)            /* Baud Rate Divisor    */

AT91S_USART * pUSART = AT91C_BASE_US0;      /* Global Pointer to USART0 
*/

void uart0_init(void)
{
  *AT91C_PIOA_PDR = AT91C_PA5_RXD0 |      /* Enable RxD0 Pin      */
            AT91C_PA6_TXD0;      /* Enalbe TxD0 Pin      */

  pUSART->US_CR = AT91C_US_RSTRX |      /* Reset Receiver      */
          AT91C_US_RSTTX |      /* Reset Transmitter    */
          AT91C_US_RXDIS |      /* Receiver Disable      */
          AT91C_US_TXDIS;        /* Transmitter Disable    */

  pUSART->US_MR = AT91C_US_USMODE_NORMAL |  /* Normal Mode        */
          AT91C_US_CLKS_CLOCK    |  /* Clock = MCK        */
          AT91C_US_CHRL_8_BITS   |  /* 8-bit Data        */
          AT91C_US_PAR_NONE      |  /* No Parity        */
          AT91C_US_NBSTOP_1_BIT;    /* 1 Stop Bit        */

  pUSART->US_BRGR = BRD;            /* Baud Rate Divisor    */

  pUSART->US_CR = AT91C_US_RXEN  |      /* Receiver Enable      */
          AT91C_US_TXEN;        /* Transmitter Enable    */
}

Bei mir an AT91SAM7P256.

MfG
Peter

von JacK (Gast)


Lesenswert?

kannst du mir erklären wie ich auf MCK komme? bzw was es damit auf sich 
hat?

von Peter (Gast)


Lesenswert?

Nein, kann ich leider nicht. Aber ich nimm den Wert einfach mal quasi 
als Fix hin, weil der eigentlich immer in allen Projekten, die ich zu 
AT91SAM7 so gesehen habe vorkommt.

Beitrag "Re: AT91SAM7P256 / Maximale Geschwindigkeit"

<Vermutung>
ich glaube, dass der MC den Externen Takt (18MHz) irgendwie intern auf 
die 48MHz "aufbläst".
</Vermutung>

von JacK (Gast)


Lesenswert?

ich wollte jetzt mal den code so übernehmen, aber er findet die passende 
deffinition zu
1
  *AT91C_PIOA_PDR = AT91C_PA5_RXD0 |      /* Enable RxD0 Pin      */
2
            AT91C_PA6_TXD0;      /* Enalbe TxD0 Pin      */
nicht.

kannst du mir die noch geben?

von Peter (Gast)


Lesenswert?

steht eigentlich alles in der AT91SAM7S256.h

die gibts bei Atmel in den Democodes...

von JacK (Gast)


Lesenswert?

hmm die AT91SAM7S256.h hab ich drin.

ich hab jetzt gerade nen mix aus deinem und menem code gebaut.
ich bekomme jetzt anderen datenmüll.
ich werde für heute schluss machen.

hast du vielleicht nen komplettes projekt, das du mir schicken kannst?
am besten würde mir ja ein code gefallen der mir einfach nur 
irgendwelche sinnvollen zeichen auf rs232 ausgibt.

von gerhard (Gast)


Lesenswert?

hallo jack,
ich würde dir empfehlen die beispielprogramme (software packages 
genannt) auf der atmel homepage runter zu laden und diese als basis zu 
benutzen.

gruss
gerhard

von JacK (Gast)


Lesenswert?

ich habe jetzt noch die grandiose idee mal mit der Boundrate runter zu 
gehen.
Werde dies aber erst in einigen Tagen testen können.

Seh ich es richtig das die Boundrate im Endeffekt nur von der 
ausgewählten Taktquelle und dem CD abhängt?
Als Taktquelle wird MCK ausgewählt und MCK ist bei gegebendem Takt von 
18432000Hz abhängig. und berechnet sich zu 48054857.

von JacK (Gast)


Lesenswert?

Hallo Peter,

kannst du mir deine sende routine schicken?

mfg

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.