Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#19

Re: UART Terminal-Programm zur Kommunikation mit ATmega8 µC

  Alt 13. Jun 2007, 17:17
Zitat von jo_gammler:
aber jetzt möchte ich auch daten (integer zahlen) an den µC schicken, hab aber keine ahnung wie ich das bewekstelligen sollte!
Hi,
also erstmal das reine Verschicken geht ganz einfach. Erstell Dir einfach eine Instanz von TComport. Diese Instanz besitzt die Methode Write, der kannst Du beliebige Daten übergeben, die werden dann verschickt. Die Methode erwartet zwei Argumente, dass erste ist der Start des zu verschickenden Datums. Hast Du hier ein Integer, wäre es eine Variable, die eben vom Typ Integer ist. Hast Du hingegen ein Array, wäre es das Array an der Position 0 (bei statischen Arrays 0 ggf. durch angegebenen Index ersetzen), bei Strings wäre es der String an der Stelle 1. Der zweite Parameter gibt an, wie groß das Datum ist das übertragen werden soll. Die Größe wird dabei in Byte zurückgegeben. Die Größe kannst Du mit sizeOf ermitteln. Bei Integern solltest Du aber aufpassen, die sind generisch. Auf aktuellen 32-Bit Systemen wird ein integer noch 32 Bit haben, auf 64 Bit Systemen hingegen wird es 64-Bittig (usw.). Bei Arrays musst Du diese Größe noch mit der Anzahl der Elemente multiplizieren. Hier ist es wichtig, dass Du nicht sizeOf auf das gesamte Array anwendest, sondern wirklich sizeOf(deinArray[0]) * length(deinArray). Ansonsten bekommst Du eine falsche Größe, da Du sonst nur die Größe der Variable, die auf das Array zeigt speichern würdest.

Alles zusammen könnte dann so aussehen:
Delphi-Quellcode:
var i: Integer;
    numbers: Array of Integer;
begin
  // Array mit 10 Elementen erstellen
  setLength(numbers, 10);
  for i := 0 to 9 do
  begin
    // mit den Zahlen 0 .. 9 füllen
    number[i] := i;
  end;

  // Array verschicken
  comPort1.Write(numbers[0], sizeOf(numbers[0]) * length(numbers));
end;
Was Du dabei überträgst sind aber nur Bytes. Dein µC weiß also nicht, dass Du hier eigentlich Integer Werte verschickst. Da musst Du in dem Programm, dass die eintreffenden Daten weiterverarbeitet, selbst dafür sorgen, dass die wieder zusammengesetzt werden. Ggf. musst Du dann natürlich auch den Unterschied zwischen Big- und Little-Endian ausgleichen.

Gruß Der Unwissende
  Mit Zitat antworten Zitat