Hallo Habe grad ein kleines Problem mit einer UART Schnittstelle, habe ein IC das ich über einer UART Schnittstelle mit einem PIC16F887 verbunden habe. Hab die Schnittstelle des PICs wie unten gezeigt initialisiert. // UART Bus initialiaieren TRISC=TRISC|0b11000000; TXSTA=0b01100000; RCSTA=0b11011000; SPBRG=15; // Interups freigeben RCIE=1; PEIE=1; GIE=1; Mein Mikrocontroller hat einen 10MHz Takt und Signal ist 8.Bit + Parity-Bit Nun mein Problem, mit dem Oszi kann ich sehen das IC wie Mikrocontroller senden wenn sie sollen, jedoch empfängt keiner von beiden ein Signal. Hab gedacht das es mit der Baudrate zusammenhängen muss, jedoch der wert des SPBRG sollte für 9600Baud stimmen. Hat einer eine Idee was das Problem sein könnte? P.S. TX-RX sind richtig. Gruss mike
>.. jedoch der wert des SPBRG sollte für 9600Baud stimmen
Ich mag jetzt nicht im datenblatt nachschauen. Zu irgendeinem Zeitpunk
wird man das auch nachmessen wollen. Also sende repetitiv ein byte, zB
0x55 oder so und mess mit dem Scope nach wie lange nun ein byte ist,
resp welche Baudrate genau laeuft.
Hallo Pico Oschi Ja das wollte ich schon lang machen, nur ist leider mein oszi nicht grad das neuste und ich hab kein speicher drin. Aber die Baudrate habe ich aus dem Datenblatt berechnet, und bei sprut ist sie auch zu finden. Sonst noch ne idee was das problem sein könnte? Gruss Mike
>Mein Mikrocontroller hat einen 10MHz Takt und Signal ist 8.Bit + >Parity-Bit Parity is not supported by the hardware, but can be implemented in software and stored as the ninth Bist du sicher das du das Parity Bit brauchst?
hallo holger Ja ich benötige leider ein parity Bit. Ich kann das Parity bit im TX Statusregister setzen das ist kein Problem. Wenn ich aber meinen Controller Debugge und im Inerrupt für den Recive Buffer einen Breakpoint setze, erreiche ich diesen jedoch auch nie. Also ist egal ob der Mikrocontroller oder das IC sendet, es funtioniert in beide Richtungen nicht. Gruss Mike
Hallo Holger Die PINs 6 & 7 von PortC müssen beide als eingang gesetzt werden, der Port schaltet bei freigeben des TXEN aus dem TX Statusregister um. Ich kann ein Signal am ausgang messen wenn ich eins Sende, nur kann ich mit mein altes Oszi keinen Speicher und ich kann die länge des Signals nicht genau bestimmen. Gruss mike
>Die PINs 6 & 7 von PortC müssen beide als eingang gesetzt werden, der >Port schaltet bei freigeben des TXEN aus dem TX Statusregister um. Ja, stimmt. Sonst könntest du ja auch nicht senden;) Was ist denn mit dem Configuration Word? Läuft dein uC auch wirklich mit 10MHz? Nicht das der auf INTOSC steht.
>Wenn ich aber meinen >Controller Debugge und im Inerrupt für den Recive Buffer einen >Breakpoint setze, erreiche ich diesen jedoch auch nie. Und das ist schon extrem merkwürdig. Selbst bei falscher Baudrate müsste er da irgendwann reinspringen.
Nein läuft auf dem extrnen Quarz. Aber das hab ich mir auch schon gedacht, leider scheint der Quarz in Ordnung zu sein, er bringt schöne 10MHz.
Hallo Ich bins noch mal So hab jetzt mit nem Digitalen Oszi das Telegramm Analysiert. Die Telegramme von IC und Mikrocontroller scheinen beide OK zu sein, und die Bitübertragungszeit ist auch gleich, also sind die Baudraten in Ordnung. Hat irgendwer noch ne Idee? Ich begreifs nicht
Mike schrieb: > Ja ich benötige leider ein parity Bit. Odd oder Even parity ? Wenn die parity falsch errechnet wird, weigern sich die Teilnehmer, das Zeichen zu akzeptieren.
Hallo Mattias Sch. Der IC benötigt ein ODD Parity. Jedoch sendet auch der IC wenn ein event eintrifft ein Telegramm, was er auch macht. Der Mikrocontroller empfängt dieses Telegramm nur leider auch nicht. Habs noch mit Polling versucht, weil ih dachte das vieleicht was mit dem Interupt nicht stimmt. nur da bleibt das RC Register auch leer. Bin dran eine Testschaltung aufzubauen damit ich das IC und den Mikrocontroller von dieser ansteuern kann. Hat noch einer eine andere Idee? Sind leidr alles SMD bauteile und nicht soo gut zum Pins auslöten. Hat vielecht einer die Rettende Idee? Gruss Mike
Hallo zusammen ich bins noch mal der IC funktioniert hab in getestet, was nun leider immer noch nicht funktioniert ist der mikrocontroller. um sicher zu gehen das dieserr nicht defekt ist hab ich einen neuen gleichen Mikrocontroller in einem Experimentierboard programmiert und gedebbugt. dieser funktioniert auch nicht. was mir aufgefallen ist, das die Controller nach einem neustart sobalt das RC Interupt freigegeben wird in die Interrupt routine springt. Dies macht er auch wenn ich das Flag vor dem einschalten der Interrupts auf null setze. Im moment Compiliere ich nur meine Initialisierung der UART schnittstelle um mögliche andere fehler ausschliessen zu können. diese ist hier nochmals angehängt. // UART Bus initialiaieren TRISC=0b11000000; TXSTA=0b01100000; RCSTA=0b11010000; SPBRG=15; // Interups freigeben RCIE=1; PEIE=1; GIE=1; Ich kriegs nicht hin, wäre sehr froh um hilfe. Gruss Mike
Mike schrieb: > Hallo zusammen > ich bins noch mal > der IC funktioniert hab in getestet, was nun leider immer noch nicht > funktioniert ist der mikrocontroller. tu dir doch mal selbst einen Gefallen und eliminier eiene Unbekannte. Anstatt des IC, von dem du nicht weißt ob und wenn ja was er empfängt, häng doch erst mal deinen PC (per MAX232 Pegelwandler, wenn du den noch nicht hast) an den µC drann und lass dir dort von einem Terminalprogramm anzeigen, was der µC eigentlich schickt. Und erst wenn das mit dem übereinstimmt, was du im µC wegschickst, und du anhand der IC-Doke verifiziert hast, dass der IC damit eigentlich klar kommen müsste, dann hängst du den IC wieder drann. Du musst Wege finden, wie du aus dem 'Stochern im Nebel' rauskommst! Dem IC kannst du nicht auf die Finger schauen, aber mit einem Terminal kannst du sehen, was vom µC kommt, ob die Baudrate richtig ist etc. Du musst Wege finden, wie du das, was du nicht sehen kannst, sichtbar machst. Dein IC wird dir nicht anzeigen, was auf der Leitung Sache ist. Also musst du dir überlegen, wie du das sichtbar machen kannst.
Hallo Karl Heinz Buchegger Natürlich habe ich den IC über einen MAX3232 mit dem com terminal vom PC verbunden um dies zu testen. Sonst könnte ich ja nicht bestimmen ob dieser richtig sendet und empfängt oder nicht wenn der Prozessor nicht funkt. hab nur gemeint, das der Mikrocontroller nicht funkt und mir da aufgefallen ist das dieser immer nachnem neustart in die interrupt routine springt. gruss mike
mike schrieb: > Hallo Karl Heinz Buchegger > Natürlich habe ich den IC über einen MAX3232 mit dem com terminal vom PC > verbunden um dies zu testen. Nicht den IC! Den µC! Deinen PIC hängst du erst mal an den PC und siehst nach, was dein Programm raussendet, wenn es überhaupt etwas sendet. Das der IC vom Hersteller ein funktionierendes UART mitbekommen hat, glaub ich unbesehen. Aber ob deine PIC Konfiguration richtig ist, ist eine ganz andere Sache. Und die Idee mit dem defekten PIC: Darauf würd ich erst mal nicht setzen. Die Erfahrung zeigt, dass zu mehr als 98% das Problem immer vor dem Bildschirm sitzt. Die Wahrscheinlichkeit sagt ganz einfach: Es ist ein Fehler in deinem Programm und/oder Beschaltung.
Hallo Karl Heinz Buchegger Danke für deine Antwort. Hab nun das Problem gefunden, und diesmal lag der fehler trotzdem in den von dir genannten 2%. Der IC hat eine funktionierende UART schnittstelle die Hardwaremässig eingestellt werden muss. er gibt auf bestimmte anfragen die ich im sende antwort. Und dies macht er. Nun habe ich trotzdem mal den uC ersetzt weil dieser zwar daten sendete (auf das com Terminal) aber wenn ich im vom com Terminal was gesendet hab blieb das RCREG Register des PIC leer und auch das Flag wurde nicht gesetzt (nur am anfang nach dem einschalten). Nun hab ich den Pic ersetzt und mit dem selben ungeänderten Programm geladen, und siehe da alles funktioniert. Aber Karl Heinz Buchegger hast natürlich recht, war das so ziemlich das erste mal das der fehler in der Hardware lag. Besten dank für eure Hilfestellungen und Infos wünsch noch einen schönen Tag Gruss Mike
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.