www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RXC Interrupt Problem ( Bascom)


Autor: hero2992 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Forenbesucher...

Ich habe Folgendes Problem:

Ich habe ein Programm geschrieben welches einen Seriellen Code Auswertet 
und diesen dann verarbeitet...(Code werden verglichen) sollte der Code 
nicht im Programm existieren, erscheint der Schriftzug " ERROR" auf 
einer 2x16 LCD Anzeige... soweit geht's...

nun ist mir aber aufgefallen das wenn ich meiner Anwendung Spannung 
gebe, einmal diese Error Meldung auftritt, dieses möchte ich jedoch 
vermeiden...

im Anhang befindet sich mein Programm welches für einen ATMega32 
ausgelegt ist, ich muss bemerken das ich nur kein Fachmann im Bereich 
µC-Programmation bin mich jedoch sehr bemühe...

Ich habe bereits mehre dinge versucht um das Problem in den Griff zu 
bekommen...

a) Zählen der anzahl URXC Interrupts und nur wenn die Zähler-variable 
grösser als 1 ist das Anzeigen erlauben, somit wird das erste Interrupt 
zwar zugelassen jedoch nicht auf der LCD Anzeige verwendet

b) Eine Initialisier zeit einfügen (bis der Interrupt kommt, das 
Interrupt bit dann löschen und Interrupt freigeben...

c) ...

Ich bitte um Hilfe...

P.S.: die datei Interrupt_Prog....html ist die Test Datei in der ich 
meine Versuche markiert und Kommentiert habe

die Datei Menue_INT....bas ist das Komplette programm das ich bisher 
geschrieben habe.. (ist noch nicht fertig)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Was soll denn der Blödsinn mit den HTML-Dateien.

>Ich habe bereits mehre dinge versucht um das Problem in den Griff zu
>bekommen...

Oder einfach vor der allgemeinen Interruptfreigabe RXC löschen.

MfG Spess

Autor: hero2992 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
oh sorry ich dachte das sieht anders aus in einem HTML Format... 
sorry...

ja ich habe das mit dem RXC löschen auch schon versucht, jedoch gehts 
nicht ... ich habe mir ds Register im Datenblatt gesucht dazu steht 
folgendes...

UCSRA Register:
• Bit 7 – RXC: USART Receive Complete
This flag bit is set when there are unread data in the receive buffer 
and cleared when the receive
buffer is empty (i.e., does not contain any unread data). If the 
receiver is disabled, the receive
buffer will be flushed and consequently the RXC bit will become zero. 
The RXC Flag can be
used to generate a Receive Complete interrupt (see description of the 
RXCIE bit).

Und dann noch dies hier:

UCSRB Register:
• Bit 7 – RXCIE: RX Complete Interrupt Enable
Writing this bit to one enables interrupt on the RXC Flag. A USART 
Receive Complete Interrupt
will be generated only if the RXCIE bit is written to one, the Global 
Interrupt Flag in SREG is written
to one and the RXC bit in UCSRA is set.

(hoffe das das .Bas Format dann richtig ist)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>ja ich habe das mit dem RXC löschen auch schon versucht, jedoch gehts
>nicht ... ich habe mir ds Register im Datenblatt gesucht dazu steht
>folgendes...

Wie?. Im allgemeinen werden bei den AVRs diese Bits durch schreiben 
einer 1 gelöscht.

MfG Spess

Autor: hero2992 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm...das währe Natürlich ein riesen Fehler...

aber wenn ich das bit auf der LCD Anzeige anzeige, steht eine 1 wenn der 
Interrupt betätigt wird und eine 0 wenn nichts passiert... daher ging 
ich davon aus , dass eine 0 gelöscht bedeutet...

und welches der beiden Bits muss ich verwenden? mein English ist nicht 
so gut...

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Entschuldige. Das ist anders. Das RXC-Bit wird durch Lesen von UDR 
zurückgesetzt.

MfG Spess

Autor: hero2992 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es muss doch eine Möglichkeit geben den Interrupt zu verhindern... denn 
wenn der Interrupt ja nicht erlaubt wird, wird er nachgeholt...

gruss Hero

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>es muss doch eine Möglichkeit geben den Interrupt zu verhindern... denn
>wenn der Interrupt ja nicht erlaubt wird, wird er nachgeholt...

Dann prüfe vor der Interruptfreigabe das RXC-Bit. Wenn es gesetzt ist, 
UDR lesen.

MfG Spess

Autor: hero2992 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie liest man denn die UDR?

(weiss hört sich komig an) aber ich weiss es nicht... und das soll ja 
nur beim ersten mal passieren...

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, das udr liest Du schon über den Befehl

Zahl = Inkey()


indirekt aus.
Im Prinzip könntste da auch

Zahl=UDR einsetzen ... wäre auch von der Laufzeit her
etwas schneller in der Verarbeitung soweit ich weiß.

Wenn beim Spannung anlegen der Int URXC ausgelöst wird
liegt das vermutlich daran, das bei Spannung anlegen die Pegel
am RX noch nicht stimmen und daher n Zeichen als empfangen
gemeldet wird.
Allerdings stimmt da zu 99% das Framing nicht. Sprich du
könntest vermutlich über das Framing Error (FE) Flag

UCSRA.4 abfangen, sprich ist dieses 1 dann wars kein Zeichen
das empfangen wurde sondern murks.

Autor: hero2992 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wie programmiere ich das denn... ?

und mit murks bezeichnest du einen Flankenwechsel der durch das 
einschalten entsteht?...

müsste ich dann das UCSRA.4 bit 0 setzen bevor ich des Interrupt 
erlaube?

gruss Hero

Autor: hero2992 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach ja... der Serielle Code wird von einem RFID-Leser gesendet... doch 
der "erste" Interrupt wird erst so +- 2-3 sec nach dem Einschalten 
gesetzt...kann das dann dennoch an einem unerwünschten Pegelwechsel wie 
der von weinbauer berschrieben ist liegen?

Autor: Gretsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo ist das FE bit gesetzt wenn nacher ne null kommt?? liege ich da 
richtig?

gruss GREG

Autor: hero2992 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das steht im Datenblatt...
Hilft mir jedoch auch nicht wirklich weiter... bitte darum nochmals um 
Hilfe

• Bit 4 – FE: Frame Error
This bit is set if the next character in the receive buffer had a Frame 
Error when received. i.e.,
when the first stop bit of the next character in the receive buffer is 
zero. This bit is valid until the
receive buffer (UDR) is read. The FE bit is zero when the stop bit of 
received data is one. Always
set this bit to zero when writing to UCSRA.

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.