Getting einem Datenrahmen in PIC18F4550

B

brucelee2

Guest
Hallo zusammen, arbeiten Im auf ein persönliches Projekt für mein Zimmer. Ich habe ein HMI (Human Machine Interface), es ist ein 800 * 480 Bildschirm. Es funktioniert von verschiedenen Befehle, die Sie zu (I-Kommunikationsprotokoll und eine DATAframe) senden mit standardmäßigen seriellen Anschluss. Nun: Der Bildschirm sendet ein Daten-Frame an den Mikrocontroller zu einem bestimmten Baudrate. Dieser Datenrahmen sieht etwa so aus: 0xAA (start) 0x73 (. Touchscreen coord) (. 16-Bit-X-Koordinaten zum Runterladen) (16bit Y-Koordinaten zum Runterladen) 0x33 0x3C 0xC3 So gibt es eine Küche Anzahl der Bits bewegen, wenn ich den Touchscreen zu drücken. THE PIC hat nur eine 8 BIT IN DER UART MODUL I GUESS REGISTER. SO WIE KANN ICH DIESE viele Bits in eine Variable? (Beibehaltung BAUDRATEN ECT ...) Vielleicht unterbricht? Im mit MIKROELECTRONIKA mikroC Compiler. Es gibt eine einfache UART-Bibliothek etwas scheint zu 8 Bits werden zu einem Zeitpunkt ...... Freuen Sie sich auf eine Nachricht von Ihnen guys! Cheers, Bruce: D
 
Hallo, Wie die Pics USART Module mit 8 oder 9 Bit nur die x / y sind feste Koordinaten werden als 16 Datenbits gesendet dann die einzige Möglichkeit sehe ich es getan hätte werden können, ist Ihre eigene Software serielle Verbindung zu schreiben. Wenn Sie nach Bit Banging Sie einige Beispiele, bei denen Späne aus USART Ports laufen finden, oder einfach keine USARTs, so Software USARTs geschrieben haben, um die Lücke zu füllen. Sie werden wahrscheinlich alle in 8-Bit-Modus, aber sicher, es wird Ihnen, wie man es acceprt 16 Bit zu führen.
 
Ok danke für den Tipp. Ich sehe Mikroelectronica ist mikroC hat eine Software-UART-Bibliothek, aber wieder nur 8 Bit handeling :-( .. Ich denke, krank sind einige''bit banging'soon versuchen: S. Denken, sein Gehen, ziemlich hart sein für große Daten-Frames .. .. wenn jemand hat einige schöne Beispiel (e) in C bitte kann ich eine Kopie.
 
Hat jemand wissen, wie man etwas hämmern Ansatz? Sollte es so sein somthing: 1. Generieren externer Interrupt, wenn Start-Bit auftritt. 2. Starten einer Zeit an Pin auf 1 / 3 * 1/baudrate dh Probe. 3-mal pro Bit. 3.Dissable der Interrupt während dieser Zeit. 4. Verschiebung der Bits in Variablen 5.Überprüfen für Stoppbit 6.disable Zeit und wieder aktivieren externen Interrupt Wie klingt das?
 
Es kann sein, dass das Gerät nicht ein 16-Bit-Wert, sondern zwei aufeinanderfolgende 8-Bit-Werten, soll in 16-Bit verkettet werden zurückkehrt.
 
seine sendet es in 0x? 8-Bit-Hex-Werte, aber ein großer Strom auf einmal in einem angegebenen Baudrate. so kann ich nicht verarbeiten diese mit den pics UART-Modul, sondern müssen eine Software, es zu tun inplement. Bitbanging. Aber wie bitbanging tun ist, was ich herausfinden müssen. Ein Prozess-Diagramm proceedures / events helfen würde, i guess
 
Also das HMI verwendet eine "serielle Verbindung", aber nicht ein serielles Standard-Protokoll, das heißt, kein Start-Bit, Stop-Bit-Rahmung. Wie wärs mit einem part-/model-number?
 
Es nutzt 8N1, so 8data Bits, Stop-und Start-Bit, keine Parität. Ich schätze, wo im verwirrt ist, dass es eine große Daten-Frame zu senden. Aber wird die MCU stoppen HMI Senden das nächste Byte, wenn das Register wurde noch nicht von meinem Quellcode zu lesen? Oder wird die HMI weiter .... : |
 
Oder wird die HMI weiter ....
Ja, es sei denn, beide Peers können Hardware-Handshake verwenden. A uP sollte keine Probleme haben, zu einem Ausbruch von Daten in einen Puffer einlesen und verarbeiten sie später oder gar zu verarbeiten on the fly - mit geeigneter Programmierung. Empfangen der Daten in einem UART-Interrupt ist die übliche Methode.
 
Es gibt eine Hand zu schütteln Befehl an die HMI, aber dies ist nicht Hardware. Senden 0xAA 0x00 0x33 0xC3 0x3C; wo die''0x00''ist die Hand zu schütteln Teil der Rest ist die Rahmenstruktur. Es gibt nur 3 Verbindungen zu den HMI -> Rx Tx Gnd. Naybe mit Unterbrechungen routunes auf dem Tx Pin funktioniert!
 
Pseudo-Code:
Code:
 Receive-Interrupt: wenn empfangene Zeichen ist 'AA' Store in Puffer Buffer_pointer + + anderes Buffer_pointer = 0 Message_received = 0, wenn Buffer_pointer == length_of_message + 1 auszuschalten Empfänger Message_received = 1 end unterbrechen
.. . die Antwort Teil scheint einfach genug, um nicht unterbricht erfordern, aber es wäre einfach zu tun, wenn der Empfänger herausgefunden.
 

Welcome to EDABoard.com

Sponsor

Back
Top