mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik U(S)ART zwischen Atmega644PA und Atmega168


Autor: Sebastian E. (lasometer01)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche momentan einen Atmega644PA und einen Atmega168 per UART zu 
verbinden.

beim Atmega168 soll, wenn Daten vom Atmega644PA gesendet werden ein 
Interrupt ausgelöst werden. Es soll dann etwas gemacht werden und direkt 
danach eine Antwort gesendet werden.

Da ich noch ein Anfänger bin habe ich mir zuerst diese beiden Programme 
geschrieben.

Code vom Atmega168 und 644 sind im Anhang


Es soll vom Atmega168 zum 644PA etwas gesendet werden. Darauf soll der 
644PA Antworten und auf diese Antwort(über den Interrupt) soll wieder 
geantwortet werden.

Der Code den ich beigefügt habe ist nicht komplett. Ich habe das zeug 
was nichts mit dem USART zu tun hat weggelassen (übersicht). Display und 
ein RFID Lesegerät (beide über SPI angeschlossen. zusätzlich zu den SPI 
Pins werden PB1,PB0, PC5 und PD7 verwendet(2x SS, D/C (data/command) und 
Reset ).

Ich gebe das Empfangene beim Atmega644PA über das Display aus. 
Theoretisch, denn sehen tue ich nichts. Ich habe  also unter dem 
USART_Recieve() vom 644PA eine Ausgabe auf den Bildschirm eingefügt . Da 
diese ebenfalls nicht zu sehen ist wird der MCU in der While-Schleife 
Feststecken, sprich es kommen keine Daten an bzw. es werden keine 
gesendet.

Angeschlossen habe ich es so:
644PA         168
PD0(TXD0) --> PD1(RXD)
PD1(RXD0) --> PD0(TXD)

Unter dem Oszi habe ich auf RXD und TXD durchgehend HIGH.
An was könnte das liegen?

Hoffentlich habe ich nichts einfaches übersehen...
Ich freue mich schon auf eure Antworten
Sebastian

: Bearbeitet durch User
Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian E. schrieb:
> 644.c

'Undefined reference to 'USART_Recieve()'?

So wird das nichts. Poste Code, der kompiliert und den Fehler zeigt.
> 168.c
sei();
vergessen. Es ist übrigens eine ganz schlechte Idee, ein _delay_ms(1000) 
in eine ISR zu schreiben. Damit blockierst du wirklich alles.

: Bearbeitet durch User
Autor: WR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn Du die zwei Rechner so verbindest funktionierts:

644P                   168
PD0  verbinden mit     PD1
PD1  verbinden mit     PD0

Gruss Werner

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WR schrieb:
> 644P                   168
> PD0  verbinden mit     PD1
> PD1  verbinden mit     PD0

Hat er doch:

Sebastian E. schrieb:
> Angeschlossen habe ich es so:
> 644PA         168
> PD0(TXD0) --> PD1(RXD)
> PD1(RXD0) --> PD0(TXD)

Allerdings ist mir noch aufgefallen, das du auf dem 168er den Sende IRQ 
freigibst, ohne eine ISR dafür zu haben.

Autor: Sebastian E. (lasometer01)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Sebastian E. schrieb:
>> 644.c
>
> 'Undefined reference to 'USART_Recieve()'?
>
> So wird das nichts. Poste Code, der kompiliert und den Fehler zeigt.
>> 168.c
>
> sei();
> 
> vergessen. Es ist übrigens eine ganz schlechte Idee, ein _delay_ms(1000)
> in eine ISR zu schreiben. Damit blockierst du wirklich alles.

Hier sind beide Projekte. Das delay mache ich noch weg.

Matthias S. schrieb:
> Allerdings ist mir noch aufgefallen, das du auf dem 168er den Sende IRQ
> freigibst, ohne eine ISR dafür zu haben.

Ich lösche das Bit für den Interrupt und probiere es noch einmal.

: Bearbeitet durch User
Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh nee, die ZIPs öffne ich jetzt nicht. Mach dir doch einfach mal eine 
Routine, bei der du einen MC gegen den PC antreten lässt - z.B. mit 
USB-> UART adapter und HTerm.
Dann machst du das auf dem anderen auch. Dann kannst du ohne Blindflug 
auch gleich den Interpreter testen, der auf die seriellen Kommandos 
antworten soll.

Autor: Sebastian E. (lasometer01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Oh nee, die ZIPs öffne ich jetzt nicht. Mach dir doch einfach mal eine
> Routine, bei der du einen MC gegen den PC antreten lässt - z.B. mit
> USB-> UART adapter und HTerm.
> Dann machst du das auf dem anderen auch. Dann kannst du ohne Blindflug
> auch gleich den Interpreter testen, der auf die seriellen Kommandos
> antworten soll.


Wenn ich im Besitz eines UART - USB oder UART - RS232 Adapters währe 
könnte ich es natürlich machen

Autor: Dietrich L. (dietrichl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian E. schrieb:
> Angeschlossen habe ich es so:
> 644PA         168
> PD0(TXD0) --> PD1(RXD)
> PD1(RXD0) --> PD0(TXD)

Nur zu Vollständigkeit: die GNDs hast Du auch verbunden?

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian E. schrieb:
> Wenn ich im Besitz eines UART - USB oder UART - RS232 Adapters währe
> könnte ich es natürlich machen

Son Dings gibts bei jedem PC Schrotter für unter 10 Euro.

Autor: Sebastian E. (lasometer01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dietrich L. schrieb:
> Sebastian E. schrieb:
>> Angeschlossen habe ich es so:
>> 644PA         168
>> PD0(TXD0) --> PD1(RXD)
>> PD1(RXD0) --> PD0(TXD)
>
> Nur zu Vollständigkeit: die GNDs hast Du auch verbunden?

Ja

Autor: Sebastian E. (lasometer01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Sebastian E. schrieb:
>> Wenn ich im Besitz eines UART - USB oder UART - RS232 Adapters währe
>> könnte ich es natürlich machen
>
> Son Dings gibts bei jedem PC Schrotter für unter 10 Euro.

ich bau mir schnell selbst einen. Max232 und 1µF Kondensatoren hab ich 
noch irgendwo.
Am Montag kauf ich gleich einen UART-USB Adapter

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.