Forum: Mikrocontroller und Digitale Elektronik Atmega8:Variable von PC an uC senden und umgekehrt


von Mike77 (Gast)


Lesenswert?

Hi,

ich programmiere zum Spass nebenbei ein wenig Mikrocontroller (Atmega8).
Ich würde mich in das Level Anfänger einstufen.

Um meinen Atmega zu programmieren benutze ich folgendes:

http://www.mikrocontroller.net/attachment/66477/desktop.jpg


Ich möchte jetzt mal einen weiteren schritt gehen.

Sagen wir ich hätte eine LED an den Atmega angeschlossen und die 
Helligkeit dieser LED wird mit einer Variablen X gesteuert.

Ich möchte nun von meinem Computer diese Variable X an den Atmega 
senden.
Die LED soll dann auf den neuen Wert langsam gefaded werden und sobald 
der Wert X erreicht ist soll der Atmega eine Variable Y auf 1 setzen 
damit dieser Wert erreicht ist und an den PC senden.

Wie könnte ich dies am besten umsetzen.

Python kann ich ein mittelmässig. hilft hier die erweiterung pyserial 
weiter?

Danke und Gruss

von Stefan (Gast)


Lesenswert?

Benutze mal die Suchfunktion. Beispiele für serielle Kommunikation (AVR 
Seitig) wurden hier schon öfters vorgestellt.

Und ja, Python braucht dazu eine Erweiterung.

von Mr. Tom (Gast)


Lesenswert?

Mike77 schrieb:
> Ich möchte nun von meinem Computer diese Variable X an den Atmega
> senden.
> Die LED soll dann auf den neuen Wert langsam gefaded werden und sobald
> der Wert X erreicht ist soll der Atmega eine Variable Y auf 1 setzen
> damit dieser Wert erreicht ist und an den PC senden.

Über die Schnittstelle wandern gewöhnlich nur Bytes. Um die Zerlegung 
deines Variableninhaltes in solche gebräuchlichen Informationseinheiten 
wirst du dich selber kümmern müssen, ggf. indem du eine passende 
Funktion in der Programmiersprache deiner Wahl aufrufst. Auf dem ATmega 
wirst du mit Python nicht weit kommen ;-)

von Mike77 (Gast)


Lesenswert?

oje kann ich nicht einfach einen Zahlenwert an den Comport senden an 
welchem der Atmega liest diesen ein?

von Peer (Gast)


Lesenswert?

klar kann man das und wenn der atmega fertig ist, kann er auch den wert 
1 zurücksenden

von Mike77 (Gast)


Lesenswert?

da bleibt nur die frage wie ich das hinbekomme :-D

hats da ein tutorial?

von Hank P. (hp67)


Lesenswert?

> oje kann ich nicht einfach einen Zahlenwert an den Comport senden an
> welchem der Atmega liest diesen ein?

"einfach einen Zahlenwert"... so einfach ist das nicht, da Du dir 
Gedanken machen musst, wie Du den kodierst. Natürlich könntest Du 
einfach als ASCII-Zeichen senden: "123", das wäre dann auf der seriellen 
Schnittstelle 0x31 0x32 0x33 ... Du kannst dir vorstellen, dass es nicht 
so trivial ist, das dann auf dem Mikrocontroller wieder in z. B. einen 
uint8_t mit dem Wert 123 umzuwandeln (jaja, scanf).

Also wirst Du etwas geschickter Kodieren müssen: Z. B. wenn der 
Wertebereich sich mit 0 .. 255 abdecken lässt, nehme ein Byte. Das 
sollte auch im Python-Programm trivial umzusetzen sein.

Im Mikrocontroller wäre dann die Vorgehensweise ganz einfach (und dazu 
gibt es genügend Codebeispiele): Eine globale Variable "wert", dessen 
Wert in der Interrupt-Routine für ein empfangenes Zeichen einfach auf 
dieses gesetzt wird. Wenn Du Lust und Launa hast, mach noch ein bisschen 
triviales Protokoll drumherum (a la SLIP oder so) um Anfang und Ende 
einer Übertragung zu markieren; bei einem einzigen zu übertragenden Wert 
allerdings halbswegs überflüssig...

von Stefan (Gast)


Lesenswert?

Das kommt dann dabei heraus, wenn man das Programmieren mit Typenlosen 
Scriptsprachen erlernt.

Finde mal heraus, was genau eine Variable ist. Wo befindet sich die 
Variable. Wo müsstest Du z.M. Meßgeräte oder Leuchtdioden anschließen 
(nur theoretisch gesehen), um zu sehen, was in der Variable drin ist. 
Und wann würde dann welche LED leuchten.

Du solltest lernen, wie der Computer Daten codiert und im Speicher 
ablegt. Danach kannst Du lernen, wie eine serielle Schnittstelle 
funktioniert und worin sie sich von einer parallelen Schnittstelle (z.B. 
Centronics, Druckerport) unterscheidet.

Ich empfehle Dir, bei Gelegenheit C zu lernen.

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.