Hallo Leute, ich versuche ein 12864B GLCD mithilfe eines ATMEGA 3250 anzusteuern. Dazu habe ich die Libary etc. von : https://code.google.com/p/u8glib/wiki/avr runtergeladen. Ich bin der Anleitung gefolgt und habe alle .c und .h zu meinem Projekt hizugefügt, allerdings wenn ich jetzt ein Beispielprogramm wie HalloWelt aufspielen will, erscheinen ca. 50 "undifined reference to..." Fehlermeldungen. Ich weiss nicht wie ich diese beheben könnte. Oder hätte jemand eine bessere Idee als diese u8g libarys? Danke im Vorraus
Til schrieb: > erscheinen ca. 50 "undifined reference to..." Fehlermeldungen. Tja, hättest du jetzt ans Stelle von "..." hingeschrieben, was genau da undefined ist, hätte man helfen können. So wird das schwierig. Zu vermuten ist, daß du doch nicht alle erforderlichen .c-Files richtig zu deinem Projekt hinzugefügt hast. Oliver
Danke für die schnelle Antwort, nun offenbar habe ich nicht alle korrekt verknüpft. Dieses Problem ist nun aber auch behoben, allerdings folgt darauf das nächste... Nun wird mir angezeigt, dass mehrer Variabeln wie z.B. TWMS1, TWMS2 und so weiter nicht deklariert sind. Ich könnte diese natürlich selber deklarieren, ich denke aber nicht das diese einfach vergessen wurden und die Files unfertig zum download zur Verfügung stehen. Deshalb möchte ich fragen ob hier zu auch jemand eine Lösung hat. Danke im Vorraus
Im Sourcecode finde ich nichts mit TWMS1 oder ähnliches. Sicher dass du dir den Quellcode für AVR runtergeladen hast?
Da habe ich mich wohl vertippt, ich meinte TWS1, etc. Und die befinden sich im u8g_com_i2c.c file, welches ich dem Projekt angehängt habe. Oder kann es sein, dass ich mit dem Anhängen an das Projekt etwas falsch verstanden habe? Ich habe unter http://code.google.com/p/u8glib/ U8glib for AVR runtergeladen und die Anweisungen befolgt, das sollte doch schon den richtigen Quellcode beinhalten, oder etwa nicht? Danke im Vorraus
Gibt es auch nicht. In der u8g_com_i2c.c gibt es nur TWSR, TWBR, TWCR etc. Ist ja auch egal. Dein ATmega 3250 hat schlicht und ergreifend kein "Hardware TWI". Das kannst du nur über USI machen oder eben als Software-Implementierung. Wenn ich das richtig sehe ist das auch schon in den Quellen so vorgesehen, aber du darfst dann U8G_ATMEGA_HW_TWI nicht "definen"
1 | /* remove the definition for attiny */
|
2 | #if __AVR_ARCH__ == 2
|
3 | #undef U8G_ATMEGA_HW_TWI
|
4 | #endif
|
5 | #if __AVR_ARCH__ == 25
|
6 | #undef U8G_ATMEGA_HW_TWI
|
7 | #endif
|
8 | #endif
|
Okei danke, allerdings habe ich noch nicht einmal versucht das ganze auf den ATMEGA3250 zu laden. Dies ist mir auch nicht möglich, da es sich durch den Fehler ja nicht kompilieren lässt... Mein Problem liegt also noch irgendwo im Code und noch nicht am Prozessor. Ich habe mal meine Error list angehängt. Vieleicht nützt das etwas. Aber eine andere Frage: Meinst du es ist mit einem ATMEGA3250 gar nicht realisierbar? oder muss ich etwas ändern? Danke im Vorraus
Hoppla, da habe ich ein flasches Bild angehängt. Das richtige folgt hier. :)
Wie gesagt du hast kein Hardware TWI in deinem µC. Du musst halt immer #undef U8G_ATMEGA_HW_TWI machen, damit das per Software gemacht wird. Dann sind auch die Fehler weg.
Timmo H. schrieb: > Wie gesagt du hast kein Hardware TWI in deinem µC. Du musst halt immer > #undef U8G_ATMEGA_HW_TWI machen, damit das per Software gemacht wird. > Dann sind auch die Fehler weg. Nun gut, was heisst ich muss das immer machen? Also wann und wo? Vielen Dank für die Hilfe schon mal!
Naja in der u8g_com_i2c.c ab Zeile 79 machst du z.B. anstatt
1 | #if defined(__AVR__)
|
2 | #define U8G_ATMEGA_HW_TWI
|
ein
1 | #if defined(__AVR__)
|
2 | #define U8G_ATMEGA_HW_TWI
|
3 | |
4 | #if defined(__AVR_ATmega3250__)
|
5 | #undef U8G_ATMEGA_HW_TWI
|
Wobei _AVR_ATmega3250__ auch __AVR_ATmega3250A_, _AVR_ATmega3250P_ oder _AVR_ATmega3250PA_ sein kann, jenachdem welchen du hast.
Fehler habe ich jetzt keine mehr im Programm, wenn ich nun alles mit dem folgenden Code testen will, klappt aber noch nichts. An den 3 Datenpins habe ich nur am RS ein ständiges High und sonst nichts. Kann es sein das ich auch hier eine Anpassung machen muss? oder kennt jemand sonst eine Lösung?
1 | /*
|
2 | |
3 | main.c
|
4 |
|
5 | Hello World for ATMEGA Controller
|
6 | |
7 | Universal 8bit Graphics Library
|
8 |
|
9 | Copyright (c) 2012, olikraus@gmail.com
|
10 | All rights reserved.
|
11 | |
12 | Redistribution and use in source and binary forms, with or without modification,
|
13 | are permitted provided that the following conditions are met:
|
14 | |
15 | * Redistributions of source code must retain the above copyright notice, this list
|
16 | of conditions and the following disclaimer.
|
17 |
|
18 | * Redistributions in binary form must reproduce the above copyright notice, this
|
19 | list of conditions and the following disclaimer in the documentation and/or other
|
20 | materials provided with the distribution.
|
21 | |
22 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
23 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
24 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
25 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
26 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
27 | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
28 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
29 | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
30 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
31 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
32 | STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
33 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
34 | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
35 |
|
36 | */
|
37 | |
38 | #include "u8g.h" |
39 | |
40 | #if defined(__AVR__)
|
41 | #include <avr/interrupt.h> |
42 | #include <avr/io.h> |
43 | #endif
|
44 | |
45 | |
46 | /*
|
47 | Software SPI:
|
48 | uint8_t u8g_InitSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset);
|
49 | |
50 | Hardware SPI:
|
51 | uint8_t u8g_InitHWSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t cs, uint8_t a0, uint8_t reset);
|
52 | |
53 | Parallel Interface:
|
54 | uint8_t u8g_Init8Bit(u8g_t *u8g, u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
55 | uint8_t en, uint8_t cs1, uint8_t cs2, uint8_t di, uint8_t rw, uint8_t reset);
|
56 | |
57 | Visit
|
58 | http://code.google.com/p/u8glib/wiki/device
|
59 | for a list of valid devices (second argument of the constructor).
|
60 | |
61 | The following examples will use the dogm132 device: u8g_dev_st7565_dogm132_sw_spi
|
62 | |
63 | Note: The device must match the setup: For example, do not use a sw_spi device with u8g_InitHWSPI().
|
64 | */
|
65 | |
66 | u8g_t u8g; |
67 | |
68 | void u8g_setup(void) |
69 | {
|
70 | /*
|
71 | Test Envionment 1, ATMEGA and DOGM132
|
72 | CS: PORTB, Bit 2
|
73 | A0: PORTB, Bit 1
|
74 | SCK: PORTB, Bit 5
|
75 | MOSI: PORTB, Bit 3
|
76 | */
|
77 | //u8g_InitSPI(&u8g, &u8g_dev_st7565_dogm132_sw_spi, PN(1, 5), PN(1, 3), PN(1, 2), PN(1, 1), U8G_PIN_NONE);
|
78 | |
79 | /*
|
80 | Test Envionment 2, ATMEGA and Seeedstudio 96x96 OLED via I2C
|
81 | SCL: Port C, Bit 5
|
82 | SDA: Port C, Bit 4
|
83 | */
|
84 | |
85 | /* activate pull-up, set ports to output, init U8glib */
|
86 | //u8g_SetPinInput(PN(2,5)); u8g_SetPinLevel(PN(2,5), 1); u8g_SetPinOutput(PN(2,5));
|
87 | //u8g_SetPinInput(PN(2,4)); u8g_SetPinLevel(PN(2,4), 1); u8g_SetPinOutput(PN(2,4));
|
88 | //u8g_InitI2C(&u8g, &u8g_dev_ssd1327_96x96_gr_i2c, U8G_I2C_OPT_NONE);
|
89 | |
90 | /*
|
91 | Test Envionment 3, ATMEGA and NHD 192x32 ST7920 special SPI
|
92 | R/W, MOSI, Red: Port C, Bit 5
|
93 | RS, CS, Yellow: Port C, Bit 4
|
94 | EN, SCK, Green: Port C, Bit 3
|
95 | Arguments for u8g_InitSPI are: SCK, MOSI, CS, A0, Reset
|
96 | A0 and Reset are not used.
|
97 | */
|
98 | u8g_InitSPI(&u8g, &u8g_dev_st7920_192x32_sw_spi, PN(2, 3), PN(2, 5), PN(2, 4), U8G_PIN_NONE, U8G_PIN_NONE); |
99 | u8g_InitHWSPI(&u8g, &u8g_dev_st7920_192x32_hw_spi, PN(2, 4), U8G_PIN_NONE, U8G_PIN_NONE); |
100 | |
101 | |
102 | }
|
103 | |
104 | void sys_init(void) |
105 | {
|
106 | #if defined(__AVR__)
|
107 | /* select minimal prescaler (max system speed) */
|
108 | CLKPR = 0x80; |
109 | CLKPR = 0x00; |
110 | #endif
|
111 | }
|
112 | |
113 | void draw(void) |
114 | {
|
115 | u8g_SetFont(&u8g, u8g_font_6x10); |
116 | u8g_DrawStr(&u8g, 0, 15, "Hello World!"); |
117 | }
|
118 | |
119 | int main(void) |
120 | {
|
121 | sys_init(); |
122 | u8g_setup(); |
123 | |
124 | for(;;) |
125 | {
|
126 | u8g_FirstPage(&u8g); |
127 | do
|
128 | {
|
129 | draw(); |
130 | } while ( u8g_NextPage(&u8g) ); |
131 | u8g_Delay(100); |
132 | }
|
133 | |
134 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.

