PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Befehle über RS232 interpretieren



sonic
28.04.2004, 13:10
Hallo Leute,

ich möchte mit einem VB-Programm Befehlsstrings an meinen AT90S4433 senden, welcher dieser dann interpretieren soll.
Bin eigentlich recht weit.

Ich frage die uC-RS232-Schnittstelle per Interrupt ab, aber in der Zeit in der der uC den String interpretieren soll, gehen Zeichen verloren, da der PC einfach weiter sendet.

Eine beidseitige Flusskontrolle ist gescheitert, aber ich weiß nicht genau warum.

Hat jemand nen kurzen Codeschnippsel in BASCOM bzw. VB?
Wäre nett,

Gruß,
Chris

MrNiemand
29.04.2004, 12:19
da wär ich auch dran interessiert also falls du schon irgendwas neues weist melde dich plz

Dino Dieter
29.04.2004, 15:45
Hallo Sonic

Schau dir doch mal CONFIG SERIALIN an. Sollte dich weiter bringen.

Ansonsten muß man das inder INT. Routine von Hand programmieren.
Wie schnell und wieviele Bytes willst du denn übertragen. RS232 ist doch für einen AVR eine recht langsame Sache.

MFG
Dieter

29.04.2004, 19:07
Hallo Sonic
Schau dir doch mal CONFIG SERIALIN an. Sollte dich weiter bringen.


Ne, bringt mich nicht weiter... ich will (fast) das gesamte EEPROM mit Daten füllen. So nen großen Puffer will ich da nicht nutzen müssen...

Das einzige was mich weiterbringt ist das Senden der Daten am PC zu verlangsamen. Idealerweise indem der wartet bis der uC sein OK gibt.
(Mit dem abarbeiten des Befehls fertig ist).

Im Moment mach ich das mit einem Timer. Bei 10ms/pro Befehl läuft das Ganze einwandfrei.

Nur eine Flusskontrolle bring ich nicht zustande.
VB unterscheidet nicht nicht zwischen Senden und Empfangen.
OnComm löst bei jeglichem Datenverkehr aus.



Ansonsten muß man das inder INT. Routine von Hand programmieren.
Wie schnell und wieviele Bytes willst du denn übertragen. RS232 ist doch für einen AVR eine recht langsame Sache.


Das Problem liegt nicht am AVR sondern bei VB.
Übertragungsgeschwindigkeit bei 19200Baud...

sonic
29.04.2004, 19:22
Tschuldigung, vergessen mich einzuloggen

Dino Dieter
29.04.2004, 20:39
Hallo

Aber du solltest doch in VB CTS oder RTS abfagen können. Die kannst du doch bei AVR auf einen Pin legen und in der INT bedienen.

Ansonsten mußt du vielleicht eine andere DLL nehmen die das kann. Davon gibt es doch genug. O:)

MFG
Dieter

sonic
29.04.2004, 21:16
Hallo

Aber du solltest doch in VB CTS oder RTS abfagen können. Die kannst du doch bei AVR auf einen Pin legen und in der INT bedienen.


Jo, schon. Allerdings hab ich die UART vom AVR ohne CTS/RTS-Leitung angeschlossen. Also nur TXD/RXD. Mein Board funktioniert jetzt endlich und eigentlich hab ich nicht schon wieder Lust ne neue Platine zu klempnern ;-)

ABER ob der uC nun nen Pin setzt oder ob er ein OK sendet sollte doch eigentlich egal sein.

Das Problem liegt wirklich auf der VB-Seite:

In VB+MSCOMM32.OCX wird bei Aktivität der RS232 das OnComm-Event ausgelöst. Dabei unterscheidet VB aber nicht zwischen Senden und Empfangen. Also kann ich das OnComm-Event vergessen.

Um den Zustand des uC abzufragen MUSS ich entweder ne while schleife solange ausführen bis "ok" empfangen wurde, oder ein Event auslösen wenn "ok" empfangen wird

Die Schleife ist sch.... weil der PC in der Zeit nix anderes mehr macht.
Mit Events kenn ich mich überhaupt noch nicht aus.

Deswegen wäre es ja cool wenn jemand ein passendes VB-Beispiel hätte.



Ansonsten mußt du vielleicht eine andere DLL nehmen die das kann. Davon gibt es doch genug. O:)
MFG
Dieter

Wirklich? Sag mal welche...

Gruß, Sonic

Dino Dieter
30.04.2004, 07:36
Hallo Sonic

Schau mal hier.
http://www.b-kainka.de/msrwin.htm

Habe die RS232 mal mit Excel angesprochen, ist zwar schon was her, ging aber ohne Probleme. RSAPI.dll

MFG
Dieter

16.07.2004, 21:44
Hallo Sonic,

hast Du dieses Problem noch ?


Gruss
Joachim

sonic
17.07.2004, 11:32
Hallo Sonic,
hast Du dieses Problem noch ?
Gruss
Joachim

Ja, aber ich hab schon längere Teit nicht mehr drann weiter gemacht weil ich die ganze Zeit gebüffelt habt ;-(

Gruß, Sonic

22.08.2004, 06:23
Man könnte den AVR einfach jedes byte echoen lassen, dass er ins eeprom geschrieben hat, sobald er fertig ist. in VB muss man dann halt warten, bis das Zeichen da ist (das normale MSComm OCX hat ein (einziges) Event, welches alle möglichen Dinge singalisiert (man kann das irgendwie abfragen)).
Man hat dann auch gleich die Sache mit der Kontrolle auf Übertragungsfehler erledigt.

sonic
22.08.2004, 09:39
Man könnte den AVR einfach jedes byte echoen lassen, dass er ins eeprom geschrieben hat, sobald er fertig ist. in VB muss man dann halt warten, bis das Zeichen da ist (das normale MSComm OCX hat ein (einziges) Event, welches alle möglichen Dinge singalisiert (man kann das irgendwie abfragen)).
Man hat dann auch gleich die Sache mit der Kontrolle auf Übertragungsfehler erledigt.

Ich habs jetzt so gelöst das der AVR die ganze Arbeit macht. Bis VB hab ichs noch nicht durchprobiert aber per Terminal funktioniert es wunderbar.
Das Problem war eigentlich das ich mich in Bascom nicht besonders gut ausgekannt habe und es deswegen völlig verquere Zahlen erhalten hat ,-(

Gruß, Sonic