Displayoutput on TX Controler

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
hans.mayer.1988
Beiträge: 7
Registriert: 09 Aug 2013, 10:13

Displayoutput on TX Controler

Beitrag von hans.mayer.1988 » 15 Aug 2013, 12:31

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

Ad2
Beiträge: 306
Registriert: 31 Okt 2010, 22:20

Re: Displayoutput on TX Controler

Beitrag von Ad2 » 15 Aug 2013, 20:34

Es wurde helfen das gesammte Program hier zu zeigen.

jona2004
Beiträge: 149
Registriert: 10 Jun 2011, 22:30

Re: Displayoutput on TX Controler

Beitrag von jona2004 » 27 Aug 2013, 20:40

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

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;    
}


hans.mayer.1988
Beiträge: 7
Registriert: 09 Aug 2013, 10:13

Re: Displayoutput on TX Controler

Beitrag von hans.mayer.1988 » 11 Sep 2013, 22:14

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

hans.mayer.1988
Beiträge: 7
Registriert: 09 Aug 2013, 10:13

Re: Displayoutput on TX Controler

Beitrag von hans.mayer.1988 » 19 Sep 2013, 11:26

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 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;    
}


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

jona2004
Beiträge: 149
Registriert: 10 Jun 2011, 22:30

Re: Displayoutput on TX Controler

Beitrag von jona2004 » 19 Sep 2013, 20:55

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

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);

hans.mayer.1988
Beiträge: 7
Registriert: 09 Aug 2013, 10:13

Re: Displayoutput on TX Controler

Beitrag von hans.mayer.1988 » 22 Sep 2013, 18:33

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

jona2004
Beiträge: 149
Registriert: 10 Jun 2011, 22:30

Re: Displayoutput on TX Controler

Beitrag von jona2004 » 23 Sep 2013, 13:04

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.

Antworten