|
|
View previous topic :: View next topic |
Author |
Message |
richi-d
Joined: 28 Aug 2007 Posts: 106
|
Always my great problem: how to create the project |
Posted: Wed Mar 12, 2008 6:58 am |
|
|
Can anyone tell me how I create a optimal project structure?
Where must be the Header filer and the Subroutines in MPLAB
Where do I have to declare variables
Where is the right place for including the files?
What the right form of the *.h file....
Here is my solution- it doesn´t work:
The error is about 100 times:
*** Error 28 "S:\Abteilung\AnaSys\DICE\Software\Extension_Bedienboard\Display_Steuerung.c" Line 153(36,37): Expecting an identifier
*** Error 43 "S:\Abteilung\AnaSys\DICE\Software\Extension_Bedienboard\Display_Steuerung.c" Line 154(1,2): Expecting a declaration
MAIN.C:
Code: |
#include <18F4620.h>
#device adc=10
#include <string.h>
#include "Display_Steuerung.h"
#FUSES HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,DEBUG
#use delay(clock=8000000)
#use STANDARD_IO (A)
#use STANDARD_IO (B)
#use STANDARD_IO (C)
#use STANDARD_IO (D)
#use STANDARD_IO (E)
#define NOP #asm NOP #endasm;
#define LE_MUX_1 PIN_C0
#define LE_MUX_2 PIN_C1
#define LE_MUX_3 PIN_C2
#define LE_MUX_4 PIN_D7
#define CLK PIN_C3
#define DATA PIN_C5
#define LE_DATA_0 PIN_D0
#define LE_DATA_1 PIN_D1
#define LE_DATA_2 PIN_D2
#define LE_DATA_3 PIN_D3
#define AUX_LO_UL PIN_D4
#define AUX_LO_DL PIN_D5
#define PWR_DOWN PIN_D6
#define R_S PIN_E0
#define R_W PIN_E1
#define ENABLE PIN_E2
#define OUTPUT_4 PIN_A4
#define OUTPUT_5 PIN_A5
#define OUTPUT_6 PIN_A7
#define OUTPUT_7 PIN_A6
#define GEBER_1_A PIN_B0
#define GEBER_1_B PIN_B4
#define GEBER_2_A PIN_B1
#define GEBER_2_B PIN_B5
#define ENTER_1 PIN_B2
#define ENTER_2 PIN_B3
int ADRESSE;
int DATA;
int x_POS;
int y_POS;
int THOUS;
int HUNS;
int TENS;
int UNITS;
int DISPLAY_ZAHLER;
short SCHALTZUSTAND_1;
int lenght;
short STATUS_1_A;
short STATUS_1_B;
short STATUS_1_A_ALT;
short STATUS_2_A;
short STATUS_2_B;
short STATUS_2_A_ALT;
short BESTATIGT;
short ENTER_RAD_1_BIT;
short VERSTELLT;
short SPEICHERN;
short CONN_MERKER;
int TYP;
int PART;
long RAD_1;
long RAD_2;
long i;
long x;
long WERT;
#include "Display_Steuerung.c"
void main()
{
Display_Init();
for (;;)
{
Write_Display_Data ( 0, 1, 'R' );
}// for()
} //main() |
Display_Steuerung.c :
Code: | void Display_Init (void)
{
output_low(ENABLE);
delay_ms(50);
output_bit( PIN_C0, 1); //Function Set
output_bit( PIN_C1, 1);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(5);
output_low(ENABLE);
delay_ms(1);
output_bit( PIN_C0, 1); //Function Set
output_bit( PIN_C1, 1);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(5);
output_low(ENABLE);
delay_ms(1);
output_bit( PIN_C0, 1); //Function Set
output_bit( PIN_C1, 1);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(5);
output_low(ENABLE);
delay_ms(1);
output_bit( PIN_C0, 0); //Function Set 4 BIT
output_bit( PIN_C1, 1);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(5);
output_low(ENABLE);
delay_ms(1);
////////////////////////////////////////////////////////////////////////////////////////
delay_ms(1);
output_bit( PIN_C0, 0); //Function Set
output_bit( PIN_C1, 1);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(5);
output_low(ENABLE);
output_bit( PIN_C0, 0);
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 0); //Display OFF
output_bit( PIN_C3, 1); //2 Lines
output_high(ENABLE);
delay_us(5);
output_low(ENABLE);
delay_ms(1);
output_bit( PIN_C0, 0); //Display ON/OFF Control
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, 0);
output_bit( PIN_C1, 0); //Blink ON/OFF
output_bit( PIN_C2, 0); //Cursor ON/OFF
output_bit( PIN_C3, 1); // Display ON/OFF
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
delay_ms(1);
output_bit( PIN_C0, 0); //Display Clear
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, 1);
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
delay_ms(2);
output_bit( PIN_C0, 0); //Entry Mode Set
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, 0); //Entire Shift off/on
output_bit( PIN_C1, 1); //Decrement Mode/Increment Mode
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
delay_ms(1);
output_bit( PIN_C0, 0);
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 0);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, 0);
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 1);
output_bit( PIN_C3, 1);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
delay_ms(1);
}
void Write_CG_Data ( ADRESSE, DATA )
{
delay_ms(1);
output_bit( PIN_C3, 0);
output_bit( PIN_C2, 1);
output_bit( PIN_C1, BIT_TEST(ADRESSE, 5));
output_bit( PIN_C0, BIT_TEST(ADRESSE, 4));
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, BIT_TEST(ADRESSE, 0));
output_bit( PIN_C1, BIT_TEST(ADRESSE, 1));
output_bit( PIN_C2, BIT_TEST(ADRESSE, 2));
output_bit( PIN_C3, BIT_TEST(ADRESSE, 3));
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
delay_ms(1);
output_bit( PIN_C0, BIT_TEST(DATA, 4));
output_bit( PIN_C1, BIT_TEST(DATA, 5));
output_bit( PIN_C2, BIT_TEST(DATA, 6));
output_bit( PIN_C3, BIT_TEST(DATA, 7));
output_high(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, BIT_TEST(DATA, 0));
output_bit( PIN_C1, BIT_TEST(DATA, 1));
output_bit( PIN_C2, BIT_TEST(DATA, 2));
output_bit( PIN_C3, BIT_TEST(DATA, 3));
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
}
void Write_Display_Data ( x_POS, y_POS, DATA )
{
delay_ms(1);
if (y_POS == 1)
{
output_bit( PIN_C0, 0);
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 0);
output_bit( PIN_C3, 1);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, BIT_TEST(x_POS, 0));
output_bit( PIN_C1, BIT_TEST(x_POS, 1));
output_bit( PIN_C2, BIT_TEST(x_POS, 2));
output_bit( PIN_C3, BIT_TEST(x_POS, 3));
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
}
if (y_POS == 2)
{
output_bit( PIN_C0, 0);
output_bit( PIN_C1, 0);
output_bit( PIN_C2, 1);
output_bit( PIN_C3, 1);
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, BIT_TEST(x_POS, 0));
output_bit( PIN_C1, BIT_TEST(x_POS, 1));
output_bit( PIN_C2, BIT_TEST(x_POS, 2));
output_bit( PIN_C3, BIT_TEST(x_POS, 3));
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
}
delay_ms(1);
output_bit( PIN_C0, BIT_TEST(DATA, 4));
output_bit( PIN_C1, BIT_TEST(DATA, 5));
output_bit( PIN_C2, BIT_TEST(DATA, 6));
output_bit( PIN_C3, BIT_TEST(DATA, 7));
output_high(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, BIT_TEST(DATA, 0));
output_bit( PIN_C1, BIT_TEST(DATA, 1));
output_bit( PIN_C2, BIT_TEST(DATA, 2));
output_bit( PIN_C3, BIT_TEST(DATA, 3));
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
}
|
Display_Steuerung.h : Code: |
void Display_Init ( void );
void Write_CG_Data ( int,int );
void Write_Display_Data ( int,int,int );
|
I added the "main.c" to Source Files
I added the "Display_Steuerung.h" to Header Files
I added the "Display_Steuerung.c" to Other Files
Whats wrong- what does the optimal solution look like? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Mar 12, 2008 10:39 am |
|
|
Don't put the #include statements all over your program. Put them
near the top, as shown below. Also put the preprocessor statements
before the #include statements. Notice the order of the statements
shown below:
1. The .H file for the PIC.
2. Any #device statements.
3. The #fuses statement.
4. The #use delay statement.
5. Any other #use statements.
6. Other #include statements.
Code: |
#include <18F4620.h>
#device adc=10
#FUSES HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,DEBUG
#use delay(clock=8000000)
#use STANDARD_IO (A)
#use STANDARD_IO (B)
#use STANDARD_IO (C)
#use STANDARD_IO (D)
#use STANDARD_IO (E)
#include <string.h>
#include "Display_Steuerung.h"
#include "Display_Steuerung.c" |
|
|
|
richi-d
Joined: 28 Aug 2007 Posts: 106
|
|
Posted: Thu Mar 13, 2008 1:03 am |
|
|
Thanks PCM.... o.k. this was the first step, now I get this error messages:
*** Error 12 "S:\Abteilung\AnaSys\DICE\Software\Extension_Bedienboard\Display_Steuerung.c" Line 3(12,18): Undefined identifier ENABLE
*** Error 12 "S:\Abteilung\AnaSys\DICE\Software\Extension_Bedienboard\Display_Steuerung.c" Line 10(12,15): Undefined identifier R_S
*** Error 12 "S:\Abteilung\AnaSys\DICE\Software\Extension_Bedienboard\Display_Steuerung.c" Line 11(12,15): Undefined identifier R_W
*** Error 12 "S:\Abteilung\AnaSys\DICE\Software\Extension_Bedienboard\Display_Steuerung.c" Line 12(13,19): Undefined identifier ENABLE
*** Error 12 "S:\Abteilung\AnaSys\DICE\Software\Extension_Bedienboard\Display_Steuerung.c" Line 14(12,18): Undefined identifier ENABLE
[img]C:\Clipboard_01.jpg[/img]
How must the *.h look like? Where do I declare my variables? |
|
|
richi-d
Joined: 28 Aug 2007 Posts: 106
|
|
Posted: Thu Mar 13, 2008 8:54 am |
|
|
Is it possible to get for example a model project ( in MPLAB) where I can see how everything should be done?
Or is it possible that someone sends me a zipped model project (e-mail)
- without code... |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Mar 13, 2008 6:19 pm |
|
|
Quote: |
now I get this error messages:
Undefined identifier ENABLE
Undefined identifier R_S
Undefined identifier R_W |
I didn't realize that you have all these global variables that are used
in your other modules. To get rid of the error messages, you need to
move the two #include files so they are below all the #define statements
and the global variables.
Put them in the location shown in bold below:
Quote: |
#define NOP #asm NOP #endasm;
#define LE_MUX_1 PIN_C0
#define LE_MUX_2 PIN_C1
#define LE_MUX_3 PIN_C2
#define LE_MUX_4 PIN_D7
#define CLK PIN_C3
#define DATA PIN_C5
#define LE_DATA_0 PIN_D0
#define LE_DATA_1 PIN_D1
#define LE_DATA_2 PIN_D2
#define LE_DATA_3 PIN_D3
#define AUX_LO_UL PIN_D4
#define AUX_LO_DL PIN_D5
#define PWR_DOWN PIN_D6
#define R_S PIN_E0
#define R_W PIN_E1
#define ENABLE PIN_E2
#define OUTPUT_4 PIN_A4
#define OUTPUT_5 PIN_A5
#define OUTPUT_6 PIN_A7
#define OUTPUT_7 PIN_A6
#define GEBER_1_A PIN_B0
#define GEBER_1_B PIN_B4
#define GEBER_2_A PIN_B1
#define GEBER_2_B PIN_B5
#define ENTER_1 PIN_B2
#define ENTER_2 PIN_B3
int ADRESSE;
int DATA;
int x_POS;
int y_POS;
int THOUS;
int HUNS;
int TENS;
int UNITS;
int DISPLAY_ZAHLER;
short SCHALTZUSTAND_1;
int lenght;
short STATUS_1_A;
short STATUS_1_B;
short STATUS_1_A_ALT;
short STATUS_2_A;
short STATUS_2_B;
short STATUS_2_A_ALT;
short BESTATIGT;
short ENTER_RAD_1_BIT;
short VERSTELLT;
short SPEICHERN;
short CONN_MERKER;
int TYP;
int PART;
long RAD_1;
long RAD_2;
long i;
long x;
long WERT;
#include "Display_Steuerung.h"
#include "Display_Steuerung.c"
|
Then you have another problem. You have both a variable and
constant with the same name, DATA. This will not work. It causes
tons of error messages:
Quote: |
#define DATA PIN_C5
int DATA; |
For example, you have all this code that tests 'DATA', but the bit_test()
function will not work if 'DATA' is PIN_C5. It must be a variable.
Quote: | output_bit( PIN_C0, BIT_TEST(DATA, 4));
output_bit( PIN_C1, BIT_TEST(DATA, 5));
output_bit( PIN_C2, BIT_TEST(DATA, 6));
output_bit( PIN_C3, BIT_TEST(DATA, 7));
output_high(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
output_bit( PIN_C0, BIT_TEST(DATA, 0));
output_bit( PIN_C1, BIT_TEST(DATA, 1));
output_bit( PIN_C2, BIT_TEST(DATA, 2));
output_bit( PIN_C3, BIT_TEST(DATA, 3)); |
You need to fix this problem in the Write_CG_Data() and the
Write_Display_Data() functions. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|