Forum: Mikrocontroller und Digitale Elektronik AVR Ansteuerung 12864B GLCD


von Til (Gast)


Lesenswert?

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

von Oliver S. (oliverso)


Lesenswert?

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

von Til (Gast)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

Im Sourcecode finde ich nichts mit TWMS1 oder ähnliches. Sicher dass du 
dir den Quellcode für AVR runtergeladen hast?

von Til (Gast)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

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

von Til (Gast)


Angehängte Dateien:

Lesenswert?

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

von Til (Gast)


Angehängte Dateien:

Lesenswert?

Hoppla, da habe ich ein flasches Bild angehängt. Das richtige folgt 
hier. :)

von Timmo H. (masterfx)


Lesenswert?

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.

von Til M. (til_mey)


Lesenswert?

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!

von Timmo H. (masterfx)


Lesenswert?

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.

von Til M. (til_mey)


Lesenswert?

Super vielen Dank, werde ich gleich ausprobieren!

von Til M. (til_mey)


Lesenswert?

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
Noch kein Account? Hier anmelden.