Forum: Compiler & IDEs LCD Userinterface


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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

von Peter (Gast)


Lesenswert?

> 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

von Falk B. (falk)


Lesenswert?

@  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

von Peter (Gast)


Lesenswert?

> @  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
Noch kein Account? Hier anmelden.