Forum: Mikrocontroller und Digitale Elektronik AVR und UART/USART


von @VR (Gast)


Lesenswert?

Hallo zusammen,

ich wollte zum ersten mal eine USART Kommunikation mit einem ATmega und 
einem BLE-Modul mit Atmel Studio realisieren. Mir ist aufgefallen, dass 
die Register wie z.B. UBRRH oder RXEN vom Editor nicht erkannt werden. 
Ich habe nachgeschaut und eine Library von Peter Fleury gefunden.

Ist das eine Standardlibrary vom ihm, welches man immer einsetzen darf 
oder gibt es da noch einen anderen Weg?

MfG

von heiner (Gast)


Lesenswert?

Kaum ein ATTiny hat USART.

von Theor (Gast)


Lesenswert?

Welcher Editor?

Meinst Du vielleicht eine IDE? Welche?

Aber selbst wenn, ist eine andere Library keine Lösung dafür das die IDE 
die Peripherie-Registerdefinitionen nicht kennt. Eine Library gibt ja 
keine Informationen für den Editor/IDE über Registerdefinitionen.

Das Problem muss gelöst werden, nicht die Symptome beseitigt.

von @VR (Gast)


Lesenswert?

Theor schrieb:
> ist eine andere Library keine Lösung dafür das die IDE
> die Peripherie-Registerdefinitionen nicht kennt.

Das ist ja das Problem. Ich benutze Atmel Studio 7. Die Register für die 
AD-Wandlung hat er gefunden. Aber nachdem ich die USART Kommunikation 
implementieren wollte, habe ich gemerkt, dass die zuständigen Register 
für UART und USART von der IDE nicht erkannt werden.

Theor schrieb:
> Das Problem muss gelöst werden, nicht die Symptome beseitigt.

Das denke ich auch...

von S. R. (svenska)


Lesenswert?

Steht irgendwo weiter oben im Quelltext ein "#include <avr/io.h>"?

von c-hater (Gast)


Lesenswert?

@VR schrieb:

> ich wollte zum ersten mal eine USART Kommunikation mit einem ATmega und
> einem BLE-Modul mit Atmel Studio realisieren. Mir ist aufgefallen, dass
> die Register wie z.B. UBRRH oder RXEN vom Editor nicht erkannt werden.

Erstens: RXEN ist kein Register, sondern bestenfalls ein Bit in einem 
Register.

Zweitens: der Editor kann Register genauso wie Registerbits nur dann 
"erkennen" wenn die Datei included wird, die ihm diese Sachen vertellt. 
Woher soll er es denn sonst wissen? Darüber solltest du mal nachdenken!

Drittens: es gibt Zieldevices, die garnicht über eine USART verfügen und 
es gibt Zieldevices, die über mehrere verfügen...

von @VR (Gast)


Lesenswert?

S. R. schrieb:
> Steht irgendwo weiter oben im Quelltext ein "#include <avr/io.h>"?

Ja, es steht oben. Es ist eingebunden.

von Theor (Gast)


Lesenswert?

@VR schrieb:
> Theor schrieb:
>> ist eine andere Library keine Lösung dafür das die IDE
>> die Peripherie-Registerdefinitionen nicht kennt.
>
> Das ist ja das Problem.
Was meinst Du damit? Das eine Library, der IDE die Register-Definitionen 
bekannt machen sollten, es aber nicht tun? Wie kommst Du darauf? Eine 
Library ist einfach nur Code, der noch nicht reloziert wurde. Da stecken 
keine Register-Definitionen drin.

> Ich benutze Atmel Studio 7. Die Register für die
> AD-Wandlung hat er gefunden. Aber nachdem ich die USART Kommunikation
> implementieren wollte, habe ich gemerkt, dass die zuständigen Register
> für UART und USART von der IDE nicht erkannt werden.
>
> Theor schrieb:
>> Das Problem muss gelöst werden, nicht die Symptome beseitigt.
>
> Das denke ich auch...

Das deutet eher darauf hin, dass Du im Studio nicht den korrekten Typ 
des ATMega gewählt hast. Überprüf das mal.

von @VR (Gast)


Lesenswert?

c-hater schrieb:
> Erstens: RXEN ist kein Register, sondern bestenfalls ein Bit in einem
> Register.

Sorry, da hast du recht.

c-hater schrieb:
> Drittens: es gibt Zieldevices, die garnicht über eine USART verfügen und
> es gibt Zieldevices, die über mehrere verfügen...

Mein ATmega32u4 verfügt über USART.

c-hater schrieb:
> Zweitens: der Editor kann Register genauso wie Registerbits nur dann
> "erkennen" wenn die Datei included wird, die ihm diese Sachen vertellt.
> Woher soll er es denn sonst wissen? Darüber solltest du mal nachdenken!

Das ist mir schon klar. Nur welche Headerfile soll das sein? Bei der 
Recherche bin ich halt auf die "uart.h" von Peter Fleury gestoßen.

von Theor (Gast)


Lesenswert?

Das hat mit dem header file überhaupt nichts zu tun.

von Theor (Gast)


Lesenswert?

Das header file wird nur vom Compiler beachtet. Der IDE ist das völlig 
schnurz.

Ich kenne die tatsächliche Strukrut von Studio 7 nicht. Aber bis Studio 
4, gab es ein Verzeichnis mit XML-Dateien, in denen die 
Registerstrukturen drin stehen. Welche XML-Datei die IDE tatsächlich 
berücksichtigt hängt davon ab, was in den Projekteinstellungen der IDE 
steht. Nicht davon, welche include Dateien Du einfügst.

Also: Wähle die richtige CPU in den Projekteinstellungen aus.

von Einer K. (Gast)


Lesenswert?

Theor schrieb:
> Aber bis Studio
> 4, gab es ein Verzeichnis mit XML-Dateien, in denen die
> Registerstrukturen drin stehen.

Das ist im Grunde immer noch so!
Mit den Abweichungen:
1. Andere Dateiendung, nicht mehr *.xml, ist aber noch XML drin
2. Es sind ein paar dazugekommen
3. Die Daten für den Simulator sind nicht mehr drin

von Stefan E. (sternst)


Lesenswert?

@VR schrieb:
> Mein ATmega32u4 verfügt über USART.

Und das Register heißt dort nicht UBRRH, sondern UBRR1H.
Und das Bit nicht RXEN, sondern RXEN1.

von @VR (Gast)


Lesenswert?

Stefan E. schrieb:
> @VR schrieb:
>> Mein ATmega32u4 verfügt über USART.
>
> Und das Register heißt dort nicht UBRRH, sondern UBRR1H.
> Und das Bit nicht RXEN, sondern RXEN1.

Ok. Daran lag es. Jetzt klappt es. Aber im C Beispiel auf Seite 194 des 
Controller Datenblattes steht das nicht.

Danke :)

von Thomas E. (thomase)


Lesenswert?

@VR schrieb:
> Aber im C Beispiel auf Seite 194 des
> Controller Datenblattes steht das nicht.

Doch das steht da. Die 'n' sind dabei, passend zum jeweiligen UART, im 
Geiste durch 0, 1, 2 etc. zu ersetzen.

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.