Hallo zusammen Ich möchte über ein PC Programm einige Daten an meinen Atmega schicken. Der Empfang der Seriellen Daten soll über Interrupt gesteuert werden. Habe mir zu diesem Zweck Peter Fleurys Bibliotheken besorgt. Nur mein Problem ist ich weis nicht wie ich die Funktion fürs empfangen verwenden soll... Es wird in der bibliothek ein Interrupt generiert, Das heist ja in meinem Empfangsbuffer steht nun das Empfangene Char-Zeichen. Kann ich das dann irgendwann in meinem Programmablaufmit get_C aus dem Buffer holen? Wie kann ich das dann mit einem String lösen? dann würde ja eigentlich nur das letzte Zeichen im Buffer stehen bleiben? oder? Vielen Dank im Voraus schon mal.... Viele Grüße
Simon schrieb: > Hallo zusammen > > Ich möchte über ein PC Programm einige Daten an meinen Atmega schicken. > > Der Empfang der Seriellen Daten soll über Interrupt gesteuert werden. > Habe mir zu diesem Zweck Peter Fleurys Bibliotheken besorgt. > > Nur mein Problem ist ich weis nicht wie ich die Funktion fürs empfangen > verwenden soll... Im Zip-File, welches du Downgeloaded hast, ist doch ein Beispiel enthalten. Schon studiert? > Wie kann ich das dann mit einem String lösen? Ein Zeichen nach dem anderen, solange bis du an dem Zeichen erkennst, dass nichts mehr kommen wird. > dann würde ja eigentlich nur das letzte Zeichen im Buffer stehen bleiben? > oder? Dann hätte das ganze aber wenig Sinn. Natürlich hat die Fleury Lib einen kleinen Buffer mit, in dem Zeichen erst mal zwischengespeichert werden, bis dein Code sie abholt.
:
Bearbeitet durch User
HI Vielen Dank für die Antwort. Leider hat dass nicht meine Farge beantwortet...(Vllt. Waren die ja auch umständlich gestellt??) Naja folgendes zum generellem Ablauf des Programmes: PC sendet String-> löst einen Interrupt im AVR aus->der Programmablauf stoppt-> das erste empfangene Byte landet im Buffer... Und dann??? Werden die restlichen Bytes die empfangen werden gleich im RX Buffer gespeichert? Ich kann leider den entsprechenden Code in der uart.c nicht finden... Mein µC macht ist eigentlich mit komplett was anderem beschäftigt es sollen nur ein paar parameter gesendet werden nach dem empfang macht der AVR weiter wie bisher. Das ist momentan mein Problem. Weil ich nicht genau verstehe wie die Lib funktioniert.... Dass ich eine Stoppbedingung programmieren ist, das ist mir schon klar damit der Controller weis wann der Empfang zu ende ist Danke schonmal
Simon schrieb: > HI > > Vielen Dank für die Antwort. > > Leider hat dass nicht meine Farge beantwortet...(Vllt. Waren die ja auch > umständlich gestellt??) > > Naja folgendes zum generellem Ablauf des Programmes: > > PC sendet String erste Frage woran kann die Gegenstelle erkennen, dass der String zu Ende ist. Das ist eine der wichtigen Fragen. Denn dein µC kann von vorne herein nicht wissen, ob nach den Zeichen 'B' 'U' 'S' noch etwas kommen wird oder nicht. Vielleicht kommt nichts mehr, vielleicht kommt aber noch ein "haltestelle" hinten nach. Woher weiß also der Empfänger, dass die Abfolge der Zeichen, der der Empfänger für sich wieder zu einem String zusammensetzt, beendet ist? > -> löst einen Interrupt im AVR aus->der Programmablauf > stoppt-> das erste empfangene Byte landet im Buffer... Und dann??? Das interessiert dich mit der Fleury Lib alles nicht. Die benutzt du einfach nur. Im Hauptprogramm rufst du die (ich glaube die hiess so) Funktion "getc" auf und die sagt dir ob ein Zeichen vorliegt und welches es war, oder ob keines da ist. Um den Mechanismus dahinter brauchst du dich nicht weiter kümmern. Der Mechansimus ist so ausgelegt, dass er zwischendruch auch schon mal ein paar Zeichen zwischenspeichern kann, weil dein Hauptprogramm vielleicht mal keine Zeit hatte, sich sofort um ein eingehendes Zeichen zu kümmern. Das braucht dich aber nicht weiter kümmern, dann das ist für dich komplett transparent. Aus dieser get-Funktion kommen die Zeichen exakt in der Reihenfolge wieder raus, wie sie empfangen wurden. Egal ob sie zwischendurch in einem Zwischenbuffer geparkt wurden oder nicht. Solange dieser BUffer nicht überläuft (wenn ich mich recht erinnere, ist eer defaultmässig auf 32 eingestellt), geht nichts verloren - selbst wenn es im Hauptprogramm mal wieder etwas länger dauert. > Werden die restlichen Bytes die empfangen werden gleich im RX Buffer > gespeichert? Ja. ABer ich denke, du machst den Kardinalfehler Nummero One. Du erwartest zuviel. Der Sender schickt einen String auf die Reise, indem er Zeichen für Zeichen überträgt. Aus deiner UART bzw. den Fleury-Funktionen kommen wieder Zeichen für Zeichen heraus. Ob und was diese zeichen bedeuten, das ist auf dieser Ebene nicht festgelegt. Für die UART bzw. die Mechanismen, die da dahinter stecken endet die Welt mit einzelnen Zeichen (eigentlich Bytes). Alles darüber hinausgehende ist dein Bier. Ob du Zeichen sammelst und in einem Array ablegst, bis du einen Zeilenvorschub ('\n') in den Daten entdeckst, oder ob du einen String mit einem speziellen anderen Zeichen als beendet erklärst, ob du Strings überträgst indem du zuerst die Anzahl der nachfolgenden Zeichen überträgst - das alles ist dein Bier. Weder die UART noch die Fleury Funktionen kümmern sich darum. Die sind nur für die Transportebene zuständig. So wie eine Telefonleitung. Ob du die Telefonleitung zur Sprachübertragung benutzt, oder ob da ein Fax übertragen wird, indem das Gerät in einem bestimmten Muster in die Leitung hineinpfeift, kümmert weder die Telefonleitung noch das Vermittlungsamt, sondern ist ganz alleine das Bier der Endstellen.
:
Bearbeitet durch User
Dann schonmal Vielen Dank für die erklärung dass hat mir doch schon sehr weitergeholfen ;-) Jetzt habe ich endlich einen Ansatz wie ich das gelöst bekomme... Viele Grüße
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.