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
Das Zauberwort nennt sich "Bootloader". Funktioniert aber nicht bei den gewöhnlichen AT90S (da geht es 100% nicht) sondern nur bei der ATMEGA Serie.
Vielleicht meinst Du auch das du Kommandos über Hyperterm gibst und der µP sie auswertet und entsprechend reagiert.
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
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.
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
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
"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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.