Forum: Mikrocontroller und Digitale Elektronik UART AT128 asm


von Bruno M. (brumay)


Lesenswert?

Hallo,

ich versuche seit geraumer Zeit eine UART Kommunikation mit einem AT128 
herzustellen. Leider ohne Erfolg. Um Fehler auszuschließen betreibe ich 
parallel einen AT16 völlig ohne Probleme. Ich teste mit einem simplen 
Code, der gleich ist für beide ATs, nur eben die Befehle entsprechend 
angepasst.

Klar ist, daß beim AT128 MISO und MOSI auf den Ports von RX und TX 
liegen. Wenn ich mit SPI programmiere empfange ich daher auch wirre 
Signale auf dem UART. Normale Signale kann ich aber nicht übertragen. 
Hat das etwas mit SPIEN zu tun, oder gibt es eine andere Erklärung?

von spess53 (Gast)


Lesenswert?

Hi

>ich versuche seit geraumer Zeit eine UART Kommunikation mit einem AT128

Was ist ein AT128?

MfG Spess

von Bruno M. (brumay)


Lesenswert?

> Was ist ein AT128?

ein ATmega128. Sorry, ich dachte das ist klar. AT16 ist dann natürlich 
ATmega16

von S. Landolt (Gast)


Lesenswert?

Das ist jetzt aber nicht wieder dieser "ATmega103 compatibility mode", 
oder?

von spess53 (Gast)


Lesenswert?

Hi

>YKlar ist, daß beim AT128 MISO und MOSI auf den Ports von RX und TX
>liegen.

Dann benutze doch einfach UASRT1.

>Das ist jetzt aber nicht wieder dieser "ATmega103 compatibility mode",
>oder?

Ja, ist er.

MfG Spess

von Bruno M. (brumay)


Lesenswert?

> Das ist jetzt aber nicht wieder dieser "ATmega103 compatibility mode",
> oder?

Nein, der ist ausgeschaltet

von S. Landolt (Gast)


Lesenswert?

> Nein, der ist ausgeschaltet
Okay, war eigentlich klar, bei jemandem, der seit zehn Jahren dabei ist.

von S. Landolt (Gast)


Lesenswert?

> Ich teste mit einem simplen Code, der gleich ist für beide ATs
Wie sieht der aus?

von Bruno M. (brumay)


Angehängte Dateien:

Lesenswert?

> Dann benutze doch einfach UASRT1.

Das war natürlich ein logischer Tip, auf den ich auch selbst hätte 
kommen können. Das Problem ist nur, daß ich mit einer fertigen Platine 
arbeite, bei der nur RXD0 und TXD0 rausgezogen sind. Allerdings habe ich 
inzwischen mit einer Testschaltung einen zweiten ATmega getestet und 
leider auch mit USART1 keine Kommunikation. Damit ist aber zumindest 
ausgeschlossen, daß es mit SPIEN zusammenhängt.

> Wie sieht der aus?

anliegend der Code.

von S. Landolt (Gast)


Lesenswert?

Dies ist mir völlig unklar:
[avr]
  ldi   temp, high(BAUD_REAL)
  sts  UBRR0H, temp
  ldi   temp, low(BAUD_REAL)
  sts  UBRR0L, temp
[/avrasm]

von S. Landolt (Gast)


Lesenswert?

PS:
Das kann doch aber auf dem ATmega16 auch nicht laufen.

von S. Landolt (Gast)


Lesenswert?

PPS:
All die sts und lds bei USART0 sind doch auch falsch, ausgenommen 
UCSR0C.
  Ich habe leider keinen ATmega128 zum Ausprobieren.

von Bruno M. (brumay)


Lesenswert?

> Dies ist mir völlig unklar:

Sorry, das war mal ein Test zwischendurch. Muß natürlich UBRR_VAL statt 
BAUD_REAL heißen.

von Bruno M. (brumay)


Lesenswert?

> All die sts und lds bei USART0 sind doch auch falsch, ausgenommen
> UCSR0C

Das war der richtige Hinweis. Das kommt davon, wenn man sich die 
Unterlagen nicht mehr richtig anschaut.
Ich habe mir die Liste nochmals angesehen und festgestellt, daß auch für 
UBRR0H das sts stimmt. Da das der erste Eintrag ist, habe ich vermutlich 
gar nicht mehr weiter gesehen und alles auf sts gesetzt. Der Debugger 
schluckt das ja ohne zu meckern.

Herzlichen Dank!

von S. Landolt (Gast)


Lesenswert?

Also ich selbst schreibe, wenn ich mir nicht ganz sicher bin, erstmal 
out bzw. in, und wenn gemeckert wird, ersetze ich durch sts bzw. 
lds.
  Eine andere Möglichkeit ist die Verwendung zweier Makros wie in
https://www.mikrocontroller.net/articles/AVR_Assembler_Makros
unter I/O beschrieben.

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.