Re: Serielle Schnittstellenprogrammierung Kategorie: Programmierung C (von Oliver - 27.04.2009 22:40) | ||
Als Antwort auf Re: Serielle Schnittstellenprogrammierung von Wolfgang - 26.04.2009 22:45 | ||
| ||
Hi, danke für die fixe Antwort ;-) Also wie gesagt hab ich ne CC-Pro 128 MIT App-Board. Allerdings nehm ich die Schnittstellensignale nicht durch die RS232-Buchse ab, sondern direkt über die Pins TxD und RxD (aus Platzgründen). Das Andere Board ist das ganz alte Best-Nr: 124079 - 62 . (Wei�t du, wie das Ding richtig hei�t?) Dazu gibt es ein Starterboard, welches ich auch benutze, aber das hat damit nichts zu tun. Die genannten Schnittstellentreiber sind da warsch auch nicht vorhanden. Aber mit nem Terminal auf dem PC funktioniert alles (Also das Alte Board mit PC verbunden). Ganz andere Idee: Nicht die normalen RxD und TxD Ports nehmen, sondern normale Digitale Eingänge, dann kann man jedes Bit einzeln auslesen, mit Start/Stopp-Bit. Der Rest ist Programmierung... Wobei ich eine Hardwarelösung bevorzugen würde ;-) Oszilloskop hab ich nich, aber mit nem Voltmeter und Lötkolben kann ich scho hobbymässig umgehen ;-) Mit nem Schaltplan kann ich auch was anfangen. Ich kann immoment nicht die Spannung messen, da ich nicht zu Hause bin, aber ich werde das tun, sobald ich kann, allerdings hat das so wie ich das sehe nicht so den praktischen Nutzen... Gru� Oliver > Hallo Oliver, > > Vorsicht: was logisch klingt, muss deswegen noch lange nicht stimmen - es war wirklich nur eine Idee > von mir! > > Also: ich habe in der Beschreibung nachgesehen, und da steht, dass das CC-Pro 128 Application Board > den von mir erwähnten Schnittstellentreiber bereits hat. Davon könntest Du dich überzeugen, indem Du > mit einem Voltmeter die Spannung am TxD-Pin (das wäre Pin2, falls es sich um eine Sub-D-Buchse/ > Female handelt, oder Pin3, wenn es ein Stecker/Male ist). Im Ruhezustand, wenn also nichts gesendet > wird, sollten sowas um die -8V anliegen. Ohne den Treiber müssten das dagegen +5V sein. Die > nominell sogar -12V macht der Treiber übrigens mittels 4 Kondensatoren selber aus den +5V, mit denen > die Schaltung von aussen versorgt wird. > > Nun ist also spannend, wie Deine CC1-Unit aussieht: ist das auch ein Application Board? Ich kenne nur > die alte 'M-Unit', und die hat den Schnittstellentreiber bestimmt nicht, soda� ich mir Fehler von der von > Dir geschilderten Art vorstellen könnte. > > Was Du tun kannst?: PullUps helfen nicht, und in der Software kannst Du die von mir gemutmasste > Invertierung, falls sie denn gegeben ist, nicht wieder 'hinbiegen'. Du hast schon den richtigen Riecher > bewiesen: die Start- und Stop-Bits bauen die Controller selbsttätig ein, und selbst wenn Du die 8 Daten- > Bits negieren würdest, dann blieben Start und Stop falsch herum, und die ganze Byte-Erkennung würde > nicht funktionieren. > > Du musst wirklich herausfinden, ob Deine CC-Unit, wie Du sie nennst, auch einen Treiber hat - also > wieder die Spannung an deren TxD-Pin messen. Wenn da (in Ruhe) auch eine deutlich negative > Spannung anliegt, dann war meine These Unsinn und Du hast ein anderes Problem. Wenn da +5V sind, > dann war mein Schuss aus der Hüfte ein Treffer und Du musst einen Schnittstellentreiber dazwischen- > hängen... > > Falls Du das selber nicht herausfinden kannst, dann Versuch' doch mal etwas genauer zu beschreiben, > was die CC1-Unit für eine Platine ist (z.B. falls es die noch zu kaufen gibt, Bestellnummer), dann kann > man da vielleicht nachforschen. Ist es nur ein Mini-Platinchen mit gerade dem Controller drauf, oder ist > das auch so ein Application board mit vielen zusätzlichen Elementen? > > Erzähl doch mal: hast du ein Oszilloskop, um die Signale ansehen zu können? Sagt dir ein Schaltplan > etwas? Hast Du einen Lötkolben? > > Nicht verzweifeln: Dein Problem hat bestimmt eine Lösung! > > Gru�, Wolfgang > > > oha, deine Erklärung klingt logisch und kommt warscheinlich nicht von ungefähr. Ich kenn mich leider mit > > der Materie nicht so gut aus... > > Aber 2 Fragen tun sich mir nun auf... > > 1. woher sollen die 12V kommen, beide Controller arbeiten nur mit 5 V. insofern denke ich, dass das nicht > > so tragisch ist / war (ich werde weitere Tests natürlich lassen ;-) > > > > 2. was kann ich nun tun? um das signal zu invertieren, kann ich RxD und TxD mit nem Pull-Up-Widerstand > > versehen, oder? Und kann ich das Signal nicht per Software "umdrehen" ? Das Problem ist hierbei, dass > > ich das start und stop-Bit nicht auslesen kann (zumindest nicht über die RS232-Schnittstellen-Befehle) > > > > Oder ist das eher der Holzweg und es geht viel einfacher? > > > > Gru� Oliver > > > > > Hallo Oliver, > > > > > > gleich vorweg: wass ich hier schreibe, ist nicht genau überprüft, sondern nur so'ne Vermutung, die mir > > > beim Lesen Deines Beitrags in den Sinn kommt: > > > > > > Kann es sein, das einer Deiner beiden Controller einen (invertierenden) Schnittstellen-Treiber > > > (z.B. MAX232) hat, der andere aber nicht? Dann sähe jeder Receiver das Inverse dessen, was der > > > andere Transmitter gesendet hat, mit dem Erfolg, dass nicht nur die Datenbits andersherum > > > herauskommen, sondern auch Start- und Stop-Bit jeweils den falschen Pegel haben. Letzteres > > > könnte evtl. auch erklären, dass scheinbar nur 7 Bit übertragen werden. > > > > > > Falls meine Idee zutrifft, so ist das auch hardware-mässig gefährlich: der Treiberbaustein liefert nominell > > > +/-12V, die für die Pins des ohne (Gegen-)Treiber arbeitenden Controllers hochgefährlich sind. > > > > > > Gru�, Wolfgang > > > > > > > Hallo > > > > Ich bin gerade dabei über die serielle Schnittstelle eine Kommunikation zwischen dem CC-Pro 128 App > > Board > > > > und der (ur)alten CC1-Unit zu programmieren. > > > > > > > > Allerdings ist mir ein Fehler aufgefallen, und ich glaube der liegt an meinem Board, was anderes fällt mir > > nicht mehr ein -.- > > > > > > > > Hier eine Tabelle mir den Werten die ich vom alten Board sende und mit dem CC-Pro empfange: > > > > > > > > 0 0 > > > > 1 127 > > > > 2 63 > > > > 3 126 > > > > 4 31 > > > > 5 125 > > > > 6 62 > > > > 7 124 > > > > 8 15 > > > > 9 123 > > > > 10 61 > > > > 11 122 > > > > 12 30 > > > > 13 121 > > > > 14 60 > > > > 15 120 > > > > 16 7 > > > > 17 119 > > > > 18 59 > > > > 19 118 > > > > 20 29 > > > > 21 117 > > > > > > > > usw. > > > > > > > > Wie man sehen kann, sind sie nicht wie gewollt gleich ;-) > > > > > > > > Die Parameter sind > > > > Serial_Init(0, SR_8BIT | SR_1STOP | SR_NO_PAR , SR_BD9600 ); > > > > > > > > Auch mit einer noch langsameren Baudrate kommt das selbe Ergebnis raus, die Kabel sind nur ca 20cm lang, > > > > und das Programm zum Senden auf dem alten Board funktionier auch, bei Anschluss eines PCs kommen auf dem > > > > Terminal die richtigen Zeichen an. Es muss also am Pro-Board liegen. > > > > > > > > Mir ist au�erdem aufgefallen, dass wenn ich mit SR_7BIT statt SR_8BIT starte, die selben (falschen) Zahlen bekomme. > > > > Au�erdem ist keine einzige der empfangenen Zahl grö�er wie 127. Was dafür spricht, dass das 8. Bit fehlt. > > > > > > > > Ist das nun ein Fehler meinerseits oder ist wirklich was defekt ? > > > > > > > > Ach ja, ich wollte das ganze noch mit der 2. seriellen schnittstelle testen, allerdings empfängt diese gar keine Werte, > > > > was auch seltsam ist... > > > > > > > > Danke für jeden Tipp > > > > > > > > Gru� Oliver > > > > | ||
Antwort schreiben Antworten: Re: Serielle Schnittstellenprogrammierung (von Wolfgang - 28.04.2009 16:18) Re: Serielle Schnittstellenprogrammierung (von Oliver - 3.05.2009 23:36) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum