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)
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
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)
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
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...
Hi Entschuldige. Das ist anders. Das RXC-Bit wird durch Lesen von UDR zurückgesetzt. MfG Spess
es muss doch eine Möglichkeit geben den Interrupt zu verhindern... denn wenn der Interrupt ja nicht erlaubt wird, wird er nachgeholt... gruss Hero
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
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...
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.
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
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?
hallo ist das FE bit gesetzt wenn nacher ne null kommt?? liege ich da richtig? gruss GREG
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.