Displayoutput on TX Controler
Forumsregeln
Bitte beachte die Forumsregeln!
Bitte beachte die Forumsregeln!
-
- Beiträge: 7
- Registriert: 09 Aug 2013, 10:13
Displayoutput on TX Controler
Hallo,
ich wollte einen einfachen Displayoutput mit der DisplayMsg Funktion (die in der C-Compiler Dokumentation erwähnt wurde) machen indem ich ein vorhandenes Beispiel editiere (hier StopGo.c). Dort habe ich die ProgInit Funktion unberührt gelassen und soziemlich den kompletten Programmcode von ProgTic gelöscht. Gelassen habe ich lediglich
"TA * p_ta = &p_ta_array[TA_IDX];"
das als Argument der DisplayMsg, neben der eigentlichen Ausgabe, übergeben werden musste (der Pointer p_ta_array wurde vorher ProgTic übergeben). Das Compilieren ging auch ohne Probleme wie auch das flashen. Jedoch bleibt der Controller hängen, sobald ich das Programm ausführen möchte.
Hier noch kurz die Definition von DisplayMsg: void (*DisplayMsg) (struct ta_s * p_ta, char * p_msg).
Also wollte ich fragen, ob ich irgendwas in ProgInit ändern muss (eine Flag z.B.) und könnte jemand vielleicht ein (funktionierendes) Beispiel mit einer Programmausgabe posten, da ich seit einiger Zeit einfach nicht mehr voran komme?
Mit freundlichen Grüßen
ich wollte einen einfachen Displayoutput mit der DisplayMsg Funktion (die in der C-Compiler Dokumentation erwähnt wurde) machen indem ich ein vorhandenes Beispiel editiere (hier StopGo.c). Dort habe ich die ProgInit Funktion unberührt gelassen und soziemlich den kompletten Programmcode von ProgTic gelöscht. Gelassen habe ich lediglich
"TA * p_ta = &p_ta_array[TA_IDX];"
das als Argument der DisplayMsg, neben der eigentlichen Ausgabe, übergeben werden musste (der Pointer p_ta_array wurde vorher ProgTic übergeben). Das Compilieren ging auch ohne Probleme wie auch das flashen. Jedoch bleibt der Controller hängen, sobald ich das Programm ausführen möchte.
Hier noch kurz die Definition von DisplayMsg: void (*DisplayMsg) (struct ta_s * p_ta, char * p_msg).
Also wollte ich fragen, ob ich irgendwas in ProgInit ändern muss (eine Flag z.B.) und könnte jemand vielleicht ein (funktionierendes) Beispiel mit einer Programmausgabe posten, da ich seit einiger Zeit einfach nicht mehr voran komme?
Mit freundlichen Grüßen
Re: Displayoutput on TX Controler
Es wurde helfen das gesammte Program hier zu zeigen.
Re: Displayoutput on TX Controler
Hallo Hans.Meyer,
HIer habe ich mal ein Stück code eingehängt, das einfach als Test verschiedene Pixelmuster auf dem Display anzeigt. Vielleicht hilft das ja weiter.
Das Feld FrameBUffer8 wird gefüllt, und im TA feld daraufverwiesen. Wichtig ist die id uverändern um eine Änderung anzuzeigen.
Grüße Joachim
HIer habe ich mal ein Stück code eingehängt, das einfach als Test verschiedene Pixelmuster auf dem Display anzeigt. Vielleicht hilft das ja weiter.
Das Feld FrameBUffer8 wird gefüllt, und im TA feld daraufverwiesen. Wichtig ist die id uverändern um eine Änderung anzuzeigen.
Grüße Joachim
Code: Alles auswählen
//=============================================================================
// Demo program "Stop and go".
//
// Can be run under control of the ROBO TX Controller
// firmware in download (local) mode.
// Starts and stops motor connected to outputs M1 by means
// of the button connected to the input I8. Pulses from the
// motor are calculated by the counter C1. The motor is
// stopped after the counter reaches the value of 1000.
//
// Disclaimer - Exclusion of Liability
//
// This software is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. It can be used and modified by anyone
// free of any license obligations or authoring rights.
//=============================================================================
#include "ROBO_TX_PRG.h"
#include "Display.h"
#define TA_IDX TA_LOCAL
//#define TA_IDX TA_EXT_1
#define BUTTON_NUMBER 8
#define BUTTON_IDX (BUTTON_NUMBER - 1)
static INT16 prev_button_state;
UCHAR8 FrameBuffer8[DISPLAY_MAXIDX_B]; // Frame Buffer
static INT32 timer;
/*-----------------------------------------------------------------------------
* Function Name : PrgInit
*
* This it the program initialization.
* It is called once.
*-----------------------------------------------------------------------------*/
void PrgInit
(
TA * p_ta_array, // pointer to the array of transfer areas
int ta_count // number of transfer areas in array (equal to TA_COUNT)
)
{
TA * p_ta = &p_ta_array[TA_IDX];
UINT16 i;
// Initialize display buffer
for (i = 0; i < DISPLAY_MAXIDX_B; i++)
FrameBuffer8[i] = 0;
// Inform firmware that configuration was changed
p_ta->state.config_id += 1;
timer = 0;
}
/*-----------------------------------------------------------------------------
* Function Name : PrgTic
*
* This is the main function of this program.
* It is called every tic (1 ms) realtime.
*-----------------------------------------------------------------------------*/
int PrgTic
(
TA * p_ta_array, // pointer to the array of transfer areas
int ta_count // number of transfer areas in array (equal to TA_COUNT)
)
{
int rc = 0x7FFF; // return code: 0x7FFF - program should be further called by the firmware;
// 0 - program should be normally stopped by the firmware;
// any other value is considered by the firmware as an error code
// and the program is stopped.
TA * p_ta = &p_ta_array[TA_IDX];
DISPLAY_FRAME * p_df = &p_ta->display.display_frame;
INT16 i;
if (timer == 0)
{
p_df->frame = FrameBuffer8;
p_df->is_pgm_master_of_display = TRUE;
p_df->id++;
}
if (timer == 4000)
{
for (i = 0; i < DISPLAY_MAXIDX_B; i += (DISPLAY_W_B/8 + 1))
FrameBuffer8[i] = 0xFF;
p_df->id++;
}
if (timer == 8000)
{
for (i = 0; i < DISPLAY_MAXIDX_B; i++)
FrameBuffer8[i] = 0xAA;
p_df->id++;
}
if (timer == 12000)
{
p_df->is_pgm_master_of_display = FALSE;
p_df->id++;
}
if (timer == 16000)
return 0;
timer++;
return rc;
}
-
- Beiträge: 7
- Registriert: 09 Aug 2013, 10:13
Re: Displayoutput on TX Controler
Hallo Jona,
Danke dass ruhiger Code gepostet hast muss aber leider sagen, dass ich in letzter zeit nicht mehr ganz so oft zum arbeiten am Controller gekommen bin und könnte bis jetzt den Code auch nicht ausprobieren.
Sorry auch für den Post vor 10 Std, hab leider ganz vergessen, dass ich hier schon mal etwas geschrieben habe zum gleichen Thema, werde ab jetzt probieren nicht mehr so durch die Gegend zu Posten und probiere euch bei Ergebnissen auf dem neusten stand zu halten.
Danke aber für eure Bemühungen und ich werde mich bessern was das verhalten hier im Forum angeht.
Mit freundlichen Grüßen
Adrian
Danke dass ruhiger Code gepostet hast muss aber leider sagen, dass ich in letzter zeit nicht mehr ganz so oft zum arbeiten am Controller gekommen bin und könnte bis jetzt den Code auch nicht ausprobieren.
Sorry auch für den Post vor 10 Std, hab leider ganz vergessen, dass ich hier schon mal etwas geschrieben habe zum gleichen Thema, werde ab jetzt probieren nicht mehr so durch die Gegend zu Posten und probiere euch bei Ergebnissen auf dem neusten stand zu halten.
Danke aber für eure Bemühungen und ich werde mich bessern was das verhalten hier im Forum angeht.
Mit freundlichen Grüßen
Adrian
-
- Beiträge: 7
- Registriert: 09 Aug 2013, 10:13
Re: Displayoutput on TX Controler
jona2004 hat geschrieben:Hallo Hans.Meyer,
HIer habe ich mal ein Stück code eingehängt, das einfach als Test verschiedene Pixelmuster auf dem Display anzeigt. Vielleicht hilft das ja weiter.
Das Feld FrameBUffer8 wird gefüllt, und im TA feld daraufverwiesen. Wichtig ist die id uverändern um eine Änderung anzuzeigen.
Grüße JoachimCode: Alles auswählen
//============================================================================= // Demo program "Stop and go". // // Can be run under control of the ROBO TX Controller // firmware in download (local) mode. // Starts and stops motor connected to outputs M1 by means // of the button connected to the input I8. Pulses from the // motor are calculated by the counter C1. The motor is // stopped after the counter reaches the value of 1000. // // Disclaimer - Exclusion of Liability // // This software is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. It can be used and modified by anyone // free of any license obligations or authoring rights. //============================================================================= #include "ROBO_TX_PRG.h" #include "Display.h" #define TA_IDX TA_LOCAL //#define TA_IDX TA_EXT_1 #define BUTTON_NUMBER 8 #define BUTTON_IDX (BUTTON_NUMBER - 1) static INT16 prev_button_state; UCHAR8 FrameBuffer8[DISPLAY_MAXIDX_B]; // Frame Buffer static INT32 timer; /*----------------------------------------------------------------------------- * Function Name : PrgInit * * This it the program initialization. * It is called once. *-----------------------------------------------------------------------------*/ void PrgInit ( TA * p_ta_array, // pointer to the array of transfer areas int ta_count // number of transfer areas in array (equal to TA_COUNT) ) { TA * p_ta = &p_ta_array[TA_IDX]; UINT16 i; // Initialize display buffer for (i = 0; i < DISPLAY_MAXIDX_B; i++) FrameBuffer8[i] = 0; // Inform firmware that configuration was changed p_ta->state.config_id += 1; timer = 0; } /*----------------------------------------------------------------------------- * Function Name : PrgTic * * This is the main function of this program. * It is called every tic (1 ms) realtime. *-----------------------------------------------------------------------------*/ int PrgTic ( TA * p_ta_array, // pointer to the array of transfer areas int ta_count // number of transfer areas in array (equal to TA_COUNT) ) { int rc = 0x7FFF; // return code: 0x7FFF - program should be further called by the firmware; // 0 - program should be normally stopped by the firmware; // any other value is considered by the firmware as an error code // and the program is stopped. TA * p_ta = &p_ta_array[TA_IDX]; DISPLAY_FRAME * p_df = &p_ta->display.display_frame; INT16 i; if (timer == 0) { p_df->frame = FrameBuffer8; p_df->is_pgm_master_of_display = TRUE; p_df->id++; } if (timer == 4000) { for (i = 0; i < DISPLAY_MAXIDX_B; i += (DISPLAY_W_B/8 + 1)) FrameBuffer8[i] = 0xFF; p_df->id++; } if (timer == 8000) { for (i = 0; i < DISPLAY_MAXIDX_B; i++) FrameBuffer8[i] = 0xAA; p_df->id++; } if (timer == 12000) { p_df->is_pgm_master_of_display = FALSE; p_df->id++; } if (timer == 16000) return 0; timer++; return rc; }
Hallo,
habe deinen Code mal kopiert und wollte diesen Compilieren. Leider kommt dann die Fehlermeldung, dass die Header-Datei "Display.h" nicht vorhanden ist.
Darum wollte ich nachfragen, wo man sie herbekommen kann, da es scheint, dass es eine essentielle Datei ist.
Mit freundlichen Grüßen
Re: Displayoutput on TX Controler
Hallo Helmut,
Das ist kein Problem, ich hoffe es kompiliert sauber. Da sind ein paar deklarationen drin, die für den einfachen Test nicht gebraucht werden. Ich habe mir mal ein paar routine geschrieben, die ein größeren text (16x16, 24x24 oider 32x32) Pixel aufs Display schreiben, da Meldungen schon recht schwierig zu lesen sind. Für den einfachen Test werden nur die Konstanten DISPLAY_.... gebraucht.
Viel Erfolg Joachim
Das ist kein Problem, ich hoffe es kompiliert sauber. Da sind ein paar deklarationen drin, die für den einfachen Test nicht gebraucht werden. Ich habe mir mal ein paar routine geschrieben, die ein größeren text (16x16, 24x24 oider 32x32) Pixel aufs Display schreiben, da Meldungen schon recht schwierig zu lesen sind. Für den einfachen Test werden nur die Konstanten DISPLAY_.... gebraucht.
Viel Erfolg Joachim
Code: Alles auswählen
/*********************************************************
* Defines for the PixelRoutines
*********************************************************/
#ifndef _DISPLAY_H_
#define _DISPLAY_H_
/* Definitions RoboTX LCD in pixel */
#define DISPLAY_W_P 128 /* Display Width in Pixel */
#define DISPLAY_H_P 64 /* Display Height in Pixel */
#define DISPLAY_W_B DISPLAY_W_P/8 /* Display Width in bytes */
#define DISPLAY_MAXIDX_B DISPLAY_W_B*DISPLAY_H_P /* Maximum index in case Framebuffer is defined as bytes */
#endif /* _DISPLAY_H_ */
/* Cursor points to the top left pixel of a symbol */
typedef struct cursor_s {
int x; /* LCD column position in pixel */
int y; /* LCD row position in pixel */
} cursor_t;
typedef struct {
int w; /* font width in pixel */
int h; /* font height in pixel */
} fmetric_t;
extern void DisplaySymbol(UINT8 *pFB, fmetric_t fmetric, cursor_t cursor, UINT8 *pSymbol);
-
- Beiträge: 7
- Registriert: 09 Aug 2013, 10:13
Re: Displayoutput on TX Controler
Hallo Jona,
hast du das Programm selbst mal ausgetestet?, falls ja unter welcher Robo TX Controller Version ?
Wenn ich das Programm starte kommt nur der Bildschirm das das Programm gestartet ist aber es wird mir nichts angezeigt.
Ich habe die Möglichkeit das Programm zu beenden was für mich schon ein Erfolg ist, bei meinen Programmen kann ich zwar das Programm starten dennoch passiert dannach nichts mehr.
Gruß Hans
hast du das Programm selbst mal ausgetestet?, falls ja unter welcher Robo TX Controller Version ?
Wenn ich das Programm starte kommt nur der Bildschirm das das Programm gestartet ist aber es wird mir nichts angezeigt.
Ich habe die Möglichkeit das Programm zu beenden was für mich schon ein Erfolg ist, bei meinen Programmen kann ich zwar das Programm starten dennoch passiert dannach nichts mehr.
Gruß Hans
Re: Displayoutput on TX Controler
Hallo Helmut,
Ja das Programm lief unter 1.30 der Firmware und der neuesten Softwareumgebung.
Es sollte erst das Display fuer 4 Sekunden dunkel sein, dann 4 Sekunden Schachbrett und 4 Sekunden Streifen anzeigen,
nach 12 Sekunden gibt das C-programm die Hoheit uebers Display wieder an die Firmware zurueck ( = False) und nach 16-sekunden wird das ganz C-program beendet und returned wieder zum Hauptmenu (return 0).
Das Program habe ich ganz einfach gehalten, ich wollte nur verstehen wie das Display funktioniert.
Gruesse Joachim
PS: Ich habe z.Zt. nur einen Rechner mit amerikanischer Tastatur, da sind Umlaute laestig.
Ja das Programm lief unter 1.30 der Firmware und der neuesten Softwareumgebung.
Es sollte erst das Display fuer 4 Sekunden dunkel sein, dann 4 Sekunden Schachbrett und 4 Sekunden Streifen anzeigen,
nach 12 Sekunden gibt das C-programm die Hoheit uebers Display wieder an die Firmware zurueck ( = False) und nach 16-sekunden wird das ganz C-program beendet und returned wieder zum Hauptmenu (return 0).
Das Program habe ich ganz einfach gehalten, ich wollte nur verstehen wie das Display funktioniert.
Gruesse Joachim
PS: Ich habe z.Zt. nur einen Rechner mit amerikanischer Tastatur, da sind Umlaute laestig.