Forum: Mikrocontroller und Digitale Elektronik Umprogrammierung eines AVR


von Kay (Gast)


Lesenswert?

Hallo,

ich habe an meinem AVR 3 Taster und 3 Led´s angeschlossen. Funktioniert
auch alles einwandfrei. Nun zu meiner Frage. Wenn ich jetzt z.B. will,
das er wenn ich Taste 1 drücke, die led1 einschaltet. Wenn ich Taste 2
drücke soll er Led2 leuchten lassen usw. Soweit ist auch alles klar.
Jetzt möchte ich eine Software schreiben, mit der ich über die serielle
schnittstelle diese Programmierung ändern kann. Wie mache ich das am
besten. also über die serielle schicke ich dann an den AVR : "Wenn
Taste 1 dann Led2" "Wenn Taste 2 dann Led3" usw. ab dann soll diese
programmierung gelten. also ich will nicht jedesmal den AVR mit
PonyProg brennen. Ich hoffe ich habe mich nicht zu undeutlich
ausgedrückt. Vielleicht kann mir ja jemand helfen.

mfg Kay

von Malte Marwedel (Gast)


Lesenswert?

Das Zauberwort nennt sich "Bootloader". Funktioniert aber nicht bei
den gewöhnlichen AT90S (da geht es 100% nicht) sondern nur bei der
ATMEGA Serie.

von Frankl (Gast)


Lesenswert?

Vielleicht meinst Du auch das du Kommandos über Hyperterm gibst und der
µP sie auswertet und entsprechend reagiert.

von Kay (Gast)


Lesenswert?

hi,

also das was frankl schrieb, klingt eher nach dem, nach dem ich suche.
also ich will über hyperterm den Befehl "Taste1 = Led1" senden. wenn
ich dann taste1 drücke, dann soll Led1 angehen. Wenn ich wieder über
hyperterm "Taste1 = Led2" sende, dann soll in Zukunft wenn ich Tast1
drücke die Led2 angehen. solange bis ich wieder einen anderen befehl
sende

von Malte Marwedel (Gast)


Lesenswert?

Ah, so meinst du das. Das geht mit jedem AVR, der einen UART hat.
Wie wäre es, wenn du eine Endlosschleife nimmst, die bei jedem
Durchgang nachsieht ob ein neues Zeichen im UART eingetroffen ist. Wenn
dies der Fall ist wird das Zeichen aus dem UART ausgelesen und je nach
Wert entsprechend reagiert, z.B. ein Unterprogramm aufgerufen, welches
dann die einzelnen LEDs an oder aus schalten kann.

von miwitt001 (Gast)


Lesenswert?

Ich würd das einfach so machen: du sendest an den MC einen String mit
der Länge 3. Die erste Zahl sagt dann welche LED bei Taster 1 leuchtet
usw.

Bsp:
String : 312
Taster1: LED3
Taster2: LED1
Taster3: LED2

Man könnte das ganz noch kleiner machen, indem man statt den 3 Zahlen
nur ein Byte nimmt und jede Zahl (die ja nur zw 1 und 3 sein kann) mit
2 Bits codiert und halt dann noch mit Nullen auffüllt oder so. Dann
wäre obiges Bsp auf das verkürzt:
00110110 = 0x36

Das schreibst du in ne Variable x und im Programm dann eine (hier
Pseudo-c-)Funktion die aufgerufen wird, wenn man Taster 1 drückt:

switch(x & 0x30) //Taster 1
{
case 1:
           LED1 an/aus
break;
case 2:
           LED2 an/aus
break;
case 3:
           LED3 an/aus
break;
};

Hoffe mal du weißt was ich meine.

mfg Michael

von Stefan (Gast)


Lesenswert?

Ergänzung zu Malte:
siehe AVR-Tutorial-6. Das UART

Gruß,
Stefan

von Andreas Auer (Gast)


Lesenswert?

Und wenn die Werte nach einer Unterbrechung der Spannungsversorgung auch
genauso weiterverwendet werden sollen, würd ich das ganze noch ins
EEPROM schreiben.
Dann müsstest also bei neuen Werten für die Taster, die Werte sofort
ins EEPROM schreiben. Wenn nun ein Taster gedrückt wird, liest du nur
den entsprechenden Wert aus dem EEPROM und schaltest dann die richtige
LED ein.

mfg
Andreas

--
Andreas Auer             aauer1 (at) sbox.tugraz.at
Student of Telematics    http://home.pages.at/aauer1
Graz, University of Technology

von Tobi (Gast)


Lesenswert?

"Wenn nun ein Taster gedrückt wird, liest du nur
den entsprechenden Wert aus dem EEPROM und schaltest dann die richtige
LED ein."

beim startup ins ram/register kopieren. geht schneller und einfacher

von Kay (Gast)


Lesenswert?

Hi Andreas,

das was Du geschrieben hast ist das was ich suche. vielen dank

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.