Atmega8:Variable von PC an uC senden und umgekehrt

Gast #3309194
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
Gast #3309216
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 ;-)
#3309344
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...
Gast #3312772
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren