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
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.
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
@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
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?
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
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
>Was mache ich falsch dass der Code nicht mehr in die text region passt? Größeren AVR nehmen. Das Flash ist voll.
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.
>> 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.
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
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.
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
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
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?
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
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.
weis jemand wo man für dieses Beispiel den Code herbekommt?
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.