Du kannst keine neue Antwort schreiben
Seiten (2): [1] 2 »

Autor Thema 
hybrid

SP-Schnüffler

hybrid

Registriert seit: Mai 2005

Wohnort:

Verein:

Beiträge: 675

Status: Offline

Beitrag 86103 , RMB AVR unter Linux [Alter Beitrag05. Oktober 2005 um 14:21]

[Melden] Profil von hybrid anzeigen    hybrid eine private Nachricht schicken   Besuche hybrid's Homepage    Mehr Beiträge von hybrid finden

Moin!
Gestern habe ich den AVR das erste Mal unter Linux programmiert bekommen.

Besteht Interesse daran, daß ich kurz aufschreibe, was man braucht und wie das geht?

Grüße
Malte
CharlyMai

Foren-Prediger


Administrator

CharlyMai

Registriert seit: Mär 2005

Wohnort: Fuhrberg

Verein: SOLARIS-RMB e.V. (P2;T2) / AGM / TRA#21598

Beiträge: 1976

Status: Offline

Beitrag 86105 [Alter Beitrag05. Oktober 2005 um 14:27]

[Melden] Profil von CharlyMai anzeigen    CharlyMai eine private Nachricht schicken   Besuche CharlyMai's Homepage    Mehr Beiträge von CharlyMai finden

Natürlich Malte ....

Ich denke es gibt hier einige die mit dem Pinguin unterwegs sind ....

Ich werde bei der Software Installation ausschließlich die Windows Variante behandeln ....

Grüße
Pierre

Geändert von CharlyMai am 05. Oktober 2005 um 14:37


•"Der Glaube an eine bestimmte Idee gibt dem Forscher den Rückhalt für seine Arbeit.
Ohne diesen Glauben wäre er verloren in einem Meer von Zweifeln und halbgültigen Beweisen." Konrad Zuse

•Konstruiere ein System, das selbst ein Irrer anwenden kann, und so wird es auch nur ein Irrer anwenden wollen.

SOLARIS-RMB e.V. AGM
Marsi

Anzündhilfe

Registriert seit: Jun 2004

Wohnort: AC/KT

Verein:

Beiträge: 25

Status: Offline

Beitrag 86370 [Alter Beitrag07. Oktober 2005 um 16:33]

[Melden] Profil von Marsi anzeigen    Marsi eine private Nachricht schicken   Besuche Marsi's Homepage    Mehr Beiträge von Marsi finden

Also mich würde das unter Linux interessieren, wenns nicht unverhältnismäßig mehr Aufwand als unter Windows ist. wink
AlexanderM

Epoxy-Meister

Registriert seit: Feb 2004

Wohnort: Düsseldorf

Verein: FAR

Beiträge: 238

Status: Offline

Beitrag 91921 [Alter Beitrag17. Dezember 2005 um 18:33]

[Melden] Profil von AlexanderM anzeigen    AlexanderM eine private Nachricht schicken   Besuche AlexanderM's Homepage    Mehr Beiträge von AlexanderM finden

Mich würde es auch interessieren,
Alexander
Andreas Mueller

Epoxy-Meister

Registriert seit: Sep 2004

Wohnort:

Verein: ARGOS

Beiträge: 322

Status: Offline

Beitrag 91926 [Alter Beitrag17. Dezember 2005 um 19:38]

[Melden] Profil von Andreas Mueller anzeigen    Andreas Mueller eine private Nachricht schicken   Andreas Mueller besitzt keine Homepage    Mehr Beiträge von Andreas Mueller finden

Zitat:
Original geschrieben von hybrid

Besteht Interesse daran, daß ich kurz aufschreibe, was man braucht und wie das geht?


Da Malte anscheinend wichtigeres zu tun hat, hier eine Kurzanleitung.

Systemvoraussetzungen: alle Tools zum Entwickeln von C-Code müssen installiert sein.

Was will man erreichen? Einen funktionierenden Cross-Compiler, Cross Assembler und Cross Linker sowie eine C-Bibliothek, mit der man Binaries für den AVR erzeugen kann. Diese Binaries sollte man dann in das Zielsystem laden können. Am praktischsten ist wohl, wenn alles unter einem festen Verzeichnis ist, den man für die AVR Basteleien vorne auf den Pfad nimmt. Zeitbedarf: ca 1 Stunde.

Wie geht man vor?
1. Cross-Assembler und Cross-Linker für AVR: binutils-2.16.1.tar.gz herunterladen, auspacken und mit folgendem Befehl konfigurieren, bauen und installieren:

./configure --target=avr --prefix=/usr/local/avr --enable-install-libbfd
make
make install

Ab diesem Moment sollte man /usr/local/avr/bin auf den Pfad nehmen, damit Linker und Assembler gefunden werden.

2. Cross Compiler: gcc-4.0.2.tar.bz2 herunterladen, auspacken. Ein Verzeichnis avr-gcc-4.0.2-obj anlegen, dort drin GCC konfigurieren, bauen und installieren:

../gcc-4.0.2/configure --target=avr --prefix=/usr/local/avr --enable-languages=c
make
make install

Wenn man eine frühere Version von gcc nimmt hat man möglicherweise nicht alle Targets, die man sich wünschen würde, insbesondere fehlt dann der AT90CAN128.

3. C-Library: avr-libc-1.2.5.tar.gz herunterladen, auspacken und mit folgenden Befehlen konfigurieren und kompilieren und installieren:

PREFIX=/usr/local/avr; export PREFIX
./doconf
./domake
./domake install

(leider scheinen die Leute im avr-libc Projekt noch nicht ganz verstanden zu haben, wie man autoconf/automake verwendet, sonst wären die Scripts doconf und domake nicht nötig).

4. AVRdude zum Programmieren des Chips installieren: avrdude-5.0.tar.gz herunterladen und auspacken. Achtung: aktuelle Versionen des AVR ISP können eventuell mit dem avrdude-4.x Probleme haben. Konfigurieren, bauen und installieren:

./configure
make
make install

Jetzt ist man im Prinzip ausgerüstet, um Programme für den AVR zu kompileren, zu linken und zu laden.

Kompilieren: avr-gcc -mmcu=attiny13 -g -o test.o -c test.c
Linken: avr-gcc -mmcu=attiny13 -o test test.o -lm (dieses Programm braucht die libm)
In Intel Hex umwandeln: avr-objcopy --target ihex test test.hex
Laden: avrdude -p t13 -c avrispv2 -P /dev/ttyS1 -U flash:w:test.hex -u -v

Danach startet das Programm automatisch. Natürlich darf man diese Befehle auch in Makefiles brauchen, und autoconf/automake sind auch einsetzbar, man muss nur mit den Tests unter autoconf etwas aufpassen, da diese ja nicht ausgeführt werden können. Die meisten IDE lassen sich dazu überreden, mit der AVR-Toolsuite zu arbeiten, aber das ist nichts für mich, zu viel Geklicke.

Was man noch wissen sollte:
a) Nur Controller mit einem RAM-basierten Stack sind in C programmierbar, aber natürlich kann man mit den eben installierten Tools auch in Assembler programmieren, wenn man sich das wirklich antun will.
b) int hat 16 bit (moderne Unix haben 32bit, der meiste freie C-Code nimmt 32bit ints an)
c) sizeof(double) = 4 = sizeof(float) d.h. es gibt keine wirklichen doubles, long long (64bit) gibt es hingegen.
d) Ein beliebter Fehler: den mcu-Typ muss man auch beim Linken angeben, da sonst das falsche C Runtime hinzugelinkt wird. Da im C Runtime der Stackpointer und das initialisierte Datensegment initialisiert wird, und einige Prozessoren den Stack/ihr RAM dort haben, wo andere ihre IO-Register haben, kann man ganz lustige Effekte hervorrufen.

Obige Prozedur ist übrigens nicht Linux-spezifisch, sondern funktioniert so ziemlich auf jedem modernen Unix-artigen Betriebssystem. Insbesondere zum Beispiel Mac OS X.

Geändert von Andreas Mueller am 17. Dezember 2005 um 22:36

Marsi

Anzündhilfe

Registriert seit: Jun 2004

Wohnort: AC/KT

Verein:

Beiträge: 25

Status: Offline

Beitrag 91931 [Alter Beitrag17. Dezember 2005 um 21:19]

[Melden] Profil von Marsi anzeigen    Marsi eine private Nachricht schicken   Besuche Marsi's Homepage    Mehr Beiträge von Marsi finden

confused

Ich glaub ich benutz Windows ... Zuviel Input für mich. ;-)
CharlyMai

Foren-Prediger


Administrator

CharlyMai

Registriert seit: Mär 2005

Wohnort: Fuhrberg

Verein: SOLARIS-RMB e.V. (P2;T2) / AGM / TRA#21598

Beiträge: 1976

Status: Offline

Beitrag 91932 [Alter Beitrag17. Dezember 2005 um 21:21]

[Melden] Profil von CharlyMai anzeigen    CharlyMai eine private Nachricht schicken   Besuche CharlyMai's Homepage    Mehr Beiträge von CharlyMai finden

Hierbei sei erwähnt, das es um den C Compiler geht .....

Bascom müsste in einem Windows Clone laufen .....

Der Kurs behandelt ausschließlich Bascom, die C Zugaben sind kein fester Bestandteil !!!

Grüße
Pierre

•"Der Glaube an eine bestimmte Idee gibt dem Forscher den Rückhalt für seine Arbeit.
Ohne diesen Glauben wäre er verloren in einem Meer von Zweifeln und halbgültigen Beweisen." Konrad Zuse

•Konstruiere ein System, das selbst ein Irrer anwenden kann, und so wird es auch nur ein Irrer anwenden wollen.

SOLARIS-RMB e.V. AGM
hybrid

SP-Schnüffler

hybrid

Registriert seit: Mai 2005

Wohnort:

Verein:

Beiträge: 675

Status: Offline

Beitrag 91939 [Alter Beitrag17. Dezember 2005 um 22:37]

[Melden] Profil von hybrid anzeigen    hybrid eine private Nachricht schicken   Besuche hybrid's Homepage    Mehr Beiträge von hybrid finden

Hehe, ja, sorry, ich war ein bißchen abgelenkt wink

Unter Debian geht zumindestens die Installation der benötigten Software etwas einfacher:

z.B.
apt-get install gcc-avr
apt-get install avr-libc
apt-get install avrdude

Dann sollte man sich noch die avrlib http://hubbard.engr.scu.edu/embedded/avr/avrlib/ als zipfile besorgen. Sei enthält einen reichen Quell an Routinen für Timer, ADC, LCDs und UART, etc...

Projektverzeichnis anlegen und die avrlib dahinein entzippen. Neue Prokjekte bekommen jetzt jeweils einen Unterordner im Projekt-ordner. also z.B.
projects/
--------avrlib
--------test
--------blabla


Wichtig ist dabei dann auf alle Fälle das Makefile.

Anhang: makefile.txt als Makefile in einem Projektunterordner speichern.

Ein Makefile steuert, was wann zu passieren hat in Abhängigkeit vom Änderungsdatum der Dateien.
wenn sich bei einem großen Projekt nur eine c-Datei ändert wäre es unsinnig, alle c-Dateien zu übersetzen, es wird nur eine übersetzt. Ändert sich hingegen eine Includierte (.h) Datei, "weiß" das Makefile, welche c-Dateien durch diese Änderung betroffen sind und kompiliert alle betroffenen.

Das Makefile muss aber noch an einigen Stellen angepasst werden.
An die eigene Hardware (Programmer, Serielle Schnittstelle), bsp:
AVRDUDE_PROGRAMMER = avrispv2
# der Programmer beim RMB AVR-Kurs ist ein avrispv2

AVRDUDE_PORT = /dev/ttyS0
# bei mir ist das so

An den verwendeter AVR und Taktfrequenz) , bsp:
MCU = atmega16
F_CPU = 16000000
# das ist korrekt für den RMB AVR-Kurs

und an das Projekt, bsp:
# Target file name (without extension).
TARGET = test
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

# Für einen Test nicht verkehrt

Von da ab reicht ein 'make program', um alle geänderten Sourcen zu übersetzen und im Erfolgsfall gleich zu proggen. Nach Änderungen am Makefile: 'make clean program'

Zu den Datentypen, in <stdint.h> (avr-libc) werden z.B. folgende Datentypen definiert:
int8_t (8Bit integer), uint8_t (8Bit unsigned integer)
int16_t (16Bit integer), uint16_t (16Bit unsigned integer)
int32_t (32Bit unsigned integer), uint32_t (32Bit unsigned integer)

Damit macht man sich nicht von der Größe von char, short und int abhängig.

Grüße
Malte

Geändert von hybrid am 17. Dezember 2005 um 22:58

Marsi

Anzündhilfe

Registriert seit: Jun 2004

Wohnort: AC/KT

Verein:

Beiträge: 25

Status: Offline

Beitrag 103224 [Alter Beitrag14. August 2006 um 14:04]

[Melden] Profil von Marsi anzeigen    Marsi eine private Nachricht schicken   Besuche Marsi's Homepage    Mehr Beiträge von Marsi finden

Da ich ja seit einiger Zeit mit der angeblich benutzerfreundlichsten Distribution (Ubuntu) arbeite und Windows seit 6 Monaten nicht mehr gebootet habe, wollte ich mal die Experten fragen, was ich brauche.
Zitat:

daniel@Saturn:~/Desktop/AVR$ sudo apt-cache search AVR
ava - Algebraical Virtual Assembler for Atmel's AVR MCUs
avr-libc - Standard C library for Atmel AVR development
avra - Assembler for Atmel AVR microcontrollers
avrdude - software for programming Atmel AVR microcontrollers
avrdude-doc - documentation for avrdude
avrp - Programmer for Atmel AVR microcontrollers
avrprog - Programmer for Atmel AVR microcontrollers
binutils-avr - Binary utilities that support Atmel's AVR targets.
gcc-avr - The GNU C compiler (cross compiler for avr)
gdb-avr - The GNU Debugger for avr
libgringotts1 - encapsulate data in an encrypted and compressed file
libmjpegtools0c2a - MJPEG video capture/editting/playback MPEG encoding
sdcc - Small Device C Compiler
sdcc-doc - Small Device C Compiler (documentation)
sdcc-libraries - Small Device C Compiler (libraries)
simulavr - Atmel AVR simulator
traceroute-nanog - Determine route of packets in TCP/IP networks (NANOG variant)uisp - Micro In-System Programmer for Atmel's AVR MCUs
libmjpegtools-dev - MJPEG video capture/editting/playback MPEG encoding
mjpegtools - MJPEG video capture/editting/playback MPEG encoding




Hybrid, du benutzt AVRDude? Kannst mal Screenshots davon machen? Hab ich das jetzt richtig verstanden, dass ich mit Linux nur C programmieren kann? Also Bascom Befehle nutzen mir dann garnichts? Wie ist das mit dem Projektverzeichnis? Darf ich das überall speichern, auch in meinem Homeverzeichnis?
hybrid

SP-Schnüffler

hybrid

Registriert seit: Mai 2005

Wohnort:

Verein:

Beiträge: 675

Status: Offline

Beitrag 103241 [Alter Beitrag15. August 2006 um 04:27]

[Melden] Profil von hybrid anzeigen    hybrid eine private Nachricht schicken   Besuche hybrid's Homepage    Mehr Beiträge von hybrid finden

Hi Marsi,

ich heiße Malte, mein Name steht immer ganz unten wink

Unter Linux kannst Du nur AVRs nur in C programmieren.
avrdude ist keine grafische Applikation, sondern wird über das Makefile aufgerufen, wenn es etwas zum AVR zu schieben gibt.

Unter Linux/Unix darfst Du Dein Projektverzeichnis NUR in Deinem Home-Verzeichnis (oder einem Unterverzeichnis davon) anlegen. Du kannst doch gar nicht in andere Verzeichnisse schreiben. Außer /tmp und /var/tmp. Und wenn Du das machen würdest, wären die Sachen nach ein paar Wochen oder beim Neustart weg.

Ich habe folgende Pakete (debian) installiert
avrdude (avrdude-doc)
avr-libc
binutils-avr
gcc-avr

Wenn Du 'ne Windows-CD hast (98 oder 2k sind am einfachsten), und eine CPU mit mehr als 1GHz und mind. 512MB Spiecher kannst du aber qemu installieren und darin Windows. Darin läuft dann auch AVRSTudio und bascom, ohne daß Du den Rechner neu starten musst.

qemu gibt es bestimmt auch als ubuntu-Paket, aber evtl ist die Windows-installation auf http://fabrice.bellard.free.fr/qemu/ besser beschrieben.

Als Packeterwaltung benutze ich übrigens synaptic. Ist "etwas" komfortabler als apt big grinbig grinbig grin!

Grüße
Malte

Geändert von hybrid am 15. August 2006 um 04:30

Seiten (2): [1] 2 »
[Zurück zum Anfang]
Du kannst keine neue Antwort schreiben