Hallo ich benutze die WinAvr Version 20081205 und den Atmega32 Ich möchte mein Projekt auf mehere Dateien aufteilen. In meiner main.c habe ich folgende Funktionen:
1 | void ReadADC(void) |
2 | {
|
3 | |
4 | ADMUX = 0; // Pin C0 |
5 | ADMUX |= (1<<REFS1) | (1<<REFS0) ; // interne Referenzspannung nutzen |
6 | ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); |
7 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
8 | |
9 | while ( ADCSRA & (1<<ADSC) ) {; } // auf Abschluss der Konvertierung warten |
10 | |
11 | result = ADCW; |
12 | result = 0; |
13 | |
14 | /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
|
15 | |
16 | for(int i=0; i<4; i++ ) |
17 | {
|
18 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" |
19 | while ( ADCSRA & (1<<ADSC) ) {;} |
20 | result += ADCW; // Wandlungsergebnisse aufaddieren |
21 | }
|
22 | |
23 | ADCSRA &= ~(1<<ADEN); |
24 | |
25 | result =((long)ADC*256)/1023+8; |
26 | |
27 | |
28 | }
|
29 | //-------------------------------------------------------------------------
|
30 | |
31 | |
32 | void ADCToLCD(int result) |
33 | {
|
34 | char volt[2]; |
35 | lcd_clear(); |
36 | |
37 | if(result < BattMin) |
38 | {
|
39 | lcd_draw_bmp(Achtung); |
40 | lcd_set_cursor(30,LINE0+1); |
41 | lcd_puts_p(normal,PSTR("Batteriespannung:")); |
42 | lcd_set_cursor(46,LINE2+1); |
43 | lcd_puts_p(normal,PSTR("niedrig !")); |
44 | }
|
45 | if(result > BattMax) |
46 | {
|
47 | lcd_draw_bmp(Achtung); |
48 | lcd_set_cursor(30,LINE0+1); |
49 | lcd_puts_p(normal,PSTR("Batteriespannung:")); |
50 | lcd_set_cursor(42,LINE2+1); |
51 | lcd_puts_p(normal,PSTR("zu hoch !")); |
52 | }
|
53 | if(result >= BattMin && result <= BattMax) |
54 | {
|
55 | lcd_set_cursor(22,LINE0+1); |
56 | lcd_puts_p(normal,PSTR("Batteriespannung:")); |
57 | }
|
58 | |
59 | lcd_set_cursor(24,LINE4+6); |
60 | |
61 | itoa(result,volt,10); |
62 | char c0 = volt[0]; |
63 | char c1 = volt[1]; |
64 | char c2 = volt[2]; |
65 | |
66 | if(result<100) |
67 | {
|
68 | lcd_putc(big,c0); |
69 | lcd_puts(big,","); |
70 | lcd_putc(big,c1); |
71 | }
|
72 | else
|
73 | {
|
74 | lcd_putc(big,c0); |
75 | lcd_putc(big,c1); |
76 | lcd_puts(big,","); |
77 | lcd_putc(big,c2); |
78 | }
|
79 | lcd_puts_p(big,PSTR(" Volt")); |
80 | }
|
81 | //-------------------------------------------------------------------------
|
wenn ich die Funktion ADCtoLCD in meine neue Datei "Batterie.c" verschiebe also nicht kopiere dann wird mein Projekt von ehemals: Program: 18834 bytes (.text + .data + .bootloader) Data: 87 bytes (.data + .bss + .noinit) auf Program: 24234 bytes (.text + .data + .bootloader) Data: 89 bytes (.data + .bss + .noinit) aufgebläht. Das Programm funktioniert weiterhin es gibt keine Fehler beim erstellen. Die Funktionen werden natürlich in der "Batterie.h" definert. Kann es sein das die Grafik LCD Routinen nochmal eingebunden werden. Bisher sind sie nur in der main.h included. Weiß jemand vielleicht woran das liegt. An den Compiler Einstellung -os wurde nichts geändert. Danke schonmal im vorraus. Anlen