RXC Interrupt Problem ( Bascom)

Gast #1654209
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)
Gast #1654217
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
Gast #1654226
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)
Gast #1654237
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
Gast #1654244
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...
Gast #1654296
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
#1654321
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.
Gast #1654329
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
Gast #1654338
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?
Gast #1654469
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren