Forum: Mikrocontroller und Digitale Elektronik Programmcode auf Atmega 168 laden


von Meier M. (meier_m)


Lesenswert?

Hallo zusammen

Ich wollte nachfragen, ob es möglich ist, von meinem C# Programm aus 
mein generierten C-Code zu kompilieren und diesen direkt auf meinen 
Mikrokontroller (Atmega 168 => mySmartControl MK2 16K) zu laden. Das 
Board hat einen USB Schnittstelle welche als virtueller COM-Port 
emuliert wird. Was ist dazu notwendig?

Mit freundlichen Grüssen

von Uwe (de0508)


Lesenswert?

Hallo

Meier M. schrieb:
> Hallo zusammen
>
> Ich wollte nachfragen, ob es möglich ist, von meinem C# Programm aus

Das verstehe ich nicht !

> mein generierten C-Code zu kompilieren und diesen direkt auf meinen
> Mikrokontroller (Atmega 168 => mySmartControl MK2 16K) zu laden. Das
> Board hat einen USB Schnittstelle welche als virtueller COM-Port
> emuliert wird. Was ist dazu notwendig?

Stichwort: Bootloader.
Aber ohne ISP Programmer wird man den nicht drauf bekommen.

von Meier M. (meier_m)


Lesenswert?

Ich will einen Arbitrary Waveformgenerator basteln, welcher mit einigen 
kHz funktioniert. Dazu kann man über das C# Programm die Kurvenform 
auswählen (Sinus, Rechteck, Dreieck, Puls oder importierte Kurven)welche 
dann berechnet werden. Nach der Berechnung generiere ich das C-File mit 
den berechneten Kurvenpunkten, welches dann auf den Atmega 168 geladen 
werden sollen.
Dazu muss das C-File zuerst kompiliert werden (AVR GCC) und danach 
möchte ich dieses hex-file hochladen aus dem C# Program. Das kompilieren 
sollte machbar sein, nur bin ich mir nicht ganz sicher wie ich nun aus 
dem C# Tool den Programmcode (HEX-File) hochladen kann. Brauche ich dazu 
ein drittprogramm welches dies für mich erledigt, oder kann ich das 
hex-file manuell über die serielle schnittstelle auf den Atmega 168 
laden? (Wenn ja auf was muss man achten dass der Programmcode am 
rictigen Ort landet?)

von Thomas E. (thomase)


Lesenswert?

Meier M. schrieb:
> Brauche ich dazu
> ein drittprogramm welches dies für mich erledigt, oder kann ich das
> hex-file manuell über die serielle schnittstelle auf den Atmega 168
> laden? (Wenn ja auf was muss man achten dass der Programmcode am
> rictigen Ort landet?)

Wie schon im vorigen Post geschrieben, benutzt man dafür einen 
Bootloader.

Allerdings solltest du dir mal grundlegende Gedanken über den Sinn und 
die Verwendung von Programmcode und Daten machen.

Meier M. schrieb:
> Nach der Berechnung generiere ich das C-File mit
> den berechneten Kurvenpunkten, welches dann auf den Atmega 168 geladen
> werden sollen.

Das ist ziemlich unsinnig.
Man brennt nicht für jede Funktion ein neues Programm auf den 
Controller.

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Meier M. schrieb:
> Ich will einen Arbitrary Waveformgenerator basteln, welcher mit einigen
> kHz funktioniert. Dazu kann man über das C# Programm die Kurvenform
> auswählen (Sinus, Rechteck, Dreieck, Puls oder importierte Kurven)welche
> dann berechnet werden. Nach der Berechnung generiere ich das C-File mit
> den berechneten Kurvenpunkten, welches dann auf den Atmega 168 geladen
> werden sollen.
> Dazu muss das C-File zuerst kompiliert werden (AVR GCC) und danach
> möchte ich dieses hex-file hochladen aus dem C# Program. Das kompilieren
> sollte machbar sein, nur bin ich mir nicht ganz sicher wie ich nun aus
> dem C# Tool den Programmcode (HEX-File) hochladen kann. Brauche ich dazu
> ein drittprogramm welches dies für mich erledigt, oder kann ich das
> hex-file manuell über die serielle schnittstelle auf den Atmega 168
> laden? (Wenn ja auf was muss man achten dass der Programmcode am
> rictigen Ort landet?)

Du solltest das anders machen.

Das Programm auf dem µC wird überhaupt nicht geändert, sondern enthält 
Code, welcher es erlaubt, die Datenpunkt deiner Kurve per RS232 an den 
µC zu senden.
Dein C# Programm macht dann einfach eine serielle Schnittstelle auf, 
teilt dem µC darüber mit "Hier hast du eine neue Kurvenform", überträgt 
die Daten und das bereits im µC vorhandene Programm gibt die dann 
wieder.

Auf die gleiche Art und Weise teilt dein C# Programm dem µC dann auch 
noch mit, mit welcher Frequenz er die Schwingung erzeugen soll.

Du kaufst dir ja auch nicht, wegen jedem Mist ein neues Auto um damit 
nach Hause zu fahren und die Fische zu füttern, weil du das vergessen 
hast. Sondern du rufst zu Hause an und bittest deine 
Mutter/Vater/Schwester/Bruder/Ehefrau/Ehemann das für dich zu 
übernehmen.
Das sich 2 Computer miteinander unterhalten und der eine Kommandos an 
den anderen schickt, ist das normalste von der Welt. Das können durchaus 
auch textuelle Kommandos sein, auch wenn sich das heute im Zeitalter von 
Klickibunti keiner mehr vorstellen kann, dass man früher Computer durch 
die Eingabe von Kommandos in eine Textkonsole gesteuert und bedient hat.

von Meier M. (meier_m)


Lesenswert?

OK danke, werde ich so in Betracht ziehen ;). Kann ich dann die Daten in 
den Programflash schreiben (Immer natürlich an die gleiche Adresse, so 
dass das Program nicht überschrieben wird) oder muss dieser separat 
(EEPROM) gespeichert werden?

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Nein... Nur wenn diese Daten dauerhaft erhalten bleiben sollen (also 
auch nach dem ausschalten), muss das ins EEPROM. Ins Flash kommt sowas 
garnicht. Du solltest das einfach ins RAM laden.


Gruß
Jonathan

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.