Re: 2. Serielle Schnittstelle funktioniert nicht Kategorie: CC-Pro Unit & Appl.Board (von Hans - 18.02.2012 16:38) | ||
Als Antwort auf Re: 2. Serielle Schnittstelle funktioniert nicht von Jan - 18.02.2012 16:17 | ||
| ||
> > > > > > 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 Sprüh am besten doch noch etwas Kontakt spray in die Steck leiste..... | ||
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum