Umprogrammierung eines AVR

Gast #97935
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
Gast
Das Zauberwort nennt sich "Bootloader". Funktioniert aber nicht bei
den gewöhnlichen AT90S (da geht es 100% nicht) sondern nur bei der
ATMEGA Serie.
Gast
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
Gast
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.
Gast
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
Gast
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
Gast
"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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.