Forum: Mikrocontroller und Digitale Elektronik DOGM128 & ATMEGA88 - Library von Google code


von Studentle (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Projekt mit dem DOGM128. Man muss das Rad ja nicht 
jedes mal neu erfinden. Also habe ich mich dafür entschieden folgende 
Library zu verwenden:

http://code.google.com/p/dogm128/wiki/dogm132_atmega88_hardware

Ich habe als Hardware einen ATMega88 und das DOGM128.

Nun mein Porblem:

Die Beispiele kann ich mit "make" erstellen und die .hex mit meinem 
Programmer auf meine Hardware programmieren. Und es tut ;)

Gut jetzt möchte ich das ganze mit AvrStudio verwenden. Welche Dateien 
muss ich in meinen Projektordner kopieren und über AvrStudio includen?

Ich habe versucht einfach alle .c und .h zu importieren, allerdings 
lässt scheinen mir immernoch die fonts zu fehlen.

Wie kann ich ohne das makefile die ports  pins  hardware definieren?

Wäre nett wenn mir jemand dazu einwenig weiterhelfen könnte.

THX

von Lehrmann M. (ubimbo)


Lesenswert?

Studentle schrieb:
> Man muss das Rad ja nicht
> jedes mal neu erfinden. Also habe ich mich dafür entschieden folgende
> Library zu verwenden:

Ich will ehrlich sein: Man kann sowas sagen, wenn man versteht was in 
dieser lib passiert. Da du noch nichteinmal derart dezidiertes Wissen 
hast um deine Entwicklungsumgebung korrekt einzurichten, gehe ich mal 
stark davon aus, dass du weder je ein Mikrocontrollerprojekt begonnen 
nocht Kenntniss von AVR hast. Darum linke ich dir an dieser Stelle das 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Hier solltest du einen besseren Einstieg finden, als sinnlos 
irgendwelchen Code zu klauen den du weder verstehen geschweige denn 
debuggen kannst.

von spess53 (Gast)


Lesenswert?

Hi

> Also habe ich mich dafür entschieden folgende
>Library zu verwenden:

>http://code.google.com/p/dogm128/wiki/dogm132_atme...

Aber hoffentlich nicht diese müllige Schaltung nachgebaut. Elkos sind da 
absolut fehl am Platz.

MfG Spess

von olikraus (Gast)


Lesenswert?

@spess53
Jaja, mittlerweile benutze ich Kerkos, wobei die Elkos immer noch einen 
guten Dienst tun... vielleicht sollte ich mal die Schaltpläne 
aktualisieren.

@Studentle
Man kann alle Makros für die Port Definitionen auch an den Anfang der 
Datei dogm128.h schreiben:

Aus
-DDOG_SPI_A0_PORT=B -DDOG_SPI_A0_PIN=1
wird
#define DOG_SPI_A0_PORT B
#define DOG_SPI_A0_PIN 1


Grüße
Oliver

von Studentle (Gast)


Lesenswert?

Hallo Oliver,

vielen Dank für deine Hilfe, vom Meister persönlich, welch eine Ehre.

Als Hardware verwende ich ATMega88 @ Pollin Eval-Board.
Display ist fliegend verkabelt und tut einwandfrei. Nur die Software 
macht mir Sorgen :(

Wie schon gesagt in der Lib, Make ausführen klappt, .hex wird erzeugt 
und tut einwandfrei:
1
avr-size fonts.elf
2
   text    data     bss     dec     hex filename
3
   7078      12     131    7221    1c35 fonts.elf


Soweit sogut, dank deinem Tip habe ich jetzt die Defines in der 
DOGM128.h angepasst:
1
#define DOG_SPI_ATMEGA
2
3
#define DOG_SPI_SS_PORT    B
4
#define DOG_SPI_SS_PIN    2
5
6
#define DOG_SPI_SCL_PORT   B
7
#define DOG_SPI_SCL_PIN   5
8
9
#define DOG_SPI_MOSI_PORT   B
10
#define DOG_SPI_MOSI_PIN  3
11
12
#define DOG_SPI_A0_PORT    B 
13
#define DOG_SPI_A0_PIN    1
14
15
#define DOGM128_HW

Ich habe jetzt unter Source Files alle *.h Files zum Projekt hinzugefügt 
und das selbe mit den *.h Files

Außerdem habe ich mit das Makefile nochmal genauer angesehen und 
Versucht sie im AVRStudio anzupassen:

"Project" -> "Configuration Options" -> "Custom Settings"

Die "Custom Compilation Options" angepasst, dem Make File entsprechend:

AVRStudio Build:
1
avr-gcc  -mmcu=atmega88 -Wall -std=gnu99 -g -I.   -I ../../lib/        -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wstrict-prototypes  -MD -MP -MT dogm128.o -MF dep/dogm128.o.d  -c  ../lib/dogm128.c

Make
1
avr-gcc -DF_CPU=8000000 -mmcu=atmega88 -DDOGM128_HW -DDOG_SPI_ATMEGA -DDOG_SPI_S S_PORT=B -DDOG_SPI_SS_PIN=2 -DDOG_SPI_SCL_PORT=B -DDOG_SPI_SCL_PIN=5 -DDOG_SPI_M OSI_PORT=B -DDOG_SPI_MOSI_PIN=3 -DDOG_SPI_A0_PORT=B -DDOG_SPI_A0_PIN=1 -g -Os -Wall -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -I. -I../.. /lib/ -std=gnu99 -Wstrict-prototypes -c -o ../../lib/dogmsh.o ../../lib/dogmsh.c

Der Build läuft soweit.

Allerdings bekomme ich 2 Errors:
1
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: fonts.elf section .text will not fit in region text
2
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: region text overflowed by 1162 bytes

Was mache ich falsch dass der Code nicht mehr in die text region passt?

von olikraus (Gast)


Lesenswert?

Hi

Nun, das Makefile benutzt ein Feature des Linkers nur diejenigen Dateien 
einzubinden, die auch tatsächlich benötigt werden. Das funktioniert so, 
dass nur zuerst eine Lib erzeugt wird und dannach die Lib als ganzes 
gegen das main() Programm gelinked wird.

Leider kenne ich mich mit dem AVR STUDIO nicht aus und kann Dir deshalb 
nicht sagen welche Möglichkeiten es gibt, aber eines geht immer: Du 
kannst per Hand die Arbeit des Linkers machen.

Nehmen wir mal das "font" Beispiel Programm.
Du beginnst damit nur die eine .c datei aus dem example-Ordner 
dazuzunehmen, versuchst zu linken und bekommst dadurch eine 
Fehlermeldung (Symbol fehlt). Die nimmst eine weitere .c Datei dazu in 
der das Symbol definiert ist. Das machst Du so lange, bis alles 
durchläuft.

Man könnte das auch umgekehrt machen, mit allen Dateien anfangen und 
solange Dateien wegnehmen, bis ein Linkerfehler auftritt, dass ein 
Symbol nicht aufgelöst werden konnte.

Sofern das AVR Studio das zulässt, kann man auch - wie im Makefile - 
eine Lib erstellen. D.h. alles was nicht in den Example Ordner ist, 
kommt in die Lib. Dann wird das Beispielprogramm und die Lib gelinkt. 
Wie gesagt, ich weiss nicht, ob und wie das im AVR Studio geht.

Weiteres gerne auch per e-mail

Oliver

von Studentle (Gast)


Lesenswert?

Hallo Oliver,

okey... das erklärt einiges.

Also das AVRStudio nutzt WinAVR also den GCC als Compiler. Mit Hilfe der 
GUI kann ich dort auch Parameter übergeben.

Wenn ich das auf die schnelle gesehen habe auch dem Linker. Auf der 
anderen Seite habe ich auch die Möglichkeit die Makefile von dir zu 
verwenden. Allerdings hat das bisher noch nicht zum Erfolg geführt...

Wie lautet denn die Linkeroption? Das würde ich gerne als erstes testen.

Vielen Dank

von holger (Gast)


Lesenswert?

>Was mache ich falsch dass der Code nicht mehr in die text region passt?

Größeren AVR nehmen. Das Flash ist voll.

von Studentle (Gast)


Lesenswert?

holger schrieb:
>>Was mache ich falsch dass der Code nicht mehr in die text region passt?
>
> Größeren AVR nehmen. Das Flash ist voll.

haha, 2 makes beim einen passts in µC und beim anderen nicht.

von holger (Gast)


Lesenswert?

>> Größeren AVR nehmen. Das Flash ist voll.

>haha, 2 makes beim einen passts in µC und beim anderen nicht.

Du kannst gerne weiterlachen. Poste dein komplettes AVStudio
Projekt, dann kann man mal nachsehen was schief läuft.
Irgend ein doppeltes include vermute ich.

von Studentle (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Holger,

so anbei "mein Code"

das ist der Orginalsource von Oliver:

http://code.google.com/p/dogm128/downloads/detail?name=dogm128_avr_v1.08.zip&can=2&q=

Ich habe nur den Ordner ATMega88 und lib gezippt.

Modifziert habe ich:
 dogm128.h

Unter "Project" -> "Configuration Options" -> "Custom Settings"
Habe ich nur den Include Pfad hinzugefügt.

Die oben erwähnten Compileroptionen sind in diesem Projket nicht mehr 
vorhanden.

Ich versuch das Beispiel ATMega88/fonts zu kompilieren, dort befindet 
sich auch die AVRStudio Projektdatei!

LG

von holger (Gast)


Lesenswert?

Ha, ha. Das hat er ja echt tricky gemacht.
Source als Library compilieren und dann beim linken
ne Hex Datei draus machen und alles wegwerfen was nicht benutzt wird.

Da wird aber einiges als Einstellung beim Studio nötig;)
Falls es überhaupt geht. Keine Ahnung wie man das jetzt
hinkriegt.

von Studentle (Gast)


Angehängte Dateien:

Lesenswert?

Soooo,

ich habe von den entsprechenden Fensteren im AVRStudio Screenshots 
gemacht.

Hier kann ich beliebige Compiler / Linkeroptionen eintragen (wenn ich 
das richtig verstehe)

Mit was muss ich den Linker füttern damit er nur die wirklich genutzten 
Funktionen einbindet.

LG

von olikraus (Gast)


Lesenswert?

Hi All

Zum AVRStudio kann ich wohl nichts beitragen, werde aber die Diskussion 
interessiert verfolgen.

Ich meinte aber verstanden zu haben, dass bei uns beiden zumindest das 
Makefile funktioniert und ein Hex-File liefert, dass flashbar ist.

Beste Grüße,
Oliver

von Studentle (Gast)


Lesenswert?

So,
ich habe nun ein Workaround.

Für die Entwicklung nutze ich AVRStudio, um das Hexfile zu erzeugen 
nutze ich die Makefile von Oliver.

Diese lässt sich in AVRStudio einbinden und muss nicht extern gestartet 
werden.

Eine Frage könnte ich noch: Kann ich in einem Makefile mehrere include 
Pfade angeben?

von olikraus (Gast)


Lesenswert?

Hi

Im Makefile gibt es eine Zeile die lautet etwa so:
COMMON_FLAGS += -I. -I$(DOGDIR)
Hier können eigene Pfade hinzugenommen werden:
COMMON_FLAGS += -I. -I$(DOGDIR) -I/home/my_path

Grüße,
Oliver

von Franc (Gast)


Lesenswert?

Moin!

ist in dieser Lib von Oli Kraus auch dieses Beispiel:
http://schmelle2.de/wp/wp-content/uploads/2010/10/DOGM128_Action.jpg
enthalten? Das würde ich gerne mal testen auf meinem mega328 mit 
DOGM128. Weis aber nicht wie die Quelldateien benannt sind.

von Franc (Gast)


Lesenswert?

weis jemand wo man für dieses Beispiel den Code herbekommt?

von Franc (Gast)


Lesenswert?

keiner?

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.