Hallo leute, ich will die Daten zwischen ein PC und die Mikrocontroller übertragen aber manchmal gehen die daten verloren. und jetzt will ich die datenflusskontrolle mit Hardwareflusskontrolle machen In diesem Fall muss der Mikrocontroller dem PC signalisieren, dass er keine weitere Daten empfangen kann. wie kann ich das mit einer ATMega 16 controller machen? MFG Passi
Ein zusaetzlicher Ausgang am Mega16 an den MAX232 anschluessen und auf den CTS(oder DSR) dess PC geben. Nun muss man dem PC noch beibringen, dass CTS(oder DSR) bedeutet mit dem Senden zu stoppen. Moeglicherweise kann der PC Treiber das schon und man muss dieses Feature nur zuschalten.
@ Passi (Gast) >ich will die Daten zwischen ein PC und die Mikrocontroller übertragen >aber manchmal gehen die daten verloren. und jetzt will ich die Das sit meist ein Programmierfehler, z.b: zu lange und zu komplexe Interrupts. Das solltest du prüfen. >datenflusskontrolle mit Hardwareflusskontrolle machen > In diesem Fall muss der Mikrocontroller dem PC signalisieren, dass er >keine weitere Daten empfangen kann. Kann man machen, ist aber bei richtiger Auslegung des Protokolls meist unnötig. > wie kann ich das mit einer ATMega 16 controller machen? Indem du RTS/CTS benutzt. Da du ja sowieso einen MAX232 hast, kannst du die freien Kanäle dafür benutzen. MFG Passi
Meist genügt es, mit der Baudrate einen Gang tiefer zu fahren. Willst Du das nicht, so solltest Du per Interrupt empfangen und einen Ringpuffer für den Empfang einsetzen. Kann den Dein Programm nicht schnell genug leeren (abarbeiten), so kannst Du bei einem gewissen Füllstand des Ringpuffers über die Handshake-Leitung den PC stoppen und bei einem kleineren Füllstand (Hysterese) wieder freigeben. In der Richtung zum PC geht das ähnlich, indem man vor jedem Senden eines Bytes die Handshake-Leitung vom PC abfragt. Das alles kann man aber umgehen, wenn man das Datenaufkommen auf beiden Seiten richtig plant. Man muss nicht immer am (oder über'm) Limit arbeiten. MfG, Blaubärli
Fuer ein ausgehendes Handshake wird ein zusaetzlicher Ausgang am Mega16 benoetigt. zB PORTB,2, irgendwas. Der Mega16 Software muss man das auch beibringen. Bei einem normalen Protokoll sollte Handshake vermieden werden koennen. Manchmal laesst sich Flusskontrolle nicht vermeiden, speziell wenn man mit hohen Baudraten nahe am Kapazitaetslimit fahren will. Dann hat man das ueblich Master-Slave Warten schon lange hinter sich gelassen und arbeitet mit Buffern und verzoegertem Ack.
@ Falk Brunner (falk) ja ich will die RTS/CTS benutzen aber ich weiss nicht wie ich machen soll um der PC zu signalisieren das keine weitere daten sind empfanbar. und ich will ja wiessen wie macht man das (wie soll die code für diese befehlt in C aussehen ) Danke
Das Problem am Handshake ist, daß es keinen Standard gibt, wann der Sender danach aufzuhören hat. D.h. bei eine USB-RS232 Umsetzer mit 4kB Puffergröße können dann durchaus noch die letzten 4095 Byte rausgerotzt werden, die schon im Puffer sind. Es sei denn, daß Handshake wird direkt im USB-Chip ausgewertet und nicht erst im virtuellen RS-232 Treiber des PC. Peter
CTS einschalten, PC darf Daten senden, CTS ausschalten, PC muß stoppen. Das Programm, mit dem Du die Daten auf dem PC sendest, muß dies aber auch unterstützen (Hardware-Flußkontrolle). Normal ist der ATMEGA aber absolut schnell genug, um mit 115kbit Daten zu empfangen (Höchstgrenze realer Com-Ports).
ist es mit eine RS232 machtbar? weil die kommunication zwischen den PC und die Mikrocontroller mache ich via der RS232 schnittstelle.
@ Passi (Gast) >ist es mit eine RS232 machtbar? weil die kommunication zwischen den PC >und die Mikrocontroller mache ich via der RS232 schnittstelle. Das IST RS232! MFG Falk
habe ich nicht gut verstanden was sie meinen mit Das IST RS232! frank?
@ Passi (Gast) >habe ich nicht gut verstanden was sie meinen mit Das IST RS232! frank? Ganz einfach, eben dieses Verfahren mit den Signalen RTS/CTS ist bereits in RS232 eingebaut. Kannman nutzen, muss man aber nicht. Ist doch ganz einfach. Wenn der AVR keine Daten mehr aufnehmen will, setzt er CTS auf LOW. Der PC merkt das und hört auf zusenden. Wenn der AVR wieder Daten empfangen will setzt er CTS auf HIGH. Der PC merkt das und sendet wieder. MfG Falk
welche pin ist hier(ATMEGA16) ja zuständig für CTS/RTS weil ich es suche seite heute und finde es nicht. wenn du es weisst bitte sagt mir MFG Passi
Passi wrote: > welche pin ist hier(ATMEGA16) ja zuständig für CTS/RTS Diese Pins kannst Du selbst bestimmen, denn diese Signale musst Du selbst (mittels Deines selbstgeschriebenen Programms im AVR) erzeugen bzw auswerten. > weil ich es suche > seite heute und finde es nicht. wenn du es weisst bitte sagt mir Da kannst Du lange suchen, die UART-Hardware unterstützt diese Pins nicht. Das wäre auch ziemlicher Unsinn, denn die UART-Hardware verfügt auch nicht über RX- und TX- Puffer, wüsste also nicht, woher sie die Information für CTS/RTS nehmen sollte. Wenn Du unbedingt Handshake brauchst, dann musst Du erstmal Ringpuffer für RX (und evtl. auch TX) in Dein Programm implementieren und bei drohendem Überlauf den PC stoppen. > > MFG > Passi MfG, BlauBär
mit dem ringpuffer habe ich schon gemacht jetzt meine ist wie kann nicht den PC bei überlauft stoppen? wie kann ich den CTS den PC ansprechen ? das ist mein Probleme MFG Passi
Passi wrote: > mit dem ringpuffer habe ich schon gemacht jetzt meine ist wie kann nicht > den PC bei überlauft stoppen? wie kann ich den CTS den PC ansprechen ? > das ist mein Probleme > > MFG > Passi Naja, C kann ich nicht. In ASM würde ich durch Subtraktion der Lese- und Schreinpointer des Ringpuffers den Füllstand ermitteln, bei Überschreiten der kritischen Grenze mittels SBI (oder CBI, ich weiß jetzt aus dem Hut die Pegel nicht) CTS aktivieren und bei Unterschreiten der "Sorglos-Grenze" mit CBI (oder SBI, je nach erforderlichem Pegel) wieder deaktivieren. Aber ob der PC sich auch danach richtet, steht auf einem anderen Blatt, siehe Beitrag von Peter Dannegger. MfG, blauer Bär
Das ist nicht das einzige Problem. http://de.wikipedia.org/wiki/EIA-232 Ob die Flußkontrolle verwendet wird bzw. wie man Sie einschaltet erfährt man in dem Handbuch/der Hilfe des PC Programms das du zum empfangen benutzt. Condi
wie kann ich den CTS in seite von der Mikrocontroller bestimmen? wenn jemand ein beispiel von ein Hardware handshake mit dem RS232 bitte zeigen sie mir wie es geht. Danke im voraus Passi
Das ist einfach nur eine Leitung, die zusätzlich über den MAX232 zum PC führt. An welchem Port du die an deinem µC anschliesst bleibt völlig dir überlassen. Du kannst jeden Port Pin nehmen, der noch frei ist. Den verbindest du mit einer Treiberstufe auf dem MAX232 (die noch frei sein müsste), und vom MAX232 gehts auf die CTS Leitung vom RS232 Kabel. Am PC schaltest du dann das RTS/CTS Handshake ein (Hardware Handshake) und wenn dein µC in Bedrängnis kommt, dass er mit dem Empfang nicht mehr nachkommt, dann setzt er den Portpin von 1 auf 0. Der PC hört dann auf zu senden. Ist der µC wieder nachgekommen, dann setzt dein Programm den Portpin wieder zurück auf 1 und der PC beginnt wieder zu senden. So einfach ist das. Oder wars: wenn der Pin auf 0 ist, darf der PC senden und wenn er auf 1 geht, hört der PC auf. Weiss nicht mehr und bin jetzt ehrlich gesagt zu faul zum Nachdenken. Ist ja schliesslich auch dein Projekt.
Bei Anschluß über MAX232: Controllerpin=0 setzt CTC, was "Clear To Send" heißt und erlaubt somit das Senden vom PC. Controllerpin=1 löscht CTC und unterbindet somit das Senden vom PC.
IN Mein Platine habe ich keine MAX232 ich habe nur das RS232 ich benutze die ATmega16. ohne den MAX232 geht es nicht?
Passi wrote: > IN Mein Platine habe ich keine MAX232 ich habe nur das RS232 ich benutze > die ATmega16. ohne den MAX232 geht es nicht? Poste mal den Schaltplan Deiner Platine. Der MAX232 kann auch anders heißen wenn er von einem anderen Hersteller als MAXIM kommt. MfG, BlauBärli
meine platine ist die STK500 die ATmega16 von ATmel mit alle bausteine
Passi wrote: > meine platine ist die STK500 die ATmega16 von ATmel mit alle bausteine Nagut, da ist kein Kanal vom MAX202 mehr frei, der Zweitkanal wird ja für den Programmer verwendet. Pech gehabt... MfG, Bär, blauer
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.