Re: 2. Serielle Schnittstelle funktioniert nicht Kategorie: CC-Pro Unit & Appl.Board (von Jan - 18.02.2012 16:17) | ||
Als Antwort auf Re: 2. Serielle Schnittstelle funktioniert nicht von PeterS - 15.02.2012 12:54 | ||
| ||
> > > > > Hallo User, > > > > > > > > > > ich habe folgendes Problem bei der Datenübertragung zwischen zwei Pro Application Boards (ein Sender, > > > > > ein Empfänger): > > > > > Wenn ich beide Boards über die 1. Schnittstelle (Serport 0) verbinde, kommen die Daten an. > > > > > Wenn ich die 2. Schnittstelle (Serport 1) nutze, nicht. > > > > > Ich benutze J4 als Anschlu� für die 2.Schnittstelle, TxD Board 1 ist an RxD Board 2 angeschlossen und > > > > > umgekehrt. GND sind miteinander verbunden. An den Lötstellen von J4 gemessen besteht entsprechende > > > > > Verbindung. > > > > > Auf beiden Boards kann ich im Ruhezustand (ohne Verbindungskabel) zwischen TxD und GND ~9V messen. > > > > > Die Jumper für Port D2 und D3 stecken. > > > > > Das Kabel ist kürzer als 1m bei einer Baudrate von 19200. > > > > > Beim Anpassen der beiden Programme habe ich bei der Initialisierung und den Befehlen jeweils für > > > > > Serport die 0 durch eine 1 ersetzt. > > > > > > > > > > Wei� jemand Rat? > > > > > > > > > sprüh mal kontakt spray in die steckleiste des Prozessors.............. > > > > > > > > > Gru�, Jan > > > > > > schick doch mal n beispielprogramm, damit wir einen programmierfehler ausschlie�en können...... > > > > Hallo Hans, > > hier die beiden Programme. > > Wenn ich serport als 0 setze und die beiden Boards über die serielle Schnittstelle 1 verbinde, > > kommen die Daten einwandfrei an. Der Zustand der LEDs und die Anzeige sind identisch. > > Bei serport = 1 und Verbindung über die 2. serielle Schnittstelle nicht. > > Der Cursor im Display des 2. Boards blinkt dann nur als Unterstrich... > > > > Erstes Programm: > > > > 'Programm dient zur Probe für ein grö�eres Projekt, bei dem Daten zwischen > > 'mehreren Mega128 ausgetauscht werden sollen. > > 'Es sendet 4 Byte über die serielle Schnittstelle an Board 2 > > 'Byte 0 = Zustand LED 1 > > 'Byte 1 = Zustand LED 2 > > 'Byte 2 = zählt aufwärts > > 'Byte 3 = 1 > > > > Dim S(4) = {0,0,0,1} As Byte > > #define serport 1 > > > > Sub main() > > Port_DataDirBit(PORT_SW1,PORT_IN) > > Port_WriteBit(PORT_SW1,1) > > Port_DataDirBit(PORT_SW2,PORT_IN) > > Port_WriteBit(PORT_SW2,1) > > Port_DataDirBit(PORT_LED1,PORT_OUT) > > Port_WriteBit(PORT_LED1,PORT_OFF) > > Port_DataDirBit(PORT_LED2,PORT_OUT) > > Port_WriteBit(PORT_LED2,PORT_OFF) > > Serial_Init(serport,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD19200) > > LCD_Init() > > LCD_ClearLCD() > > LCD_CursorOff() > > > > Do While True > > S(0) = Port_ReadBit(PORT_SW1) > > S(1) = Port_ReadBit(PORT_SW2) > > S(2) = S(2) + S(3) > > LCD_Locate(1,1) > > LCD_WriteWord(S(0),3) 'Anzeige Wert von SW1 > > Port_WriteBit(PORT_LED1,S(0)) 'Kontrolle der Eingabe SW1 per LED > > LCD_Locate(2,1) > > LCD_WriteWord(S(1),3) > > Port_WriteBit(PORT_LED2,S(1)) > > LCD_Locate(1,6) > > LCD_WriteWord(S(2),3) > > LCD_Locate(2,6) > > LCD_WriteWord(S(3),3) > > Serial_Write(serport,S(0)) > > Serial_Write(serport,S(1)) > > Serial_Write(serport,S(2)) > > Serial_Write(serport,S(3)) > > End While > > > > End Sub > > > > Zweites Programm: > > > > 'Programm dient zur Probe für ein grö�eres Projekt, bei dem Daten zwischen > > 'mehreren Mega128 ausgetauscht werden sollen. > > 'Es empfängt 4 Byte über die serielle Schnittstelle von Board 1 > > 'Byte 0 = Zustand LED 1 Board 1 > > 'Byte 1 = Zustand LED 2 Board 1 > > 'Byte 2 = zeigt Byte 2 von Board 1 an > > 'Byte 3 = zeigt Byte 3 von Board 1 an > > > > Dim S(4) As Byte > > #define serport 1 > > > > Sub main() > > Port_DataDirBit(PORT_LED1,PORT_OUT) > > Port_WriteBit(PORT_LED1,PORT_OFF) > > Port_DataDirBit(PORT_LED2,PORT_OUT) > > Port_WriteBit(PORT_LED2,PORT_OFF) > > Serial_Init(serport,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD19200) > > LCD_Init() > > LCD_ClearLCD() > > LCD_CursorOff() > > > > Do While True > > S(0) = Serial_Read(serport) > > LCD_Locate(1,1) > > LCD_WriteWord(S(0),3) > > Port_WriteBit(PORT_LED1,S(0)) > > S(1) = Serial_Read(serport) > > LCD_Locate(2,1) > > LCD_WriteWord(S(1),3) > > Port_WriteBit(PORT_LED2,S(1)) > > S(2) = Serial_Read(serport) > > LCD_Locate(1,6) > > LCD_WriteWord(S(2),3) > > S(3) = Serial_Read(serport) > > LCD_Locate(2,6) > > LCD_WriteWord(S(3),3) > > End While > > > > End Sub > > > > Ich hoffe, Du oder jemand anderes findet den Fehler, warum der Datenaustusch nur über die 1.ser. > > Schnittstelle funktioniert. > > > > Gru�, Jan > > Hallo Jan, > > immer den einfachen Fall testen. Nimm doch das Demo Programm, das die serielle Eingabe > zurückschickt. Teste das mit einem Terminal auf dem PC und Schnittstelle 0. Danach im > Programm auf Schnittstelle 1 umstellen. Dann sieht man, ob das jeweile Board sauber > auf den USARTs funktioniert. Wenn das alles funktioniert hat, wei� man das Software > und Hardware jeweils ok sind. Danach sieht man weiter. > > Gruss Peter Danke für die Tipps! Nachdem ich wie von Peter angeregt die Schnittstellen einzeln ausprobiert habe und das Problem mit der 2. Schnittstelle weiter bestand, habe ich vor lauter "Verzweiflung" die Prozessoren abgezogen und wieder aufgesteckt. Jetzt läuft alles :) Hans hatte also am Anfang die richtige Vermutung. Jan | ||
Antwort schreiben Antworten: Re: 2. Serielle Schnittstelle funktioniert nicht (von Hans - 18.02.2012 16:38) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum