Forum: Mikrocontroller und Digitale Elektronik ATmega16 -> UART -> Visual Basic 6.0 -> Auswertung


von Rush (Gast)


Lesenswert?

Hallo Fachleute ;-)

Einen Thread zu diesem Thema gibt es schon, der hat mir aber nicht 
weitergeholfen. Also hier nochmal etwas detailierter.

Ich versuche nun seit einigen Tagen mit Visual Basic 6.0 einen über den 
UART übertragenen Wert ordentlich zu empfangen bzw. anzuzeigen. 
Vergebens!

Bei dem Wert handelt es sich um einen Rückgabewert (Integer) einer 
Funktion welche das Temperatur-IC MAX6675 ausliest. Über den UART 
verschicke ich zwei Byte hintereinander.
1
int main(void)
2
{
3
  unsigned int temperature;
4
5
  initavr();
6
  USART_Init(UBRR_VAL);
7
  
8
9
while(1)
10
{
11
  long_delay(3000);
12
  temperature = gettemp();  // Temperatur holen
13
  USART_Transmit(temperature >> 8);
14
  USART_Transmit(temperature);
15
16
17
}
18
}
Meine Idee war jetzt, ich versende diese zwei Bytes, lese sie in VB 
einzeln aus. Zuerst das erste Byte, schiebe es 8 Bit nach links und dann 
zweite Byte.


Das Problem:
Der Paramter RThreshold gibt an, nach wievielen empfangenen Zeichen das 
ComReceive-Ereignis ausgelöst wird, InputLen gibt an wieviele Zeichen 
aus dem Empfangspuffer eingelesen werden sollen.

Wenn in dem ersten Byte eine NULL drin steht, wird diese ,trotz des 
Parameter NullDiscar = False, von VB aber ignoriert.

Setzte ich nun den Parameter InputLen = 2, wird nie ein Wert eingelesen 
wenn das erste Byte eine NULL enthält, setzte ich InputLen = 1 wird 
immer nur ein Byte eingelesen, sprich, wenn in dem ersten Byte keine 
NULL drin steht, wird trotzdem nur eins eingelesen...
Setze ich InputLen = 0, wird zwar der ganze Eingangsbuffer eingelesen 
(so kommts mir zumindest vor) allerdings kommt das VB nach einiger Zeit 
aus dem Rythmus.
Das ist das erste Problem.

Das zweite Problem:
Ich versende die Temperatur direkt als String. Dann stehen je nach 
gemessener Temperatur unterschiedlich viele Zeichen im Empfangspuffer. 
Hier kann ich also auch keine feste InputLen setzen da die Zeichen ja je 
nach Temperatur variieren. Somit kommt das VB wieder aus dem Rythmus.

Hier mal die Konfiguration des COM-Controls:

MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 0
MSComm1.NullDiscard = False
MSComm1.PortOpen = True



Weiss jemand von euch wie man sowas am einfachsten proggen kann?

Danke schonmal im Voraus.

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
Noch kein Account? Hier anmelden.