ATmega16 -> UART -> Visual Basic 6.0 -> Auswertung

Gast #1027950
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.