Forum: Mikrocontroller und Digitale Elektronik Hilfe datei aus Tutorial Compilieren


von Huber M. (michael_h784)


Lesenswert?

Hallo,

ich möchte aus dem AVR/Gcc Tutorial/lcd ANSTEUERN zwei externe dateien 
einbinden. Dieses mache ich im Soloution explorer richtig?

dazu muss ich sie aber vorher seperat in meinem compiler übersetzen, und 
einzeln abspeichern, richtig ?

das heisst ich kopiere die datei aus dem tutorial in meinem compiler und 
übersetze sie richtig ?

er bringt mir abe hierbei lauter fehler, könnte mir das mal bitte jemand 
übersetzten, und sagen ob es bei ihm auch so ist. und vielleicht was ich 
hier falsch mache?

grüsse huber

Datei lcd-routines.h
1
// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
2
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
3
//
4
 
5
#ifndef LCD_ROUTINES_H
6
#define LCD_ROUTINES_H
7
 
8
////////////////////////////////////////////////////////////////////////////////
9
// Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!
10
 
11
#ifndef F_CPU
12
#define F_CPU 8000000
13
#endif
14
 
15
////////////////////////////////////////////////////////////////////////////////
16
// Pinbelegung für das LCD, an verwendete Pins anpassen
17
// Alle LCD Pins müssen an einem Port angeschlossen sein und die 4
18
// Datenleitungen müssen auf aufeinanderfolgenden Pins liegen
19
 
20
//  LCD DB4-DB7 <-->  PORTD Bit PD0-PD3
21
#define LCD_PORT      PORTD
22
#define LCD_DDR       DDRD
23
#define LCD_DB        PD0
24
 
25
//  LCD RS      <-->  PORTD Bit PD4     (RS: 1=Data, 0=Command)
26
#define LCD_RS        PD4
27
 
28
//  LCD EN      <-->  PORTD Bit PD5     (EN: 1-Impuls für Daten)
29
#define LCD_EN        PD5
30
 
31
////////////////////////////////////////////////////////////////////////////////
32
// LCD Ausführungszeiten (MS=Millisekunden, US=Mikrosekunden)
33
 
34
#define LCD_BOOTUP_MS           15
35
#define LCD_ENABLE_US           20
36
#define LCD_WRITEDATA_US        46
37
#define LCD_COMMAND_US          42
38
 
39
#define LCD_SOFT_RESET_MS1      5
40
#define LCD_SOFT_RESET_MS2      1
41
#define LCD_SOFT_RESET_MS3      1
42
#define LCD_SET_4BITMODE_MS     5
43
 
44
#define LCD_CLEAR_DISPLAY_MS    2
45
#define LCD_CURSOR_HOME_MS      2
46
 
47
////////////////////////////////////////////////////////////////////////////////
48
// Zeilendefinitionen des verwendeten LCD
49
// Die Einträge hier sollten für ein LCD mit einer Zeilenlänge von 16 Zeichen passen
50
// Bei anderen Zeilenlängen müssen diese Einträge angepasst werden
51
 
52
#define LCD_DDADR_LINE1         0x00
53
#define LCD_DDADR_LINE2         0x40
54
#define LCD_DDADR_LINE3         0x10
55
#define LCD_DDADR_LINE4         0x50
56
 
57
////////////////////////////////////////////////////////////////////////////////
58
// Initialisierung: muss ganz am Anfang des Programms aufgerufen werden.
59
void lcd_init( void );
60
 
61
////////////////////////////////////////////////////////////////////////////////
62
// LCD löschen
63
void lcd_clear( void );
64
 
65
////////////////////////////////////////////////////////////////////////////////
66
// Cursor in die 1. Zeile, 0-te Spalte
67
void lcd_home( void );
68
 
69
////////////////////////////////////////////////////////////////////////////////
70
// Cursor an eine beliebige Position 
71
void lcd_setcursor( uint8_t spalte, uint8_t zeile );
72
 
73
////////////////////////////////////////////////////////////////////////////////
74
// Ausgabe eines einzelnen Zeichens an der aktuellen Cursorposition 
75
void lcd_data( uint8_t data );
76
 
77
////////////////////////////////////////////////////////////////////////////////
78
// Ausgabe eines Strings an der aktuellen Cursorposition 
79
void lcd_string( const char *data );
80
 
81
////////////////////////////////////////////////////////////////////////////////
82
// Definition eines benutzerdefinierten Sonderzeichens.
83
// data muss auf ein Array[8] mit den Zeilencodes des zu definierenden Zeichens
84
// zeigen. Später können diese mit lcd_data(0-7) aufgerufen werden
85
void lcd_generatechar( uint8_t startadresse, const uint8_t *data );
86
 
87
////////////////////////////////////////////////////////////////////////////////
88
// Ausgabe eines Kommandos an das LCD.
89
void lcd_command( uint8_t data );
90
 
91
 
92
////////////////////////////////////////////////////////////////////////////////
93
// LCD Befehle und Argumente.
94
// Zur Verwendung in lcd_command
95
 
96
// Clear Display -------------- 0b00000001
97
#define LCD_CLEAR_DISPLAY       0x01
98
 
99
// Cursor Home ---------------- 0b0000001x
100
#define LCD_CURSOR_HOME         0x02
101
 
102
// Set Entry Mode ------------- 0b000001xx
103
#define LCD_SET_ENTRY           0x04
104
 
105
#define LCD_ENTRY_DECREASE      0x00
106
#define LCD_ENTRY_INCREASE      0x02
107
#define LCD_ENTRY_NOSHIFT       0x00
108
#define LCD_ENTRY_SHIFT         0x01
109
 
110
// Set Display ---------------- 0b00001xxx
111
#define LCD_SET_DISPLAY         0x08
112
 
113
#define LCD_DISPLAY_OFF         0x00
114
#define LCD_DISPLAY_ON          0x04
115
#define LCD_CURSOR_OFF          0x00
116
#define LCD_CURSOR_ON           0x02
117
#define LCD_BLINKING_OFF        0x00
118
#define LCD_BLINKING_ON         0x01
119
 
120
// Set Shift ------------------ 0b0001xxxx
121
#define LCD_SET_SHIFT           0x10
122
 
123
#define LCD_CURSOR_MOVE         0x00
124
#define LCD_DISPLAY_SHIFT       0x08
125
#define LCD_SHIFT_LEFT          0x00
126
#define LCD_SHIFT_RIGHT         0x04
127
 
128
// Set Function --------------- 0b001xxxxx
129
#define LCD_SET_FUNCTION        0x20
130
 
131
#define LCD_FUNCTION_4BIT       0x00
132
#define LCD_FUNCTION_8BIT       0x10
133
#define LCD_FUNCTION_1LINE      0x00
134
#define LCD_FUNCTION_2LINE      0x08
135
#define LCD_FUNCTION_5X7        0x00
136
#define LCD_FUNCTION_5X10       0x04
137
 
138
#define LCD_SOFT_RESET          0x30
139
 
140
// Set CG RAM Address --------- 0b01xxxxxx  (Character Generator RAM)
141
#define LCD_SET_CGADR           0x40
142
 
143
#define LCD_GC_CHAR0            0
144
#define LCD_GC_CHAR1            1
145
#define LCD_GC_CHAR2            2
146
#define LCD_GC_CHAR3            3
147
#define LCD_GC_CHAR4            4
148
#define LCD_GC_CHAR5            5
149
#define LCD_GC_CHAR6            6
150
#define LCD_GC_CHAR7            7
151
 
152
// Set DD RAM Address --------- 0b1xxxxxxx  (Display Data RAM)
153
#define LCD_SET_DDADR           0x80
154
 
155
#endif


Datei lcd-routines.c:
1
// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
2
// http://www.mikrocontroller.net/articles/HD44780
3
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
4
//
5
// Die Pinbelegung ist über defines in lcd-routines.h einstellbar
6
 
7
#include <avr/io.h>
8
#include "lcd-routines.h"
9
#include <util/delay.h>
10
 
11
////////////////////////////////////////////////////////////////////////////////
12
// Erzeugt einen Enable-Puls
13
static void lcd_enable( void )
14
{
15
    LCD_PORT |= (1<<LCD_EN);     // Enable auf 1 setzen
16
    _delay_us( LCD_ENABLE_US );  // kurze Pause
17
    LCD_PORT &= ~(1<<LCD_EN);    // Enable auf 0 setzen
18
}
19
 
20
////////////////////////////////////////////////////////////////////////////////
21
// Sendet eine 4-bit Ausgabeoperation an das LCD
22
static void lcd_out( uint8_t data )
23
{
24
    data &= 0xF0;                       // obere 4 Bit maskieren
25
 
26
    LCD_PORT &= ~(0xF0>>(4-LCD_DB));    // Maske löschen
27
    LCD_PORT |= (data>>(4-LCD_DB));     // Bits setzen
28
    lcd_enable();
29
}
30
 
31
////////////////////////////////////////////////////////////////////////////////
32
// Initialisierung: muss ganz am Anfang des Programms aufgerufen werden.
33
void lcd_init( void )
34
{
35
    // verwendete Pins auf Ausgang schalten
36
    uint8_t pins = (0x0F << LCD_DB) |           // 4 Datenleitungen
37
                   (1<<LCD_RS) |                // R/S Leitung
38
                   (1<<LCD_EN);                 // Enable Leitung
39
    LCD_DDR |= pins;
40
 
41
    // initial alle Ausgänge auf Null
42
    LCD_PORT &= ~pins;
43
 
44
    // warten auf die Bereitschaft des LCD
45
    _delay_ms( LCD_BOOTUP_MS );
46
    
47
    // Soft-Reset muss 3mal hintereinander gesendet werden zur Initialisierung
48
    lcd_out( LCD_SOFT_RESET );
49
    _delay_ms( LCD_SOFT_RESET_MS1 );
50
 
51
    lcd_enable();
52
    _delay_ms( LCD_SOFT_RESET_MS2 );
53
 
54
    lcd_enable();
55
    _delay_ms( LCD_SOFT_RESET_MS3 );
56
 
57
    // 4-bit Modus aktivieren 
58
    lcd_out( LCD_SET_FUNCTION |
59
             LCD_FUNCTION_4BIT );
60
    _delay_ms( LCD_SET_4BITMODE_MS );
61
 
62
    // 4-bit Modus / 2 Zeilen / 5x7
63
    lcd_command( LCD_SET_FUNCTION |
64
                 LCD_FUNCTION_4BIT |
65
                 LCD_FUNCTION_2LINE |
66
                 LCD_FUNCTION_5X7 );
67
 
68
    // Display ein / Cursor aus / Blinken aus
69
    lcd_command( LCD_SET_DISPLAY |
70
                 LCD_DISPLAY_ON |
71
                 LCD_CURSOR_OFF |
72
                 LCD_BLINKING_OFF); 
73
 
74
    // Cursor inkrement / kein Scrollen
75
    lcd_command( LCD_SET_ENTRY |
76
                 LCD_ENTRY_INCREASE |
77
                 LCD_ENTRY_NOSHIFT );
78
 
79
    lcd_clear();
80
}
81
  
82
////////////////////////////////////////////////////////////////////////////////
83
// Sendet ein Datenbyte an das LCD
84
void lcd_data( uint8_t data )
85
{
86
    LCD_PORT |= (1<<LCD_RS);    // RS auf 1 setzen
87
 
88
    lcd_out( data );            // zuerst die oberen, 
89
    lcd_out( data<<4 );         // dann die unteren 4 Bit senden
90
 
91
    _delay_us( LCD_WRITEDATA_US );
92
}
93
 
94
////////////////////////////////////////////////////////////////////////////////
95
// Sendet einen Befehl an das LCD
96
void lcd_command( uint8_t data )
97
{
98
    LCD_PORT &= ~(1<<LCD_RS);    // RS auf 0 setzen
99
 
100
    lcd_out( data );             // zuerst die oberen, 
101
    lcd_out( data<<4 );           // dann die unteren 4 Bit senden
102
 
103
    _delay_us( LCD_COMMAND_US );
104
}
105
 
106
////////////////////////////////////////////////////////////////////////////////
107
// Sendet den Befehl zur Löschung des Displays
108
void lcd_clear( void )
109
{
110
    lcd_command( LCD_CLEAR_DISPLAY );
111
    _delay_ms( LCD_CLEAR_DISPLAY_MS );
112
}
113
 
114
////////////////////////////////////////////////////////////////////////////////
115
// Sendet den Befehl: Cursor Home
116
void lcd_home( void )
117
{
118
    lcd_command( LCD_CURSOR_HOME );
119
    _delay_ms( LCD_CURSOR_HOME_MS );
120
}
121
 
122
////////////////////////////////////////////////////////////////////////////////
123
// Setzt den Cursor in Spalte x (0..15) Zeile y (1..4) 
124
 
125
void lcd_setcursor( uint8_t x, uint8_t y )
126
{
127
    uint8_t data;
128
 
129
    switch (y)
130
    {
131
        case 1:    // 1. Zeile
132
            data = LCD_SET_DDADR + LCD_DDADR_LINE1 + x;
133
            break;
134
 
135
        case 2:    // 2. Zeile
136
            data = LCD_SET_DDADR + LCD_DDADR_LINE2 + x;
137
            break;
138
 
139
        case 3:    // 3. Zeile
140
            data = LCD_SET_DDADR + LCD_DDADR_LINE3 + x;
141
            break;
142
 
143
        case 4:    // 4. Zeile
144
            data = LCD_SET_DDADR + LCD_DDADR_LINE4 + x;
145
            break;
146
 
147
        default:
148
            return;                                   // für den Fall einer falschen Zeile
149
    }
150
 
151
    lcd_command( data );
152
}
153
 
154
////////////////////////////////////////////////////////////////////////////////
155
// Schreibt einen String auf das LCD
156
 
157
void lcd_string( const char *data )
158
{
159
    while( *data != '\0' )
160
        lcd_data( *data++ );
161
}
162
 
163
////////////////////////////////////////////////////////////////////////////////
164
// Schreibt ein Zeichen in den Character Generator RAM
165
 
166
void lcd_generatechar( uint8_t startadresse, const uint8_t *data )
167
{
168
    // Startposition des Zeichens einstellen
169
    lcd_command( LCD_SET_CGADR | (startadresse<<3) ); //Startadressen: 0;1;2;3;4;5;6;7
170
 
171
    // Bitmuster übertragen
172
    for ( uint8_t i=0; i<8; i++ )
173
    {
174
        lcd_data( data[i] );
175
    }
176
    lcd_command(LCD_SET_DDADR); //DRAM auf 0 setzen
177
}

: Verschoben durch User
von Peter II (Gast)


Lesenswert?

Huber M. schrieb:
> er bringt mir abe hierbei lauter fehler, könnte mir das mal bitte jemand
> übersetzten, und sagen ob es bei ihm auch so ist. und vielleicht was ich
> hier falsch mache?

ja, der Fehler ist das du uns die Fehler nicht zeigst.

von Stromverdichter (Gast)


Lesenswert?

Fehlende Infos:

Welche IDE
Welcher Compiler
Welcher Controller
Kompletter Auszug der Fehlermeldung

von Huber M. (michael_h784)


Lesenswert?

Avr Studio 6.0 und atmega8a

hier für lcd-routine.h
1
------ Build started: Project: lcd-routines.h, Configuration: Debug AVR ------
2
Build started.
3
Project "lcd-routines.h.cproj" (default targets):
4
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5
Target "CoreBuild" in file "C:\Program Files\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "C:\Users\Daniela Weinhart\Documents\Atmel Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.cproj" (target "Build" depends on it):
6
  Using "RunCompilerTask" task from assembly "C:\Program Files\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll".
7
  Task "RunCompilerTask"
8
    C:\Program Files\Atmel\Atmel Studio 6.0\make\make.exe all 
9
    Building file: .././lcd-routines.h.c
10
    Invoking: AVR/GNU C Compiler : (AVR_8_bit_GNU_Toolchain_3.4.1_830) 4.6.2
11
    "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.1.95\AVRToolchain\bin\avr-gcc.exe" -funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -MD -MP -MF "lcd-routines.h.d" -MT"lcd-routines.h.d" -MT"lcd-routines.h.o"  -mmcu=atmega8a   -o"lcd-routines.h.o" ".././lcd-routines.h.c" 
12
C:\Users\Daniela Weinhart\Documents\Atmel Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.c(71,21): unknown type name 'uint8_t'
13
C:\Users\Daniela Weinhart\Documents\Atmel Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.c(71,37): unknown type name 'uint8_t'
14
C:\Users\Daniela Weinhart\Documents\Atmel Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.c(75,16): unknown type name 'uint8_t'
15
C:\Users\Daniela Weinhart\Documents\Atmel Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.c(85,24): unknown type name 'uint8_t'
16
C:\Users\Daniela Weinhart\Documents\Atmel Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.c(85,24): unknown type name 'uint8_t'
17
C:\Users\Daniela Weinhart\Documents\Atmel Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.c(89,19): unknown type name 'uint8_t'
18
C:\Users\Daniela Weinhart\Documents\Atmel Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.c(5,0): unterminated #ifndef
19
    make: *** [lcd-routines.h.o] Error 1
20
  Done executing task "RunCompilerTask" -- FAILED.
21
Done building target "CoreBuild" in project "lcd-routines.h.cproj" -- FAILED.
22
Done building project "lcd-routines.h.cproj" -- FAILED.
23
24
Build FAILED.
25
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========



und hier das erste der Errolist. die kann ich ja nicht in einem 
kopieren?

Error  1  unknown type name 'uint8_t'  C:\Users\Daniela 
Weinhart\Documents\Atmel 
Studio\lcd-routines.h\lcd-routines.h\lcd-routines.h.c  71  21 
lcd-routines.h

von Peter II (Gast)


Lesenswert?

schreib mal in die Header Datei
1
#include <stdint.h>

am anfang mit rein.

von Huber M. (michael_h784)


Lesenswert?

danke, es ist schon besser, aber jetzt hat er noch einen fehler

[c][------ Build started: Project: lcd-routines.h, Configuration: Debug 
AVR ------
Build started.
Project "lcd-routines.h.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; 
('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files\Atmel\Atmel Studio 
6.0\Vs\Compiler.targets" from project "C:\Users\Daniela 
Weinhart\Documents\header_dateien\lcd-routines.h\lcd-routines.h\lcd-rout 
ines.h.cproj"  (target "Build" depends on it):
  Task "RunCompilerTask"
    C:\Program Files\Atmel\Atmel Studio 6.0\make\make.exe all
    Building file: .././lcd-routines.h.c
    Invoking: AVR/GNU C Compiler : (AVR_8_bit_GNU_Toolchain_3.4.1_830) 
4.6.2
    "C:\Program Files\Atmel\Atmel Studio 
6.0\extensions\Atmel\AVRGCC\3.4.1.95\AVRToolchain\bin\avr-gcc.exe" 
-funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 
-Wall -c -std=gnu99 -MD -MP -MF "lcd-routines.h.d" -MT"lcd-routines.h.d" 
-MT"lcd-routines.h.o"  -mmcu=atmega8a   -o"lcd-routines.h.o" 
".././lcd-routines.h.c"
    Finished building: .././lcd-routines.h.c
    Building target: lcd-routines.h.elf
    Invoking: AVR/GNU Linker : (AVR_8_bit_GNU_Toolchain_3.4.1_830) 4.6.2
    "C:\Program Files\Atmel\Atmel Studio 
6.0\extensions\Atmel\AVRGCC\3.4.1.95\AVRToolchain\bin\avr-gcc.exe" -o 
lcd-routines.h.elf  lcd-routines.h.o   -Wl,-Map="lcd-routines.h.map" 
-Wl,--start-group -Wl,-lm  -Wl,--end-group  -mmcu=atmega8a
    c:/program files/atmel/atmel studio 
6.0/extensions/atmel/avrgcc/3.4.1.95/avrtoolchain/bin/../lib/gcc/avr/4.6 
.2/../../../../avr/lib/avr4/crtm8a.o:  In function `__vectors':
/home/tools/hudson/workspace/avr8-gnu-toolchain/src/avr-libc/crt1/gcrt1. 
S(52,1):  undefined reference to `main'
    collect2: ld returned 1 exit status
    make: *** [lcd-routines.h.elf] Error 1
  Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreBuild" in project "lcd-routines.h.cproj" -- 
FAILED.
Done building project "lcd-routines.h.cproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped 
==========
/c]

von Stromverdichter (Gast)


Lesenswert?

Du hast versucht das Header-File zu compilieren? Dazu hast du an das .h 
noch ein .c angehangen?

Ich befürchte, deine Herangehensweise ist zu blauäugig. Du benötigst 
eigentlich schon etwas Hintergrundwissen, wenn du auf dem Weg was lernen 
willst.

Entweder du gehst den Weg des Arduino. Dann verwendest du deren 
Framework und kannst einfach einen Funktionierenden Code generieren.
Oder du fängst ganz am Anfang an. Dazu solltest du zunächst erlernen, 
was der Compiler macht und wie Register funktionieren. Das kannst du in 
diesem Falle nicht überspringen, wie beim Arduino-Framework.

von Stromverdichter (Gast)


Lesenswert?

Deine nicht existierende main() lässt den Compiler auch meckern. Ich 
sage das dir zwar jetzt, aber du kannst aus der Info nichts lernen, weil 
du nicht weißt, wer die Main aufruft, oder auch nur warum. Libraries 
laufen nicht standalone

von Huber M. (michael_h784)


Lesenswert?

Ok, ich will ja die beiden Dateien als libary zum Hauptprogramm 
hinzufügen. das, dass so nicht läuft, dachte ich mir schon. Wie es in 
diesem tutorial nachfolgend beschrieben ist. Und da sich da jemand so 
viel Arbeit gemacht hat. Dachte ich mir das das auch zsammen passt. Wenn 
ich das dann im soluotion explorer einfüge, aber dazu dachte ich mir 
muss ich es erst mal übersetzen

[[https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung]]

Der folgende Satz von Ansteuerroutinen für ein Text-LCD ist in der Datei 
lcd-routines.c zusammengefasst. Diese Datei muss man beim Einrichten 
zusätzlich zum eigenen Hauptprogramm in sein Projekt aufnehmen. Dies 
geschieht beim AVR Studio unter Source Files im Fenster AVR GCC oder bei 
WinAVR im Makefile (z. B. durch SRC += lcd-routines.c).

: Bearbeitet durch User
von Stromverdichter (Gast)


Lesenswert?

Mit dem AtmelStudio6 gibst du viel Verantwortung an die IDE ab. Es ist 
also in deinem Falle sicherlich ausreichend, wenn du in ein bestehendes 
funktionierendes Projekt für deinen Controller die 2 LCD-Routinen 
einfügst. Damit die IDE weiß, dass du die includet haben möchtest, mach 
das über den SolutionExplorer.
Dann gibtst du deinem File mit deiner main noch bekannt, dass er es auch 
die die LCD includen soll. Dann kannst du in der main auch die 
Display-Routinen verwenden.
Du musst also in dem Fall nicht gesondert die object-files erstellen, 
das erledigt das Studio für dich.

von Stromverdichter (Gast)


Lesenswert?

Huber M. schrieb:
> Diese Datei muss man beim Einrichten
> zusätzlich zum eigenen Hauptprogramm in sein Projekt aufnehmen. Dies
> geschieht beim AVR Studio unter Source Files im Fenster AVR GCC oder bei
> WinAVR im Makefile (z. B. durch SRC += lcd-routines.c).

Du solltest das AVR Studio verwenden, wenn du dich darauf beziehst. Im 
Moment verwendest du das ATMEL Studio. Das ist etwas anderes. Birnen und 
Äpfel halt. Sind zwar beides Autos, aber werden unterschiedlich 
gehandhabt.

von Huber M. (michael_h784)


Lesenswert?

also jetzt nochmal.

ich glaube jetzt zu wissen, das es einen Präprozessor gibt. Der die 
ganzen #include #indef #define # endif sachen, und das ganze nur aus 
reine .c dateien vorbearbeitet, richtig ?

danach kommt der Compiler dran der zb. die int und operatoren 
bearbeitet?

und zum Schluss der Linker der alles zusammen bündelt, zu einer 
Ausführbaren Datei ?

und deshalb müssen alle dateien zum Soloution explorer hinzugefügt 
werden, weil das da drin abläuft?

das heisst ich gehe mit der Maus im Soloution Explorer, auf 
Gcc-->rechtsklick-->add new file--> gehe zum tutorial--> kopiere die 
Datei lcd-routines.h--> Füge diese in das neue geöffnete fenster, und 
somit wäre das richtig drinen?

mit der zweiten Datei lcd-routines.c gehe ich genau so vor?

und danach füge ich noch das hauptprogramm in das erste fenster ein, 
also habe ich jetzt drei fenster, und beim übersetzen haut er mir immer 
nen fehler raus das er #include lcd-routines nicht kennt, und ich glaube 
das hängt nur noch mit der einstellung im Makefile zusammen, aber da tue 
ich mir schwer das zu finden.

//
// Anpassungen im makefile:
//    ATMega8 => MCU=atmega8 im makefile einstellen
//    lcd-routines.c in SRC = ... Zeile anhängen

von Jobst M. (jobstens-de)


Lesenswert?

Auch in diesem Thread nochmal der Hinweis an den TO, dass er mal ein 
C-Buch durcharbeiten soll.


Beitrag "Re: Anfänger Frage zu variable hochzählen"



Gruß

Jobst

von Arduinoquäler (Gast)


Lesenswert?

Jobst M. schrieb:
> dass er mal ein C-Buch durcharbeiten soll.

Nun, das wird auch schwierig weil er z.B. meint dass im
Soloution Explorer "etwas abläuft" ....

Huber M. schrieb:
> und deshalb müssen alle dateien zum Soloution explorer hinzugefügt
> werden, weil das da drin abläuft?

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.