Nokia 3310 Lcd Ansteuerung in AVR-GCC

Gast #185899
Lesenswert?

Ansteuerung über hw SPI des Grafik LCD vom Nokia 3310.
Features:
Textausgabe, Pixel, Bilder zeichnen.
Displayram wird im AVR zwischengespeichert.

Der Code wird noch erweitert(vorerst Linien zeichnen und Textscroll).
Updates gibt es demnächst bei http://www.deramon.de
Angehängte Dateien:
Gast #185903
Lesenswert?

hallo Deramon!
Wir machen in der Schule als Projekt einen GPS-Empfänger und wollen die
Daten über ein 3310-Display ausgeben.
Meine Frage: Ist es möglich das Display mit einem AT89C2051
anzusteuern?
Wird dein Bsp. von jedem µC-Compiler unterstützt und wieviel Speicher
benötigt die Ansteuerung??
mfg 2 überforderte HTL-Schüler
Gast #185904
Lesenswert?

@ Andreas:

Das Bsp. ist für AVR MCs. Mit 8051ger MCs hab ich nicht allzuviel
bisher gemacht, aber ich vermute das mit einer Anpassung der Ports und
des HW SPI es funktionieren sollte.

Zum Speicherverbrauch. Da man das Displayram nicht auslesen kann cached
der MC die 504 bytes. Für eine reine Textausgabe kann man sich das
cachen und somit 504 bytes SRAM sparen(ist eigentlich nur für
Grafikfunktionen interessant, da man immer 1 byte also 8 Pixel an das
LCD senden muss und ohne Cache beim setzen eines Pixel die restlichen 7
überschrieben werden)
Im Programmflash werden mit PROGMEM die Bilder abgelegt, pro Bild 504
bytes. Ob es so eine funktion bei den 8051ger MCs gibt weis ich leider
nicht, zur not muss man die Bilder dann im SRAM ablegen.
Hier ein Auszug des gesamten Speicherverbrauchs:
Size after:
drm3310test.elf  :
section    size      addr
.data        70   8388864
.text      2632         0
.bss        588   8388934
.noinit       0   8389522
.eeprom       0   8454144
.stab      3444         0
.stabstr   2947         0
Total      9681

Ich habe mir das eben mal in der Anleitung zu AVR-GCC angeschaut und
wenn ich das richtig verstanden habe benötigt das Programm + 1 Bild
2632 bytes Programmflash, SRAM wären dann 588+70 = 658 bytes. .stab und
.stabstr müssten dann die Debuginfos sein die aber nicht auf den MC
geflasht werden.
Gast #185905
Lesenswert?

Die Berechnung Flash/SRAM ist nicht ganz korrekt:

.text + .data = ROM (Flash) Usage
.data + .bss + (.noinit) + (stack) + (heap) = RAM Usage

.text is your code
.data is your variables with initialized values
.bss is your variables without initialized values

Also Flash = 2632 + 70 = 2702 Bytes
     RAM   = 70 + 588 = 658 Bytes + (stack) + (heap)

Für einen '51er kann der Speicherverbrauch (zumindest Flash) aber ganz
anders aussehen.

Volkmar
Gast #185911
Lesenswert?

Hallo,

Habe das 3310 Display am Mega8 angeschlossen, Pins in die
Header file angepasst, und klappt (toll), aber nur für 50%.
Mit Wiederstände die Logiknivo's angepasst, und mit eine
LED die Versorgungsspannung vom Display auf 3,2V bekommen.

Habe aber die Zeichen auf das Display in Spiegelbild ....?????.....
Und nein, habe das Display richting montiert.......

Jemand der weiß was hier das Problem ist???

MfG,

Robert
Gast #185916
Lesenswert?

Probiersmal mit Sammelbestellungen aus China. Kostet Dich dann 3€ inkl.
Steuern und Versand. Aber!!! ab 1000 Stück!

Ebay Tipp:
Kauft bloss nicht bei Chipgigant!, Xullu! (EBAY) Das sieht auf den
ersten Blick günstig aus, verlangt aber unkosten von 2€ extra pro
Display. Bei grösseren Mengen kann es auch passieren das über 40%
defekt sind und der Typ Sie nicht zurück nimmt.
Also meidet diesen Typen!
Gast #185918
Lesenswert?

Hallo zusammen,

habe einen Mega8L mit 3.68 Mhz an das Display angeschlossen, und das
Programm von Deramon geladen. Leider kann ich weder x noch y Addr
setzen. Das Display zeigt zwar den Text, aber dann fogen ein Punkt in
der untersten Zeile danach ein Punkt eine Zeile höher.(0x80 und 0x40)
D.h. Setxy wird nicht als Command sondern als Daten zum Display
gesendet. Writecommand geht aber ansonsten, da das DSisplay ja
initialisiert wird. Weiß jemand einen Rat ?

Harald
Gast #185919
Lesenswert?

Hallo Harald,

ich hatte anfangs auch Probleme mit der Displayansteuerung. Auch bei
mir wurde der Text nicht wirklich richtig dargestellt. Das Problem bei
mir war, dass ich die MISO Leitung des ATmega als Steuerleitung für das
Display verwendet habe. Nun habe ich einen anderen Portpin für dies
Steuerleitung verwendet, MISO ist nun nicht mehr am Display
angeschlossen, und der Text/Bild wird richtig angezeigt.

Andi
Gast #185924
Lesenswert?

Hi Deramon,

ich habe vor ebenfalls eni Nokia-display an einem AVR zu betreiben.
Habe auch aufmerksam deine Seite durchforstet und mir beide bibo's
runtergeladen für 3310 und 6100.
Weist du zufällig, ob das Display vom 3330 baugleich mit dem vom 3310
ist und ich deine Funktionen vom 3310 fürs 3330 verwenden  kann?!

Oder vielleicht hat es sogar schon jemand gemacht, und kann mir was
dazu sagen.

Danke im Voraus
LittleCB
Gast #185925
Lesenswert?

Hallo,

hab mir gerade ein 3310 Display ins Auto eingebaut. Momentan werden
noch keine richtigen Daten empfangen, daher "no data", aber in
Zukunft (spätestens nächste Woche) werde ich dort Aussentemperatur,
Batteriespannung, Seehöhe, Speed, Richtung in Grad,.... (GPS-Daten)
anzeigen. Momentan habe ich die Anzeige in den Rückspiegel eingebaut,
ist aber nur eine 7-Segment. Also freue ich mich schon auf die neue
Anzeige.

Ansteuern und Programmieren kann ich den Controller, ein ATmega8, über
die serielle Schnittstelle mit Bootloader. Weiters werde ich mir noch
ein Protokoll überlegen, mit CS usw. um Daten gezielt auszugeben.
Unterstützt wird zur Zeit große Schrift (12x16), kleine Schrift (5x7),
Display löschen, Text rechts, oder zentriert schreiben,....

mfg
Andi
Angehängte Dateien:
Gast #185926
Lesenswert?

@ andreas:

sieht täuschend echt aus, wie ein richtiger boardcomputer, bravo!

wie hast du es mit der hintergrundbeleuchtung gemacht, el folie?
oder leds-dann hast du aber vielleicht das plastikteil darunter
abgeschnitten und als lichtleiter benutzt, oder wie?

also, nochmals, sieht gut aus, ich wurde aber doch ein nokia 6100 color
lcd nehmen und min. mega32, besser direkt mega128, kostet ja nur noch 10
eur; du wirst bestimmt mit float rechnen wollen und dann war mein mega16
mit 14 float-gleichungen 1.ordnung gleich voll :-(
Gast #185928
Lesenswert?

@emil

das mit der Hintergrundbeleuchtung war gar nicht so einfach. Anfangs
wollte ich SMD LEDs verwenden, doch ich habe noch einige 5mm LEDs im
Kasten gehabt. 4 davon genügen vollkommen. Den Lichtleiter, der über
das Display hinausragt habe ich abgezwickt, da ich nicht von unten,
sondern von der Seite hineinleuchten wollte. Doch die Leds haben einen
so starken Leuchtkegel, dass das nicht sehr schon ausgesehen hat.
Deshalb habe ich die LED Linse abgezwickt. Damit streut das Licht viel
mehr und ich habe eine relativ gute Ausleuchtung ohne direkte
Leuchtkegel. Ist zwar brutal, aber es funktioniert....

Das Problem bei der blauen Beleuchtung ist, dass diese relativ dunkel
ist, hellblaue LEDs wären vielleicht besser, oder auch die weiße HG
einen 6610 Displays...

Ich hatte auch überlegt, ein Graphikdisplay zu verwenden, aber das wäre
mir zu teuer gewesen. Ausserdem habe ich noch einige ATmega8 zuhause,
die ich verwenden wollte.

Das Display mit Controller wertet nur die seriellen Daten aus und zeigt
diese an. Somit brauche ich dort keine große Rechenoperationen
durchführen. Das erledigt die "Zentrale". Dort habe ich einen uralten
89S8252 verbaut, der die GPS Daten auswertet, Temperatur und
Bordspannung mißt, und seriell an das Display sendet.

Freut mich wenn es dir gefällt, war auch ziemlich viel Arbeit, das
Display dort hineinzubringen.

@LittleCB
meiner Meinung nach ist das Display vom 3310 das selbe wie im 3310.

mfg
Andi
Gast #185931
Lesenswert?

Habe mir jetzt ein anderes Display genommen,
und klappt. Kein Spiegelbild oder anderes Fremdes
verhalten. habe nur den Reset extern gemacht mit
Wiederstand und Capacität. Tolle Sache das es so klappt.

Zu die ganze 74LVC245 Geschichte, habe einfach die
Wiederstände genommen als SpannungsTeiler. Dies ist
schon hier irgendwo gemeldet.

3 Wiederstande von je 10K in Serie vom Atmel Pin nach Masse,
und zwischen den ersten und zweiten gezählt ab die Atmel Pins
die Nokia Pins angeschlossen. Klappt auch wunderbar, gemessen so
etwa 3,1 - 3,2 Volt.

Zu Spannungsversorgung ein LED in die Versorgungsleitung vom 3310
Display, und das klappt auch wunderbar. Gemessen so etwa 3,3 Volt.
Dies alles nur im Fall der Mega nicht auf 3,3, Volt lauft....

MfG,

Robert
Gast #185932
Lesenswert?

Hi@all,

ich such schon ewig lange nach einer möglichkeit texte auf einem handy
LCD anzeigen zu lassen. Am besten über den Computer. Braucht man dafür
noch was bestimmtes, oder geht das nur mit den Teilen von dem Handy?
Ich hab noch n Nokia 3310 übrig und würde das auch gern machen...kann
mir da jmd helfen?

THX!
MfG Sebastian O.
Gast #185934
Lesenswert?

Danke für die schnelle Antwort. Ich hab bei google mehrmals gesucht,
aber ich komm damit einfach nicht zurecht - ich hab keine Ahnung von
den Controllern und so ein zeug. Ich hab vor ein paar Wochen mit dem
LTP rumgespielt und ne LED steuerung gebastelt um die schaltung mit
einem selbstgemachten Programm zu steuern.

Mit dem ersten Link kann ich auch nicht so arg viel anfangen, weil
jetzt die ganzen Abkürzungen usw. auch noch in Englisch sind :-) nicht
dass ich kein Englisch kann, aber sowas in englisch...mhhh....naja. Was
muss ich denn wo anschliessen? Ich hab 8Pins an dem Display.

MfG Sebastian O.
Gast #185937
Lesenswert?

Danke für deine Antwort, aber mir ist vorher was dummes passiert. Ich
wollte einfach mal n paar Kabel dranlöten, dann is mit das Display
gerissen! :-(

Frage2:

Kann ich das LCD vom Siemens C25 auch nehmen? Ich hab da vor kurzem mal
was im I-Net gelesen, dass das irgendwie geht!?! :-/


MfG Sebastian O.

UND FROHE WEIHNACHTEN AN ALLE! ;-)
Gast #185940
Lesenswert?

Hm wenn du ein Display am LPT betreiben willst würd ich dir nicht das
Nokia display empfehlen, der aufwand ist zu gross und du scheinst schon
am anschlag zu sein.

Nimm stattdessen ein Handelsübliches Display mit 5 Volt pegel und
Standart HD44780U Kontroller. Dazu erhälst du auf Wunsch eine
zusäzliche serielle schnittstelle. In der Schweiz ist das bei
www.vtec.ch erhältlich, müsste aber in deutschland auch zu bekommen
sein.
Gast #185942
Lesenswert?

@Sebastian: (und alle anderen, die ähnliches versuchen)

Das Display des Siemens C25 ist kein Graphikdisplay, sondern ähnlich
wie die Displays mit HD44780-Controller eines, das nur Zeichen an
bestimmten Positionen darstellen kann.
Daher kann dieses Display nicht anstelle der üblichen Nokia-Displays
verwendet werden.

Graphikdisplays sind von Siemens erst in der 35er-Serie verbaut worden,
ein kleineres im C35 und M35 und ein etwas größeres im S35.
Weiß wer, wie die Dinger anzusteuern sind?
Gast #185944
Lesenswert?

Hallo

BITTE UM HILFE

Ich spiele mich jetzt schon seit  Stunden,...
Auf einm Mega128 läuft die Library hervorragend, auf dem Mega8 nach
umdefinieren der Pins, nichts,...

Ich verwende folgende Pins für den Mega8:
#define GLCD_SER_PORT    PORTB
#define GLCD_SER_DDR    DDRB
#define GLCD_SCLK    PINB5
#define GLCD_MOSI    PINB3
#define GLCD_SS      PINB2

#define GLCD_CTRL_PORT    PORTB
#define GLCD_CTRL_DDR    DDRB
#define GLCD_DC      PINB0
#define GLCD_CE_    PINB1
#define GLCD_RES_    PINB4

Was ist an der Belegung falsch ?
Muß man sonst noch was ändern ?

LG
Michael
Gast #185946
Lesenswert?

Hallo

Habe jetzt folgendes probiert, hat aber auch nichts geändert,...

#define GLCD_SER_PORT    PORTB
#define GLCD_SER_DDR    DDRB
#define GLCD_SCLK    PINB5
#define GLCD_MOSI    PINB3
#define GLCD_SS      PINB2

#define GLCD_CTRL_PORT    PORTC
#define GLCD_CTRL_DDR    DDRC
#define GLCD_DC      PINC0
#define GLCD_CE_    PINC1
#define GLCD_RES_    PINC2

LG
Michael
Gast #185950
Lesenswert?

Hallo Michael,

am Anfang hat's auch nicht mit einem Atmega8 geklappt,
aber nachdem ich die pins (speziell PB4) geändert hatte und ein neues
Display genommen hatte gings. Leider war mein Lötkolben beim ersten
Display zu heiß gewesen.AVCC ist übrigens Analog Spannung für den
internen Analog Digitalwandler. Muß an Spannungsversorgung. Bei mir
3.3V, denn ich habe einen Mega8L8 genommen, damit fällt die
Pegelwandlung zum Display weg.
Allerdings wundert es mich, daß noch keiner eine Platine gemacht hat,
die einfach hinten auf das Display aufgeklebt wird, damit würde man
viele Fehler beim löten vermeiden.Wäre sicherlich ein Hit. Man könnte
darauf auch LED's für die Hintergrundbeleuchtung vorsehen.Leider hab
ich bis jetzt noch nicht selber geätzt, aber daß soll sich mal ändern.

Gruß
Harald
Gast #185951
Lesenswert?

Hallo Harald

Mein Dispplay ist auch defekt. WEIN,WEIN,...
Noch dazu war es ein blaues.
Habe noch ein 2es und damit genau das gleiche,
am 128er funktionier es am 8er nicht.
Wärst Du so nett und mailst mir dein "Port Mapping" für den
Atmega8.

Platine ist kein Problem.
Spiele derzeit noch mit dem STK, sobald das aber beendet ist,
mache ich eine.

LG
Michael
Gast #185952
Lesenswert?

Hallo Michael,

Ja, das kenn ich. Ich habe auch fast geheult, als ich mein erstes
Display zerschossen
habe. Die Herstellung der Platine dürfte eigentlich nicht so schwierig
sein.Sie sollte nach unten
ein wenig länger sein, damit man einen Stecker dranlöten kann. Damit
ist diese sogar
einseitig machbar. Sobald ich Zeit finde mach ich mich mal ans Eagle
und male was.

mein Portmapping ist folgendermasen:

// Lcd Port Settings
#define GLCD_SER_PORT    PORTB
#define GLCD_SER_DDR    DDRB
#define GLCD_SCLK    PINB5
#define GLCD_MOSI    PINB3
#define GLCD_SS      PINB2

#define GLCD_CTRL_PORT    PORTB
#define GLCD_CTRL_DDR    DDRB
#define GLCD_DC      PINB2
#define GLCD_CE_    PINB1
#define GLCD_RES_    PINB0

damit funktioniert es wunderbar. Mit welcher Taktfrequenz arbeitest Du
?
Spiel mal ein wenig mit dem Contrast ! Also es funktioniert definitiv.
Meinen Mega8 takte ich
momentan mit 3.6864 Mhz. Kontrolliere mal deine Fuses.

Gruß
Harald
Gast #185955
Lesenswert?

Hallo

@Harald
DANKE!!!
Werde es Heute nach der Arbeit gleich probieren.
Ich verwende den internen Takt von 4 Mhz, damit
der MC auch noch mit 3,3V funzt. Meinen DS18S20
kann ich auch bei beiden Prozessoren auslesen.

@Andreas
http://free-vz.t-com.hr/Ivica-Novakovic/Nokia%20Lcd%20Termometar.htm
Der arbeitet zwar mit einem Pic, aber kann das Display auch
invertieren. Das dürfte automatisch mehr Kontrast bringen.

@All
Mittlerweile habe ich mit beiden blauen 3110er LCDs ein Problem,
gerade das "normale" graue funzt noch zuverlässig.

Aus "bitterster" Erfahrung kann ich nun mitteilen,
sobald man das Lcd angeschlossen hat und es funktioniert,
Heißkleber drüber was nur geht.

So habe ich das mit meinem grauen 3110 gemacht und dann verhält es sich
auch zuverlässig.
Bei meinen beiden blauen, wollte ich das nicht, da für diese eine
Platine vorgesehen waren. HEUL,....

Na ja, wenn man sich mit den Dräthen spielt, reagiert es wenigstens
noch manchmal. Die Kontaktierung zum IC ist wirklich superempfindlich
auf Stress (mehr noch als ich,...).
Dabei sind die blauen LCDs noch die geklebten.
Die meißten die man Heutztage auf Ebay bekommt sind solche wo die
Kontakte einfach runterfallen, sobald man das Glasdisplay in der Hnd
hält. Daher bin ich davon ausgegangen, das die etwas mehr Stress
aushalten.

Vielleicht hilft ja auch etwas Kontaktspry auf die Pins zu sprühen.

Hat von Euch jemand eine Idee wie man die noch retten könnte ?

LG
Michael
Gast #185956
Lesenswert?

Hallo Harald,

danke für deine schnelle Antwort. Ich habe mir die Library selbst
erstellt. Die Initialisierung siehr folgendermaßen aus:

//********************************************************************** 
*******
// Init the display
//********************************************************************** 
*******
void LCD_Init(void)
{
  // D/C und Reset as output
  DC_OUTPUT;
  RESET_OUTPUT;

  // reset LCD
  RESET_LOW;
  Delay_ms(1);
  RESET_HIGH;

  // enter extended Functionset
  LCD_WriteCommand(LCD_FUNCTIONSETEXT);
  LCD_WriteCommand(LCD_SETBIAS | 0x03);
  LCD_WriteCommand(LCD_SETVOP | 0x10);
  LCD_WriteCommand(LCD_SETTEMPCOEFF | 0x01);

  // enter normal Functionset
  LCD_WriteCommand(LCD_FUNCTIONSET);
  LCD_WriteCommand(LCD_SETDISPLAYNORM);

  // reset whole display RAM
  LCD_Clear();
}

Danke für deine Hilfe
mfg
Andi
Gast #185959
Lesenswert?

Nochmal an alle die Probleme haben:

evtl. müsst Ihr das Register SPCR ändern. Dort wird der Teiler für die
Frequenz festgelegt. Wenn Ihr mit 16 Mhz arbeitet, solltet Ihr nicht
den kleinsten Teiler nehmen.

Die Auswahl der Taktrate erfolgt wie folgt:

SPI2X SPR1 SPR0 SCK Frequenz
0     0    0    fosz/4
0     0    1    fosz/16
0     1    0    fosz/64
0     1    1    fosz/128
1     0    0    fosz/2
1     0    1    fosz/8
1     1    0    fosz/32
1     1    1    fosz/64


SPR1 und SPR0 sind in SPCR zu finden, SPI2X (Double SPI Speed Bit)
liegt in SPSR (SPI Status Register).
Bei 3.6864 Mhz sollte es in etwa so aussehen:
SPCR = (1<<MSTR)|(1<<SPE)|(1<<SPR0);

Gruß
Harald
Gast #185962
Lesenswert?

moin!
kurze bitte an euch:
könnte mir jemand vielleicht nen binfile mit dem democode von deramon
(compiliert für mega128) schicken/posten, habe bisher nur in asm
gecoded und mit dem winavr c package bekomm ich den mist irgendwie noch
nicht compiliert(sollte doch eigentlich klappen?).
so könnte ich schoneinmal sicherstellen, das meine hardware funzt, (hab
mir sogar nen stk501 spendiert)

mein dank an euch!

j.
Gast #185966
Lesenswert?

@Harald

In der glcdn_spiInit wird einmal ein sbi(GLCD_SER_DDR, GLCD_SS);
gemacht und unter anderem in der glcdn_InitDisplay wird ein
sbi(GLCD_CTRL_DDR, GLCD_DC);  gemacht.
Das würde ich nun nicht nicht angesprochen nennen, gebe aber
trotzdem zu, ich hätte noch tiefer in der Code einsteigen müssen,
um dann erst zu fragen.
Wann Du sagst, es funktioniert so, glaube ich es und warte
nun auf meine Nokia Displays.

Grüße
Ralf
Gast #185968
Lesenswert?

Hallo,
ich habe gerade die Schaltung nachgebaut und sie hat auf anhieb
funktioniert. Nur stimmt irgendwie der Kontrast nicht.

Ich verwende einen ATMEGA32, @16MHZ, alles bei 3,3V .

// Lcd Port Settings
#define GLCD_SER_PORT    PORTB
#define GLCD_SER_DDR    DDRB
#define GLCD_SCLK    PINB7
#define GLCD_MOSI    PINB5
#define GLCD_SS      PINB4

#define GLCD_CTRL_PORT    PORTB
#define GLCD_CTRL_DDR    DDRB
#define GLCD_DC      PINB4
#define GLCD_CE_    PINB1
#define GLCD_RES_    PINB0

zwischen Vout und GND habe ich einen 4,7uF Elko angebracht. + an Vout!
Ich sehe zwar "Nokia 3310", Bild und TestLCD, allerdings habe ich
immer noch horizontale, schwarze Querstreifen auf dem Display.

Wenn ich mit meinem Finger die beiden Pins des Elkos brückte, dann kann
ich über den Druck den Kontrast so abschwächen, dass die schwaren
Streifen verwinden und die Anzeige perfekt ist.

Leider habe ich im Moment keinen 1uF Elko da, sonst würde ich es damit
auch noch probieren.

Liegt es wirklich am Elko? Bekommt ihr die Streifen auch, wenn Ihr den
Elko z.B. ausbaut oder vergrößert?

Danke

Cu Trucki
Gast #185969
Lesenswert?

Durch SerienSchaltung von zwei Elko's wird die gesammte
Capazität kleiner.... Gleiche Berechnung wie zwei
Wiederstände Parallel...... Zwei 4,7uF Elco ergibt dan so
etwa 2uF....

Weiter,

In die Routine glcdn_InitDisplay()
den KontrastWert anpassen

  // Set Contrast
  glcdn_Contrast(0x20);

Bischen 'RumpSpielen' mit den Wert, hat bei mir Prima
Funktioniert...

Robert
Gast #185971
Lesenswert?

Hallo

ich kann den COde nicht Kompilieren. Fehler:


8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct
-fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=drm3310test.o
-std=gnu99 drm3310test.o drm3310.o   --output drm3310test.elf
-Wl,-Map=drm3310test.map,--cref -lm
drm3310.o(.text+0x8): In function `glcdn_spiInit':
D:\ATMEL\nokia 3310 display-Avr\AVR/drm3310.c:24: undefined
reference to `sbi'
drm3310.o(.text+0x14):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:25: undefined reference to `sbi'
drm3310.o(.text+0x20):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:26: undefined reference to `sbi'
drm3310.o(.text+0x2c):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:27: undefined reference to `sbi'
drm3310.o(.text+0x38):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:31: undefined reference to `inp'
drm3310.o(.text+0x4a): In function `glcdn_spiSendByte':
D:\ATMEL\nokia 3310 display-Avr\AVR/drm3310.c:37: undefined
reference to `cbi'
drm3310.o(.text+0x5c):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:43: undefined reference to `sbi'
drm3310.o(.text+0x92): In function `glcdn_WriteCommand':
D:\ATMEL\nokia 3310 display-Avr\AVR/drm3310.c:86: undefined
reference to `cbi'
drm3310.o(.text+0xc8): In function `glcdn_WriteData':
D:\ATMEL\nokia 3310 display-Avr\AVR/drm3310.c:78: undefined
reference to `sbi'
drm3310.o(.text+0x17e): In function `glcdn_InitDisplay':
D:\ATMEL\nokia 3310 display-Avr\AVR/drm3310.c:49: undefined
reference to `sbi'
drm3310.o(.text+0x18a):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:50: undefined reference to `sbi'
drm3310.o(.text+0x196):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:51: undefined reference to `sbi'
drm3310.o(.text+0x1a2):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:54: undefined reference to `cbi'
drm3310.o(.text+0x1ba):D:\ATMEL\nokia 3310
display-Avr\AVR/drm3310.c:56: undefined reference to `sbi'
drm3310.o(.text+0x280): In function `glcdn_PutStrXLine':
D:\ATMEL\nokia 3310 display-Avr\AVR/drm3310.c:144: undefined
reference to `PRG_RDB'
drm3310.o(.text+0x320): In function `glcdn_ShowImage':
D:\ATMEL\nokia 3310 display-Avr\AVR/drm3310.c:166: undefined
reference to `PRG_RDB'
make.exe: *** [drm3310test.elf] Error 1


Ich benutze WINAVR 2.0.5.48 Programmers Notepad 2

Kann mir jemand helfen??
Gast #185973
Lesenswert?

Hallo

Leider ist es nicht nur sbi und cbi, die haben auch noch andere macros
entfernt. Seit ich umgestiegen bin, verwende ich ein compatibility.h
header file um meinen code abwärtskompatibel zu halten.

Etwa so

#ifndef cbi
 #include "compatibility.h"
#endif

Dadurch kann ich mit der "alten" Libc auf meinem laptop und der neuen
auf den desktop compilieren ohne was ändern zu müssen.

LG
Rubi
Gast #599908
Lesenswert?

Hallo,
ich versuche verzweifelt den Code aus dem Eingangsposting zu 
compilieren, aber es will auch nach stundenlangem rumprobieren einfach 
nicht gelingen (weder mit WinAVR unter wine noch mit cdk-avr-gcc). Hat 
jemand zufällig ne fertige .hex für den mega8, die er hochladen kann 
(und dann das Pinout verraten für das sie compiliert ist...)
Bisher habe ich nur mit Assembler programmiert, deswegen bin ich bei der 
Fehlersuche total aufgeschmissen...
Gruß Tobias

PS: Ja ich habe bemerkt wie alt dieses Thema schon ist...
Gast #787544
Lesenswert?

Ich habe ein 3310 und ein 3510 Display bei mir am Laufen. Übrigens spare 
ich mir die Umwandlung auf 3,3 Volt und betreibe das Display direkt mit 
den 5V vom PIC. Bislang ohne Probleme.
Tip:
Wenn ein Display mal nicht will, so kann das am defekten dc/dc 
Schaltkreis im Displaycontroller liegen. So habe ich auch eins.-> Über 
einen 8,2k Ohm Widerstand den Vout an 12 Volt anschliesen und staunen. 
Das Display läuft wieder!

Gruß Meik
(Hab meine Login Daten gerade nicht parat, deshalb Gast)

@frank B. lies mal etwas weiter oben, falls es noch aktuell 
ist(01.10.2007)
Gast #822341
Lesenswert?

Hallo,
ich hab eben mal probiert das 3310 display anzusteuern allerdings bleibt 
es einfach schwarz hab nen spannungsteiler aufgelötet und die pins an 
einem atmega portC angeschlossen ( im programm geändert)
sollte es nicht schon schwarz anzeigen wenn ich da den reset sowie v+ 
und gnd an mein netzteil anschließe ?
gruß
martin
Persönliche Seite #1662955
Lesenswert?

Abend,
hab grad gesehn, dass meine Version der Bibliothek schon hier verlinkt 
ist.
Vielen Dank Paule

da sich in nächste Zeit noch einiges auf der Seite ändert, ist es 
besser, man nutzt den allgemeinen Link auf die Startseite und dann 
einfach auf "Display Nokia 3310"

http://bluematrixi.bl.funpic.de/

Über das Display kann ich sagen, dass es super ist.
  - Es ist einfach anzusteuern
  - man kann viel realisieren
  - für normale Projekte ist die Größe ausreichend
  - ein kleiner Prozessor reicht aus

danke an all die, die damals das ganze Projekt begonnen haben.

Grüße martin
Persönliche Seite #1868211
Lesenswert?

Hier die neuste Version von der Bibliothek Nokia3310,
diesmal sind alle möglichen Funktionen enthalten für kreise, Linien, 
Texte, Bilder und und und... einfach mal testen.

ich würd mich freuen, wenn jemand die bibliothek nochmal etwas 
überarbeiten könnte... also nochmal nachsehen was man noch verbessern 
könnte.

ansonsten findet man immer die aktuellste Version hier: 
http://www.jtronics.de/elektronik-avr.html

Unter der Rubrik Boards gibt es auch noch ein speziell für das Display 
entwickletes Board. Dieses ist für kleinere Mess-, Steuer- oder 
Reglungsaufgaben in Verbindung mit dem Display gedacht. Funktioniert 
super! Habe damit selber mehrere Geräte in Betrieb.

wer interesse hat einfach melden...

Viel Spass damit
martin
Gast #3353177
Lesenswert?

Hi!

Ich hoffe mal der Thread ist nicht zu alt, möchte ja nicht zum 
Leichenfledderer werden. Hat aber trotzdem noch was mit dem 
Ursprungsthema zu tun.

Erstmal danke an Martin für die Library!

Ich habe da aber noch ein paar Probleme die zum Laufen zu bekommen.

Zu meinem "System":
Atmega328P an 3310 LCD aus Ebay
Stromversorgung 3,3V aus dem Arduino
Programmierung über AVR Studio 6 und AVR ISP MkII

Zu meinem Problem:

Ich habe die Library heruntergeladen und dann in meinen Projektordner 
entpackt. Den Inhalt der main.c in mein Hauptprogramm kopiert.
In der Nokia_3310.c musste ich folgende Zeile einfügen: #include 
"Nokia_3310.h". Dann findet er zumindest schonmal alle Dateien.
Dann noch das "static" vor den Variablen, z.B. für das logo in "const" 
umwandeln.

Dann kommen aber lauter Warnungen in der "DateinameDesProjekts.o". 
Fehler ist "first defined here".

Irgendeine Lösung? Ich bin da echt am Verzweifeln...

Danke schonmal für eure Hilfe!
Gast #4180252
Lesenswert?

Ja ich hab mir so diese Nokia 5110 / Phillips Display gekauft.

Hat ja 8 Pins


RST CE DC Din Clk Vcc HL Gnd.


Ich habe den Code aus der drm3310test.c in eine neues AVR Studio 6 
Projekt kopiert. Neuer Dateiname Display.c Dort ist Mainfunktion drin. 
Um nicht auch noch die die drm3310.c ins AVR Studio zu importieren, habe 
ich den Code aus dieser Datei auch kopiert und ebenfalls in die neue 
Datei Display.c kopiert.

Dann habe ich die Header Datei in AVR Studio 6 bei dem Projekt Display 
hinzugefügt. Offensichtlich muss man laut dem Debugger einige Variablen 
in der Header-Datei auf static setzten, das ich auch gemacht habe.

Würdet ihr mir bitte bestätigen, dass das bisher so richtig ist?

Nun ist mein Problem, dass der Debugger mir die Meldung ausgibt:

"undefinded referece to 'cbi'".

Was ist die Ursache für diese Fehlereintrag?

Kann man diese Displays auch mit 5V betreiben? (Sowohl 
Spannungsversorgung als auch Datenleitungspegel?)Ich habe bisher überall 
gelesen, dass 3,3V das Max. ist, auch im Datenballt vor allem bei den 
logischen Eingängen!


Manni
#4180271
Lesenswert?

manni schrieb:
> Hier der Code
>
> Danke

wo kommt der her?
1
void glcdn_spiInit(void)
2
{
3
  // Init Serial Ports
4
  sbi(GLCD_SER_PORT, GLCD_SCLK);

da fehlt die Funktion sbi() oder das #define dazu:

Beitrag "sbi und cbi in C"

https://www.mikrocontroller.net/articles/AVR-GCC
"np(), outp(), sbi() und cbi() werden in der aktuellen 
Bibliotheksversion nicht offiziell unterstützt (man muss eine spezielle 
Header-Datei einbinden(deprecated.h)."

http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__deprecated__items_1ga014ef751e83f97569c06f3cdd888f3f7.html
#4180303
Lesenswert?

manni schrieb:
> #define sbi... einfach in meine Display.c
> Datei reinschreibe.

wenn du magst oder musst (um nicht zuviel zu ändern):

#define sbi(port,bit) (port)|=(1<<(bit))

ehrlich ich habe es mir angewöhnt es in pur C zuschreiben:
1
// in PINS_H
2
#if defined(__AVR_ATmega328P__)
3
  #define LED_ARDUINO      5
4
  #define LED_ARDUINO_DDR  DDRB
5
  #define LED_ARDUINO_PORT PORTB
6
  #define LED_ARDUINO_ON   LED_ARDUINO_PORT|=(1<<LED_ARDUINO)
7
  #define LED_ARDUINO_OFF  LED_ARDUINO_PORT&=~(1<<LED_ARDUINO)
8
#endif
9

10
// in prg.c oder prg.ino
11
#ifdef LED_ARDUINO
12
  LED_ARDUINO_DDR |= (1<<LED_ARDUINO);
13
#endif

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren