Hallo! Dies ist mein erstes richtiges projekt mit einem µC und C als Sprache. Es handelt sich um eine Stoppuhr mit Speicher für mehrere Runden/Werte und dabei habe ich auch kein Problem. Eine Debounce Funktion habe ich mit Absicht noch nicht eingebaut. Es können mehrere Betriebsmodi verwendet werden, welches Programm man nutzen möchte wird beim Start über ein Userinterface ausgewählt. Ebenso können verschiedene Setup Werte über ein UI geändert werden. Der "proof of concept" Code dafür ist fertig. Ich habe nur das Gefühl das das ganze irgendwie suboptimal gelöst ist. Es würde mich freuen wenn ich jemand mal den Codeschnipsel anschauen würd und mir sagen könnte ob es wirklich sehr krude gelöst ist. Mir fällt leider keine andere Lösung ein. Ich hab eine Zip mit dem Code und zwei Bildern der Ausgabe angehängt damit man sich vorstellen kann wie das ganze ausschaut. Der Ablauf ist folgender: Start -> UI zur Programmauswahl anzeigen -> Programm auswählen und starten. Ich habe, um es besser lesbar zu machen alles aus dem Code rausgenommen was nichts damit zu tun hat und nach bestem Willen kommentiert. Vielen Dank schon einmal! Mfg, Peter
@ Peter (Gast) >Ich habe nur das Gefühl das das ganze irgendwie suboptimal gelöst ist. Ja, so viele _delay_ms in einem Programm können nicht gut sein. Warum taktest du deinen uC nicht ei nfach mit 50 Hz Netzfrequenz? Sowas macht man per Timer und Interrupt üer ein Flag. >Es würde mich freuen wenn ich jemand mal den Codeschnipsel anschauen >würd und mir sagen könnte ob es wirklich sehr krude gelöst ist. Jain. es gibt wie immer Verbesserungsmöglichkeiten. > lcd_gotoxy(0,0); > lcd_puts(" Select Program"); > lcd_gotoxy(1,1); > lcd_puts("FastDraw Stopwatch"); > lcd_gotoxy(1,2); > lcd_puts("IPSC PPC"); > lcd_gotoxy(1,3); > lcd_puts("Chrono Duel"); Diese vielen konstanten String brauchen so doppelt Speicher, im Flash und im RAM. Mit der Funktion PSTR() un eine kleine Anpassung von lcd_puts() kann man die konstanten Strings in den Flash verschieben, siehe Doku der libc zum Themas sprintf(). > lcd_gotoxy(0,1); > lcd_puts(">"); > break; Hier reicht es EINMAL ein lcd_puts(">"); NACH dem switch zu machen, spart Programmspeicher. Genauso in main. while (1) { > // wenn runter taste gedrückt auswahl erhöhen > if ( button_active(down) && active_programm < 5) { > active_programm++; > lcd_draw_ui(3); > _delay_ms(100); > } MfG Falk
> Falk: > Ja, so viele _delay_ms in einem Programm können nicht gut sein. Warum > taktest du deinen uC nicht ei nfach mit 50 Hz Netzfrequenz? > Sowas macht man per Timer und Interrupt üer ein Flag. Ja, ich weiss... theoretisch weiss ich auch wie das geht an der praktischen umsetzung hapert es nur noch. Da ich gern ein repeat beim gedrückt halten und eine erkennung von zwei gleichzeitigen Tastendrücken als Metataste haben möchte. > Falk: > Hier reicht es EINMAL ein lcd_puts(">"); NACH dem switch zu machen, > spart Programmspeicher. Genauso in main. Oh, stimmt ja, das macht mehr Sinn, danke! > Falk: > Diese vielen konstanten String brauchen so doppelt Speicher, im Flash > und im RAM. Mit der Funktion PSTR() un eine kleine Anpassung von > lcd_puts() kann man die konstanten Strings in den Flash verschieben, > siehe Doku der libc zum Themas sprintf(). Stimmt, daran hatte ich garnicht gedacht. Danke für die Tips! Mfg, Peter
@ Peter (Gast) >Da ich gern ein repeat beim gedrückt halten und eine erkennung von zwei >gleichzeitigen Tastendrücken als Metataste haben möchte. Lässt sich alles problemlos mit einem Timer machen. MFG Falk
> @ Peter (Gast) > > > Da ich gern ein repeat beim gedrückt halten und eine erkennung von zwei > > gleichzeitigen Tastendrücken als Metataste haben möchte. > > Lässt sich alles problemlos mit einem Timer machen. Ja, ich weiss. Ist nun auch eingebaut ;) Mfg, Peter
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.