Bedienpanel mit 20x4 und Softkeys

Hier könnt ihr Diskussionen über das Interface, die Stromversorgung und das Bedienpanel des c't-Lab führen.
Benutzeravatar
thoralt
Site Admin
Site Admin
Beiträge: 262
Registriert: 10.04.2006, 08:48
Wohnort: Chemnitz
Kontaktdaten:

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von thoralt »

Hallo Leute,
psclab38 hat geschrieben:Bevor Du eincheckst, synchronisiere Dich bitte mit Thoralt, den haben wir ja auch erst wieder aktiviert und wir sollten seinen Kreativitätschub positiv unterstützen :mrgreen:. Das TODO muß dann halt auch noch irgendwie verarztet werden.
Nun, ich habe derzeit kleine Änderungen in dds.h, dds-hw.h, main.c, timer.c sowie timer.h. Diese werden hoffentlich automatisch vom CVS gemerged. Größere Änderungen fanden bisher in dds-hw.c, panel.c und panel.h statt. Ich habe kein Problem damit, wenn Karsten erstmal eincheckt. Ich mache ein Backup von meinen Quellen und dann mal ein Update, mal sehen, was passiert. Die paar Kontrollen auf Konflikte an den für mich wichtigen Stellen habe ich dann schnell gemacht. Also, nur zu!
dg1vs hat geschrieben:Eine Sache habe ich noch offen, Macros für "Char" in sprintf oder ähnlichen Funktionen. Hat jemand einen guten Link zu dem Thema. Es geht um die "Sonderzeichen" die sich in Abhängigkeit vom benutzten Display unterscheiden. Und da sind wir auch bei den 2 Symbolen, wo eine Macroersetzung extrem hilfreich wäre. Auf die Schnelle ist mir nichts eingefallen.
Ich weiß nicht, ob ich das Problem richtig verstanden habe, aber wie wäre es mit einem Konstrukt wie folgendem:

Code: Alles auswählen

#define SONDERZEICHEN "\x05"
//#define SONDERZEICHEN "\x06"
//#define SONDERZEICHEN "\x07"
LCDOverwrite_P(... PSTR("Text" SONDERZEICHEN "Text");
Da kann man dann SONDERZEICHEN auf den passenden Wert definieren und das wird dann im String weiter unten mit eingebaut.

Viele Grüße
Thoralt
There are 10 kinds of people in this world: Those who understand binary and those who don't.
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von dg1vs »

psclab38 hat geschrieben:Hi Karsten,
dg1vs hat geschrieben:Eine Sache habe ich noch offen, Macros für "Char" in sprintf oder ähnlichen Funktionen. Hat jemand einen guten Link zu dem Thema. Es geht um die "Sonderzeichen" die sich in Abhängigkeit vom benutzten Display unterscheiden. Und da sind wir auch bei den 2 Symbolen, wo eine Macroersetzung extrem hilfreich wäre. Auf die Schnelle ist mir nichts eingefallen.
Diese Frage ist mir beim Review auch gekommen. Schade, daß man im String die #define-Konstanten nicht direkt einsetzen kann, zumindest wäre mir diese Möglichkeit noch nicht untergekommen.
Ich bleib dran. Angeblich ist der Präprozessor ja eine komplette Programmiersprache...
psclab38 hat geschrieben: Ich überleg mal grad so: Du hast ja die RAM-Zeichen des Displays für Deine Zwecke umdefiniert, aber eines (das erste) ist ja komplett leer. Und ein Leerzeichen gibt's aber schon im ROM des Displays; könnte man da nicht noch an die entsprechende Stelle bei 0x05 den Pfeil reinquetschen... und es wäre für beide Optionen zumindest hier gleich. Is' nur so eine Idee. Eine elegante Lösung für alle Optionen ist aber wohl nicht drin.
Mit der ersten Zeile ist ein Hack, der noch raus muss...

Trotzdem, sollte für die Sonderzeichen symbolische Werte benutzt werden. Das große Display hat ne Menge an sinnvollen Zeichen, da kommt das kleine nicht mit. ich hatte auch schon mit der Idee gespielt nach dem Start-Screen die RAM-Zeichen umzuladen. Trotzdem sollte es symbolisch gehen...

Im Anhang die Darstellungen, was im Code von gestern umgesetzt wurde (nur die fast sauberen Codeteile) und meine Wunschumsetzung, die aber so nicht in die Codebasis kann.

Schönen Sonntag noch

Karsten
Dateianhänge
display.pdf
Bilder mit den unterschiedlichen Darstellungen
(273.65 KiB) 251-mal heruntergeladen
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von dg1vs »

thoralt hat geschrieben:Hallo Leute,
psclab38 hat geschrieben:Bevor Du eincheckst, synchronisiere Dich bitte mit Thoralt, den haben wir ja auch erst wieder aktiviert und wir sollten seinen Kreativitätschub positiv unterstützen :mrgreen:. Das TODO muß dann halt auch noch irgendwie verarztet werden.
Nun, ich habe derzeit kleine Änderungen in dds.h, dds-hw.h, main.c, timer.c sowie timer.h. Diese werden hoffentlich automatisch vom CVS gemerged. Größere Änderungen fanden bisher in dds-hw.c, panel.c und panel.h statt. Ich habe kein Problem damit, wenn Karsten erstmal eincheckt. Ich mache ein Backup von meinen Quellen und dann mal ein Update, mal sehen, was passiert. Die paar Kontrollen auf Konflikte an den für mich wichtigen Stellen habe ich dann schnell gemacht. Also, nur zu!
dg1vs hat geschrieben:Eine Sache habe ich noch offen, Macros für "Char" in sprintf oder ähnlichen Funktionen. Hat jemand einen guten Link zu dem Thema. Es geht um die "Sonderzeichen" die sich in Abhängigkeit vom benutzten Display unterscheiden. Und da sind wir auch bei den 2 Symbolen, wo eine Macroersetzung extrem hilfreich wäre. Auf die Schnelle ist mir nichts eingefallen.
Ich weiß nicht, ob ich das Problem richtig verstanden habe, aber wie wäre es mit einem Konstrukt wie folgendem:

Code: Alles auswählen

#define SONDERZEICHEN "\x05"
//#define SONDERZEICHEN "\x06"
//#define SONDERZEICHEN "\x07"
LCDOverwrite_P(... PSTR("Text" SONDERZEICHEN "Text");
Da kann man dann SONDERZEICHEN auf den passenden Wert definieren und das wird dann im String weiter unten mit eingebaut.

Viele Grüße
Thoralt
Sowas in der Art, ich probier es heute Abend aus... Frau und Kinder... aber das kennst Du ja.
Einchecken auch!

Grüße Karsten
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von dg1vs »

Hallo Leute,

ich habe die Sachen in CVS eingecheckt. Diese Woche komme ich eh zu nichts mehr. Ich habe meine TODO's in der Liste fixiert und werde mich am nächsten Wochenende wieder intensiv dem Thema widmen.

Karsten
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von psclab38 »

dg1vs hat geschrieben:ich habe die Sachen in CVS eingecheckt. Diese Woche komme ich eh zu nichts mehr. Ich habe meine TODO's in der Liste fixiert und werde mich am nächsten Wochenende wieder intensiv dem Thema widmen.
Hi Karsten,

habe gerade die obsoleten "Enter"-Markierungen bei insgesamt 5 Strings (nicht nur drei) aus dem Sweep-Untermenü entsorgt; das war noch eine Hausaufgabe meinerseits. Das File hab ich wieder ins CVS gestellt.

Grüße
Paul

PS: ich hatte mir angewöhnt, das Changelog.txt bei Uploads zu pflegen; da behält man die Übersicht.
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von dg1vs »

Hallo *
Hi Paul,
psclab38 hat geschrieben: PS: ich hatte mir angewöhnt, das Changelog.txt bei Uploads zu pflegen; da behält man die Übersicht.
Asche auf meine Haupt ....Ok, beim nächsten Mal.

Eigentlich müßte man die Sammlung an Änderungen taggen/labeln und das neue Label beschreiben. Dazu kenne ich mich mit CVS nicht mehr wirklich gut aus, obwohl ich vor x-jahren in meiner ersten Firma CVS eingeführt habe. Privat SVN, dienstlich MKS, und Clearcase gibt mir leider keiner zurück.

Ich habe das Thema MMI nochmal durchdacht, und kann meine Frage klarer formulieren (dauert manchmal länger). Dazu folgende Frage:

Ich versuche ja "Enter" und "Back" mit getrennten Symbolen anzuzeigen. Dazu muss an den passenden Stellen ein Aufruf erfolgen. OK, das ist "fast" einfach.
Schwierig ist es in der aktuellen Umsetzung zu unterscheiden, ob es "Enter" oder "Back" ist, da nur auf
if(null!=(void*)pgm_read_word(&g_currentMenuItem->pSubmenu))
geprüft wird. Und da habe ich dann gepfuscht.... und es irgendwie probiert. Deswegen die Unterschiede zwischen Wunsch und CVS-Stand.

Der zweite schwierige Teil ist das Rücksetzen der "Enter" / "Back"-Symbole, da dies implizit passiert. Beim Umzug in die 3 Zeile fehlt der explizite Aufruf, den ich bei jedem Aufruf von jobPanel(void) durch eine Löschaktion der zwei Zeichen realisiert habe, was mir aber nicht wirklich gefällt.

Letze Anmerkung/Frage
macht es Sinn die Funktionalität TextScrollen aus jobPanel(void) rauszunehmen und in eine eigene Funktion
Panel_DoMenuTextScrolling(menu_entry_t *g_currentMenuItem)
zu packen?

Ok, kostet etwas Speicher, aber der Compiler sollte clever sein zu erkennen dass die Funktion nur einmal verwendet wird und so den Funktionaufruf wegoptimieren. Wir können ihm ja mit static helfen.


Grüße Karsten
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von psclab38 »

dg1vs hat geschrieben: Eigentlich müßte man die Sammlung an Änderungen taggen/labeln und das neue Label beschreiben. Dazu kenne ich mich mit CVS nicht mehr wirklich gut aus, ...
geht mir ähnlich. In den Changelog.txt kann man aber ausführlicher auflisten, als man das beim Einchecken machen würde. Außerdem ist die Info auch offline verfügbar.

dg1vs hat geschrieben: Ich versuche ja "Enter" und "Back" mit getrennten Symbolen anzuzeigen. Dazu muss an den passenden Stellen ein Aufruf erfolgen. OK, das ist "fast" einfach.
Schwierig ist es in der aktuellen Umsetzung zu unterscheiden, ob es "Enter" oder "Back" ist, da nur auf
if(null!=(void*)pgm_read_word(&g_currentMenuItem->pSubmenu))
geprüft wird. Und da habe ich dann gepfuscht.... und es irgendwie probiert. Deswegen die Unterschiede zwischen Wunsch und CVS-Stand.
Nur so 'ne Idee: die Menüebene mitzählen, in einer static-Variable. Wenn wir uns auch weiterhin auf eine Untermenüebene beschränken, dann wäre es einfach: wenn (Untermenü && Enter) dann Back. Wenn (Hauptmenü && Enter) dann Untermenü.

Übrigens noch so als Hinweis: es schließen sich Burst- und Sweepmodus gegenseitig aus. Ich glaube mich zu erinnern, daß der Sweep den Burstmodus implizit abschaltet; ich hab das aber jetzt nicht kontrolliert.

Grüße
Paul
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von dg1vs »

Hi Paul
psclab38 hat geschrieben:
dg1vs hat geschrieben: Ich versuche ja "Enter" und "Back" mit getrennten Symbolen anzuzeigen. Dazu muss an den passenden Stellen ein Aufruf erfolgen. OK, das ist "fast" einfach.
Schwierig ist es in der aktuellen Umsetzung zu unterscheiden, ob es "Enter" oder "Back" ist, da nur auf
if(null!=(void*)pgm_read_word(&g_currentMenuItem->pSubmenu))
geprüft wird. Und da habe ich dann gepfuscht.... und es irgendwie probiert. Deswegen die Unterschiede zwischen Wunsch und CVS-Stand.
Nur so 'ne Idee: die Menüebene mitzählen, in einer static-Variable. Wenn wir uns auch weiterhin auf eine Untermenüebene beschränken, dann wäre es einfach: wenn (Untermenü && Enter) dann Back. Wenn (Hauptmenü && Enter) dann Untermenü.
mal sehen, könnte funktionieren
psclab38 hat geschrieben: Übrigens noch so als Hinweis: es schließen sich Burst- und Sweepmodus gegenseitig aus. Ich glaube mich zu erinnern, daß der Sweep den Burstmodus implizit abschaltet; ich hab das aber jetzt nicht kontrolliert.
Ich habe den Code jetzt nicht kontrolliert, aber ich kann gleichzeitig Burst- und Sweepmodus anschalten.

Jetzt noch ne Idee:
Was haltet Ihr von folgendem Vorgehen:

Code: Alles auswählen

#define PANEL_STR_SWEEP_UP 			"Up"
#define PANEL_STR_SWEEP_DOWN 			"Down"
#define PANEL_STR_SWEEP_UPDOWN 		"Up+Down"

#define PANEL_MENU_STR_FREQUENCY		"Frequency"
und hier die zwei Nutzungsmöglichkeiten.

Erste Variante:

Code: Alles auswählen

menu_entry_t PROGMEM MenuFrequency = {
		.cName = PANEL_MENU_STR_FREQUENCY,
		.pEncoderFunction = FrequencyEncoderFunction,
		.pEnterFunction = FrequencyEnterFunction,
		.pUpdateDisplayFunction = FrequencyUpdateDisplayFunction,
		.pSubmenu = null,
		.pPrevious = (void*)&MenuSettings,
		.pNext = (void*)&MenuLevel,
		.iEI1 = 250, .iEI2 = 50, .iEI3 = 10, .iEI4 = 1,
		.pParam = &(Params.dFrequency), .ucIdentifier = MENU_FREQUENCY};
Damit wäre hier die einfache Anpassungen an Landessprachen möglich. Obwohl DDS in kyrillisch :shock:

Interessanter ist aber folgende Nutzung:

Code: Alles auswählen

void SweepSlopeUpdateDisplayFunction(uint8_t ucForceUpdate,
		void *pParam __attribute__((unused)))
{
	if((LastParams.ucSweepSlope!=Params.ucSweepSlope)||ucForceUpdate)
	{
		// display new setting
		switch(Params.ucSweepSlope)
		{
			case SWEEP_UP:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_UP)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_UP)-1), PSTR(PANEL_STR_SWEEP_UP));
				break;
			case SWEEP_DOWN:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_DOWN)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_DOWN)-1), PSTR(PANEL_STR_SWEEP_DOWN));
				break;
			case SWEEP_UPDOWN:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_UPDOWN)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_UPDOWN)-1), PSTR(PANEL_STR_SWEEP_UPDOWN));
				break;
		}
	}
}

Auch wenn es jetzt erstmal chaotischer aussieht, ich bekomme aber so die redundante Nutzung der Längeninformation weg. Letztlich wird 3 mal die Information über den String benutzt, 2 x mal die Länge und einmal der String. Damit es schön wird, müßte man dass Ganze noch in ein Gesamtmakro packen. Nachteil: einmal + einmal -.

Grüße Karsten

PS: sizeof wird zur Compile-Zeit ausgewertet.
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von dg1vs »

Das kommt raus -> DDSFirmware.lss:

Code: Alles auswählen

000009e1 <__c.2162>:
     9e1:	55 70 2b 44 6f 77 6e 00                             Up+Down.

000009e9 <__c.2159>:
     9e9:	44 6f 77 6e 00                                      Down.

000009ee <__c.2155>:
     9ee:	55 70 00                                            Up.
und

Code: Alles auswählen

			case SWEEP_UP:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_UP)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_UP)-1), PSTR(PANEL_STR_SWEEP_UP));
    63fa:	86 e0       	ldi	r24, 0x06	; 6
    63fc:	61 e0       	ldi	r22, 0x01	; 1
    63fe:	42 e0       	ldi	r20, 0x02	; 2
    6400:	2e ee       	ldi	r18, 0xEE	; 238
    6402:	39 e0       	ldi	r19, 0x09	; 9
    6404:	05 c0       	rjmp	.+10     	; 0x6410 <SweepSlopeUpdateDisplayFunction+0x36>
				break;
			case SWEEP_DOWN:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_DOWN)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_DOWN)-1), PSTR(PANEL_STR_SWEEP_DOWN));
    6406:	84 e0       	ldi	r24, 0x04	; 4
    6408:	61 e0       	ldi	r22, 0x01	; 1
    640a:	44 e0       	ldi	r20, 0x04	; 4
    640c:	29 ee       	ldi	r18, 0xE9	; 233
    640e:	39 e0       	ldi	r19, 0x09	; 9
    6410:	0c 94 49 16 	jmp	0x2c92	; 0x2c92 <LCDOverwrite_P>
				break;
			case SWEEP_UPDOWN:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_UPDOWN)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_UPDOWN)-1), PSTR(PANEL_STR_SWEEP_UPDOWN));
    6414:	81 e0       	ldi	r24, 0x01	; 1
    6416:	61 e0       	ldi	r22, 0x01	; 1
    6418:	47 e0       	ldi	r20, 0x07	; 7
    641a:	21 ee       	ldi	r18, 0xE1	; 225
    641c:	39 e0       	ldi	r19, 0x09	; 9
    641e:	0c 94 49 16 	jmp	0x2c92	; 0x2c92 <LCDOverwrite_P>
    6422:	08 95       	ret
Grüße Karsten
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von psclab38 »

dg1vs hat geschrieben:
psclab38 hat geschrieben: Übrigens noch so als Hinweis: es schließen sich Burst- und Sweepmodus gegenseitig aus. Ich glaube mich zu erinnern, daß der Sweep den Burstmodus implizit abschaltet; ich hab das aber jetzt nicht kontrolliert.
Ich habe den Code jetzt nicht kontrolliert, aber ich kann gleichzeitig Burst- und Sweepmodus anschalten.
Anschalten schon, aber der Burstmodus dominiert und es kommt nur der Burst aus der Buchse. Die Sweepfunktion ist inaktiv, solange der Burstmodus an ist. Schaltet man den Burst wieder ab, dann ist der Sweep wieder da. Das SweepMenü zeigt aber immer "On"... . Wenn das irritieren sollte, dann kann man da ja eine gegenseitige Abschaltung für Burst und Sweep nachrüsten.
dg1vs hat geschrieben:Jetzt noch ne Idee:
Was haltet Ihr von folgendem Vorgehen:
...

Code: Alles auswählen

void SweepSlopeUpdateDisplayFunction(uint8_t ucForceUpdate,
		void *pParam __attribute__((unused)))
{
	if((LastParams.ucSweepSlope!=Params.ucSweepSlope)||ucForceUpdate)
	{
		// display new setting
		switch(Params.ucSweepSlope)
		{
			case SWEEP_UP:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_UP)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_UP)-1), PSTR(PANEL_STR_SWEEP_UP));
				break;
			case SWEEP_DOWN:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_DOWN)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_DOWN)-1), PSTR(PANEL_STR_SWEEP_DOWN));
				break;
			case SWEEP_UPDOWN:
				LCDOverwrite_P((SPALTEN_MAX + 1 - sizeof(PANEL_STR_SWEEP_UPDOWN)), DISPLAY_LINE_1, (sizeof(PANEL_STR_SWEEP_UPDOWN)-1), PSTR(PANEL_STR_SWEEP_UPDOWN));
				break;
		}
	}
}
Auch wenn es jetzt erstmal chaotischer aussieht, ich bekomme aber so die redundante Nutzung der Längeninformation weg. Letztlich wird 3 mal die Information über den String benutzt, 2 x mal die Länge und einmal der String. Damit es schön wird, müßte man dass Ganze noch in ein Gesamtmakro packen. Nachteil: einmal + einmal -.
Jaaa, schon. Aber der Aufwand zur Vermeidung von ein wenig Kopfrechnen oder Buchstabenzählen? :roll: Also wenn Du das in ein optisch ansprechendes Makro verpacken kannst, dann von mir aus... so isses fast unübersichtlicher als vorher.

Grüße
Paul
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von dg1vs »

Hallo,

anbei die "Mechanik"-Files. Die Diskussion ist zwar in die Softwareecke abgerutscht, deswegen hier Schaltung, Leiterplatte und Frontplatte zum Nachbauen.

Schönes Wochenende

Karsten
Dateianhänge
mechanik.zip
(85.62 KiB) 248-mal heruntergeladen
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von dg1vs »

Hallo *,
speziell Thoralt und Paul,

ich habe aktuell einen Stand, der ungefähr dem entspricht, was ich mir als erste Version vorgestellt habe. Die Version passt auch in den Standard µC. Bei der Version mit dem große Display habe ich über Macro die Kombination mit ENCODER_NAVIGATION verboten, da die Zeichensätze aktuell nicht vorhanden (Start-Screen) sind. Wenn Bedarf besteht, baue ich einen zweiten Zeichensatz mit ein.

Aktuell versuche ich noch den Code etwas bezüglich Speicher zu optimieren. Mit PWM und großen Display liege ich auf dem ATMEGA32 bei:
Program: 32066 bytes (97.9% Full). Compiler ist der WinAVR-20100110.

Was noch auf der Agenda liegt, ist die Verriegelung von Burst/Sweep/PWM. Ist diese schon angedacht, oder habe ich bei der Darstellung nen Fehler gemacht? Ich habe es noch nicht geschafft da reinzuschauen.

Schöne Woche und Grüße

Karsten
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von psclab38 »

dg1vs hat geschrieben: Aktuell versuche ich noch den Code etwas bezüglich Speicher zu optimieren. Mit PWM und großen Display liege ich auf dem ATMEGA32 bei:
Program: 32066 bytes (97.9% Full). Compiler ist der WinAVR-20100110.
Hi Karsten,

probier' mal den WinAVR 20080610. Alle neueren schleppen eine deutlich größere libc mit sich rum.
dg1vs hat geschrieben:Was noch auf der Agenda liegt, ist die Verriegelung von Burst/Sweep/PWM. Ist diese schon angedacht, oder habe ich bei der Darstellung nen Fehler gemacht? Ich habe es noch nicht geschafft da reinzuschauen.
Die gegenseitige Abschaltung würde ich in main.c in der Funktion jobExecute() unterbringen, wie schon offline besprochen. Da werden die gegenseitigen Abhängigkeiten abgeglichen; ich würde bei der Auswahl einer der drei Optionen einfach die beiden anderen abschalten. M. E. können die sowieso nicht kombiniert werden.
Ich hatte bislang den Eindruck, daß Thoralt und Du das unter Euch ausmacht. Ich wollte da nicht auch noch Verwirrung stiften, indem ich als dritter am Code arbeite.

Grüße
Paul
Benutzeravatar
thoralt
Site Admin
Site Admin
Beiträge: 262
Registriert: 10.04.2006, 08:48
Wohnort: Chemnitz
Kontaktdaten:

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von thoralt »

dg1vs hat geschrieben:Aktuell versuche ich noch den Code etwas bezüglich Speicher zu optimieren.
Ich hatte mal vor einiger Zeit das bisherige Minimum (allerdings mit neuem Compiler/neuer libc) mit folgendem Compileraufruf erreicht:

Code: Alles auswählen

avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -I /usr/local/AVRMacPack/include -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wextra -Werror -Wstrict-prototypes -Wa,-adhlns=uart.lst  -std=gnu99 -fno-inline-small-functions -fno-split-wide-types -fno-tree-scev-cprop -ffreestanding -ffunction-sections -fdata-sections -mcall-prologues --combine -fwhole-program -Wl,--relax,--gc-sections,-Map=dds.map,--cref,-u,vfprintf -MD -MP parser.c timer.c dds-hw.c dds-parser.c encoder.c i2c.c i2creg.c lcd.c panel.c main.c uart.c --output dds.elf -lprintf_flt -lm
Der Trick ist hier, dass alles in einem Durchgang und als eigenständiges Programm (-fwhole-program) übersetzt wird. Das spart bei mir gegenüber der herkömmlichen Art mit Makefile nochmal 400 Bytes.

Viele Grüße
Thoralt
There are 10 kinds of people in this world: Those who understand binary and those who don't.
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: Bedienpanel mit 20x4 und Softkeys

Beitrag von psclab38 »

thoralt hat geschrieben: Der Trick ist hier, dass alles in einem Durchgang und als eigenständiges Programm (-fwhole-program) übersetzt wird. Das spart bei mir gegenüber der herkömmlichen Art mit Makefile nochmal 400 Bytes.
Ich komme auf folgende Ergebnisse, mit dem DDS-C-Codestand von heute aus dem CVS:

normal compiliert (AVR-Studio)
WinAVR-20080610: 30986

allinone compiliert
WinAVR-20080610: 30796
WinAVR-20090313: 31700

Das all-in-one bringt 190 Byte, mit dem guten "alten" WinAVR-20080610.

Grüße
Paul
Antworten