Forum: PC-Programmierung ATmega8 und Sensoren per VB 2010 auswerten


von Jan (Gast)


Lesenswert?

An die Experten unter euch ,
es stellt sich folgendes Problem:

Ich habe ein MyAVR Board light mit dem ATmega8 und Programiere mit dem 
AVR Studio 4 in Assembler und der m8def.inc .

An den Controller sind 3 Sensoren angeschlossen :
- Thermometer
- Barometer
- Gabellichtschranke

In Assembler habe ich keine Probleme die Werte zu erfassen nur in VB 
habe ich nur Grundlagen Erfahrung und nun auch keine Zeit mich dort bis 
zu diesem Punkt Stück für Stück vor zu arbeiten.

Ich brauche Hilfe bei :

- Die Daten der Sensoren an den PC senden (mC per USB angeschlossen und 
per Treiber als COM3 erkannt)
- Einzelne Daten an den mC vom PC senden wie Interrupts o-Ä

Ich hoffe die Problematik ist nun zu erkennen.
Ich bedanke mich für jede helfende Hand !
Lg

von STK500-Besitzer (Gast)


Lesenswert?

In welcher Form werden die Daten denn per serieller Schnittstelle 
übertragen?
reicht vielleicht erst mal ein Terminalprogramm wie hTerm zum erkennen 
der Daten?
Eine Anleitung, wie die serielle Schnittstelle unter VB anzusprechen 
ist, findet man vermutlich im Internet (Microsoft-Seite?!).

von Patrick (Gast)


Lesenswert?

Wie man mit der seriellen Schnittstelle unter Visual Basic umgeht, dazu 
findet man viele Beispiele im Internet, z. B. hier: 
http://msdn.microsoft.com/en-us/library/7ya7y41k.aspx

Zunächst musst Du Dir ein Protokoll überlegen, d. h. wie die Daten 
zwischen µC und PC "verpackt" werden.

Beispiel:
- Übertragung über den UART mit 115,2 kBaud, 8 Datenbits, 1 Stopbit, 
kein Paritätsbit.
- Frame-Aufbau: 0xFF 0xFF [Datenbyte Thermometer] [Byte Barometer] [Byte 
Lichtschranke] [Byte für Ereignisse, z. B. Interrupt] [Prüfsummen-Byte]
- Das Frame wird z. B. einmal alle 10ms vom µC gesendet.
- Der PC erkennt ein gültiges Frame, wenn die notwendige Anzahl an Bytes 
empfangen wurde und das Prüfsummen-Byte korrekt ist.
- Der PC hat z. B. einen Time-Out von 1ms, d. h. wenn noch Bytes für ein 
vollständiges Frame fehlen und für 1ms nichts empfangen wird, wird das 
Frame verworfen.

Da bei Dir die Daten nur in eine Richtung (µC -> PC) "fließen" sollen, 
wäre das so völlig ausreichend. Alternativ könnte man z. B. über ein 
Protokoll nachdenken, bei dem der "Master" (= PC) zyklisch den "Slave" 
(= µC) pollt, d. h. einen "Request" schickt, den der Slave dann mit 
einem "Response" beantwortet. Hierbei würde ich mich aus dem Bauch 
heraus der Einfachheit halber an den Frameaufbau des LIN-Busses (bitte 
googlen) anlehnen, d. h. der Master sendet z. B. so etwas:
[Sync-Byte (0x55)] [Message Identifier]

Und der Slave antwortet mit seinen Daten (+ Prüfbyte).

Damit könnten durch den Message Identifier die Daten in unterschiedliche 
Messages aufgeteilt werden. Vorteil wäre die Verringerung der 
Brutto-Datenrate, wenn unterschiedliche Daten mit unterschiedlicher 
Frequenz gepollt werden sollen (z. B. Daten vom Interrupt einmal je ms 
und Temperaturwert einmal alle 100ms). Außerdem könnten so auch Daten 
vom PC zum µC übertragen werden...

Was Du letztendlich brauchst, musst Du jedoch selbst entscheiden.

von Jan (Gast)


Lesenswert?

BESTEN DANK ! Diese Grundlagen haben gefehlt.
Super Forum !

von Klaus D. (rodo38)



Lesenswert?

Hallo Jan,

um das Programmieren in Assembler zu erlernen, habe ich mal ein Programm 
für den Atmega8 geschrieben, damals in SiSy, heute benutze ich auch 
Studio 4. Es gibt ein paar Unterschiede, z.B. "equ." Variable --> "def." 
Variable. Das Programm kommuniziert mit einem in VB6 geschriebenen 
Programm. Beide findest Du im Anhang.

Die Hardware ist im Kopf des Assembler-Programms hoffendlich ausreichend 
genau beschrieben. Ich habe einen MAX232 benutzt und keinen RS232-USB 
Umsetzer, weil ich noch einen PC mit einer 9poligen COM Steckdose 
besitze. Es funktioniert aber auch mit einem solchen Umsetzer.

Alle 256 ASKII Zeichen können sowohl vom PC wie auch vom µC gesendet wie 
auch empfangen werden.

Die Komponente comTest (rechts unten in der Form) muß entfernt und 
wieder vom Computer, der es benutzen wird, eingefügt werden, jedenfalls 
nach meiner Erfahrung.

Zum leichten Einstieg: Klick das Option Button <txtSend> an, dann das 
Command Button <Man>. Damit werden die ASKIIs 0 bis 255 in die 
entsprechenden Textfelder geschrieben. Danach bitte alles ausprobieren. 
Man kann schön damit spielen. Eine Anleitung zu allen Funktionen gibts 
(noch) nicht.

Für weitere Hifen: rodo38@t-online.de

Ich würde mich freuen, wenn es Dir ein Wenig weiterhilft.

MfG

Klaus

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.