www.mikrocontroller.net

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


Autor: JacK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/s...

besagtes tutorial: 
http://www.sparkfun.com/datasheets/DevTools/SAM7/a...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: JacK (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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>

Autor: JacK (Gast)
Datum:

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

kannst du mir die noch geben?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
steht eigentlich alles in der AT91SAM7S256.h

die gibts bei Atmel in den Democodes...

Autor: JacK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: JacK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: JacK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

kannst du mir deine sende routine schicken?

mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.