Forum: Mikrocontroller und Digitale Elektronik Interrupt Benutzung


von biggi (Gast)


Lesenswert?

Hallo zusammen,
bin ganz neu in diesem bereich! Möchte uart kommunikation durch
interrupt kontrollieren! könnt Ihr mir bitte ein paar Ideen geben?!
Danke

von mr.chip (Gast)


Lesenswert?

Hallo

Nichts gegen Anfänger und deren Fragen, aber das ist jetzt wieder genau
so ein Beispiel, über das man sich im Forum so aufregt. Einerseits weiss
niemand, was du jetzt willst und andererseits sieht es so ein bisschen
nach "Ich habe keine Ahnung, präsentiert mir mal eine Lösung".

Wenn du ein Problem hast, auch ein simples, dann poste es ruhig. Aber
bitte formuliere klar, WAS das Problem ist und WAS du jetzt haben
möchtest.

Gruss

Michael

von johnny.m (Gast)


Lesenswert?

Und vorher das Tutorial lesen. Da stehen nämlich eigentlich alle
benötigten Infos drin!

von Christoph Kessler (Gast)


Lesenswert?

Worum gehts denn genauer:
RS232-Verbindung Mikrocontroller - PC ?
welcher Controller, AVR oder PIC?
woher kommen die Daten, wohin sollen sie gehen, nur eine
Datenrichtung?
wie schnell muß es sein, Baudrate?

von Hannes L. (hannes)


Lesenswert?

Ein Weg dahin wäre:

Das Datenblatt des Controllers nehmen und nachschaun, welche Register
für UART zur Verfügung stehen und was man da reinschreiben muss, damit
UART aktiviert und initialisiert wird.
Dann nachschaun, welche Interrupts es gibt und wie sie aufgerufen
werden. In ASM wäre das über die Interrupt-Sprungtabelle, mit
Hochsprachen kenne ich mich nicht aus.
Dann (in ASM) den jeweiligen Int aktivieren (USRT-Steuer-Register) und
Interrupts global einschalten.
Bei UART über Interrupt sollte man sich auch noch Ringbuffer für RX und
TX im SRAM anlegen, auf die das Hauptprogramm dann zugreifen kann. Somit
kann UART über Interrupts völlig im Hintergrund laufen, während das
Hauptprogramm Daten in den TX-Ringbuffer schiebt, wenn sie anfallen und
in regelmäßigen Abständen den RX-Ringbuffer ausliest, bis er leer ist.

Ich hoffe ich konnte dir helfen, auch wenn du nicht genannt hast, in
welcher Programmiersprache auf welchem Mikrocontroller du das
realisieren willst.

...

von biggi (Gast)


Lesenswert?

ALso, ich programmiere einen ATmega32 mit C_Sprache, die Daten sollen in
beide Richtungen laufen(senden und empfangen)! Die Daten sollen dann von
Atmega32 gesendet werden!
Die uart initialisierung....habe ich schon nur das Prinzip mit dem
Interrupt kapiere ich noch nicht soooo ganz: wann soll es ausgelöst
werden.....

von Hannes L. (hannes)


Lesenswert?

Ein Interrupt wird von einem "externen Ereignis" ausgelöst. Im Falle
von UART stehen 3 Interrupts bereit, siehe Datenblatt Mega32 Tabelle 18
auf Seite 42.

14 $01A USART, RXC USART, Rx Complete
15 $01C USART, UDRE USART Data Register Empty
16 $01E USART, TXC USART, Tx Complete

Die genaue Erklärung findest du auf Seite 156 (Transmitter Flags and
Interrupts) für das Senden und auf Seite 150 (Receive Compete Flag and
Interrupt) für das Empfangen.

Die Interrupts sagen dir, dass ein Zeichen angekommen ist (RXC) und (in
den RX-Ringbuffer) gesichert werden muss bzw. dass UDR beim Senden leer
ist (UDRE) und ein weiteres Zeichen (aus dem TX-Ringbuffer)
nachgeschoben werden darf. TXC sagt dir, dass alle Bits gesendet wurden
und UART-TX deaktiviert werden kann, falls keine weiteren Daten zum
Senden anstehen.

...

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.