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


von hero2992 (Gast)



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)

von spess53 (Gast)


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

von hero2992 (Gast)



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)

von spess53 (Gast)


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

von hero2992 (Gast)


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...

von spess53 (Gast)


Lesenswert?

Hi

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

MfG Spess

von hero2992 (Gast)


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

von spess53 (Gast)


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

von hero2992 (Gast)


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...

von Weingut P. (weinbauer)


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.

von hero2992 (Gast)


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

von hero2992 (Gast)


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?

von Gretsch (Gast)


Lesenswert?

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

gruss GREG

von hero2992 (Gast)


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.

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.