PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linux-AVR Programmierung



oderlachs
15.09.2013, 16:33
Wer kann mir ein gutes, einfaches Programm für AVR Programmierung unter Linux empfehlen ?. Ich arbeite mit Ubuntu, habe Eclipse mit AVR Plugin, aber damit komme ich nicht zurecht, vieleicht ist es auch noch nicht richtig konfiguriert, oder unvollständig, weiss nicht.
Auch sollten üblich Programmer oder gar das STK 500 unterstützt werden.
Ich habe ein Handbuch für Eclipse, aber da ist nix dergleichen drinnen beschrieben. Im Web ist alles fast ausschliesslich in englisch dafür gehalten, aber mein bis'l "Fachenglisch" reicht dazu nicht aus..

Danke schon mal

Gruss Gerhard

-schumi-
15.09.2013, 18:27
Ich arbeite am liebsten mit einem Makefile und einem Editor. Habe auch an einem Wiki-Artikel mitgewirkt, in dem das genau erklärt wird: http://wiki.ubuntuusers.de/avr

oderlachs
15.09.2013, 19:57
Danke Schumi, werds mir duchlesen...nur habe ich das mit dem Makefile noch nicht so recht kapiert .. :(

Gerhard

schorsch_76
17.09.2013, 15:01
Hallo Gerhard,

ich mach das eigentlich nur unter Linux mit dem folgenden Makefile:



CC=avr-gcc
RM=rm -f
OBJCOPY=avr-objcopy
AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P usb -e -U flash:w:
AVRSIZE=avr-size

MCU=atmega168p
F_CPU=16000000

CFLAGS=-g -DF_CPU=$(F_CPU) -Wall -Os -mcall-prologues

OBJ = main.o rc5.o

BIN = ir.bin
HEX = ir.hex
MAP = ir.map

.phony: all

all: $(OBJ)
$(RM) $(HEX) $(BIN) $(MAP)
$(CC) -mmcu=$(MCU) $(CFLAGS) -o $(BIN) -Wl,-Map,$(MAP) $(OBJ)
$(OBJCOPY) -R .eeprom -O ihex $(BIN) $(HEX)

%.o: %.c
$(CC) -mmcu=$(MCU) $(CFLAGS) -c $<

clean:
$(RM) $(OBJ) $(BIN) $(HEX) $(MAP)

flash: $(OBJ)
$(AVRDUDE)$(HEX)

size: $(BIN)
$(AVRSIZE) -C --mcu=$(MCU) $(BIN)


In dem Fall handelt es sich eben um einen Atmega168p/16MHz welcher mit avrdude und einem AvrISPmkII programmiert wird. Die Quelldateien sind main.c und rc5.c

ir.hex/ir.map/ir.bin sind die Übersetzten Dateien. Das Hexfile wird aus der bin Datei extrahiert.

Oben ist die Konfiguration, welche relativ einfach angepasst werden kann.

mit

make clean all flash
wird alles bereinigt, übersetzt und anschliessend auf den Zielprozessor geflasht.

Mit
make size kannst du dir den SPeicherverbrauch auf dem Ziel anzeigen lassen. Flash und Ram.

Bei Fragen, einfach fragen ;)

Gruß
Georg

oderlachs
17.09.2013, 15:17
Hallo Georg !
ich möchte Dir herzlichst danken für die Mühen, die Du Dir für meine Frage gemacht hast. Mir ist das Arbeiten auf Konsolenebene nicht unangenehm, nur das ich darin in Sachen AVR-Programmierung überhaupt keine Erfahrungen habe. ich gebe zu meine grössten Schwäche ist die Unkenntnis der englischen Sprache, aber in meinem Alter und nur für s Hobby möchte ich nicht noch eine Abendschule besuchen...
Ich werde mich mal mit der Materie befassen und wenn Fragen sind , wie Du schon erwähnt hast frage ich nochmals nach.

Danke + Gruss
Gerhard

Das wird mein Problem werden, weil ich den Programmer nicht besitze:

AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P usb -e -U flash:w:

schorsch_76
17.09.2013, 15:28
Welchen Programmer hast du denn? Avrdude kann praktisch alle ansprechen.

oderlachs
17.09.2013, 15:39
Nun hast Du mir aber in die Enge getrieben ;) Ich habe ne ganze Menge, weil ich (anfangs) zu dumm war(bin) den Richtigen gleich zu kaufen ;)

Die Nummer 1 ist eigendlich das STK500 Board, dann habe ich noch den "USB ASP", den USB ISP 500 von Olimex, den USBTinyISP, einen für den Parallelport(STK200kompatible) und einen Äquivalent zum Atmel ISP Programmer...aber besten komme ich mit dem STK500 aus, den die anderen werden nicht von jeder Software (AVR-Studio, Bascom, Arduino-IDE) unterstützt.

Der "AVR-ISP" hier zu sehen (http://www.ebay.de/itm/AVR-USB-ISP-Programmer-ATMEL-ATMEGA-STK500-Neu-ATTINY-/370490000223?pt=Wissenschaftliche_Ger%C3%A4te&hash=item5642ecc35f) hier der von Olimex (http://www.ebay.de/itm/Olimex-AVR-ISP500-Atmel-STK500-V2-AVR-Programmierer-/271248652695?pt=Wissenschaftliche_Ger%C3%A4te&hash=item3f27adf997)

schorsch_76
17.09.2013, 15:49
Für deinen STK500 lautet dann die Zeile:



AVRDUDE=sudo avrdude -p m168 -c stk500 -P /dev/ttyS0 -e -U flash:w:

Eventuell muss noch der /dev/ttyS0 Part angepasst werden. Jenachdem was für eine serielle Schnittstelle du hast. FTDI basierte Adapter haben oft /dev/ttyUSBS0 Das siehst du aber wenn du den Adapter einsteckts und direkt danach auf der Konsole

dmesg | tail eingibst.

Gruß
Georg

Edit: Soweit ich weis ist der von Olimex zum AvrispmkII kompatibel ... bin mir aber nicht sicher. Der Attiny basierte Programmer geht auch. Mit

man avrdude kannst du die alle Kommandozeilen Optioen erklären lassen. Gibt auch eine Option welche alle unterstützen Programmer anzeigt.

oderlachs
17.09.2013, 16:05
Ja danke vielmals Georg !!!
Ich werde mal probieren. Gibt es zwingend ein VZ wo ich die Quellcode ablegen muss oder kann ich da in meinem HOME VZ einfach einen Ordner für die Quellcode anlegen ?
Na ja ich muss ja nicht gleich heute und morgen alles verstanden haben, bzw. auch vollbracht haben. Durch Fehler und probieren lernt man ja noch dabei was.. ;)

Gruss Gerhard
wenn ich den USB-ISP anstecke sagt mir dmesg | tail :

gerhard@ubuntu12:~$ dmesg | tail
[ 816.754627] type=1400 audit(1379425330.586:26): apparmor="DENIED" operation="capable" parent=1 profile="/usr/sbin/cupsd" pid=535 comm="cupsd" pid=535 comm="cupsd" capability=36 capname="block_suspend"
[ 3061.168030] usb 8-1: new full-speed USB device number 2 using uhci_hcd
[ 3061.347067] usb 8-1: New USB device found, idVendor=16c0, idProduct=2a9b
[ 3061.347074] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3061.347079] usb 8-1: Product: AVR-ISP
[ 3061.347083] usb 8-1: Manufacturer: ERFOS
[ 3061.952051] cdc_acm 8-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 3061.952152] cdc_acm 8-1:1.0: ttyACM0: USB ACM device
[ 3061.955256] usbcore: registered new interface driver cdc_acm
[ 3061.955262] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters


und das beim USB ASP:

gerhard@ubuntu12:~$ dmesg | tail
[ 3061.952051] cdc_acm 8-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 3061.952152] cdc_acm 8-1:1.0: ttyACM0: USB ACM device
[ 3061.955256] usbcore: registered new interface driver cdc_acm
[ 3061.955262] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 3247.976078] usb 8-1: USB disconnect, device number 2
[ 3258.520033] usb 8-1: new low-speed USB device number 3 using uhci_hcd
[ 3258.691075] usb 8-1: New USB device found, idVendor=16c0, idProduct=05dc
[ 3258.691081] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3258.691086] usb 8-1: Product: USBasp
[ 3258.691090] usb 8-1: Manufacturer: www.fischl.de
gerhard@ubuntu12:~$

schorsch_76
17.09.2013, 17:03
Hallo Gerhard,

mein es gibt kein zwingendes Verzeichnis wo du deinen Quellcode ablegen musst. Ich habe Das bei mir so organisiert

Dokumente/Entwicklung/Embedded/ProjektXYZ

Unterordner firmware (hier liegt das Makefile und die Quelldateien)
Unterordner pcb (hier liegt der Schaltplan und das Layout der Platine)
Unterordner doc (hier liegen PDFs, etc pp)

Wie du siehst sagt dir Linux hier eine ganze Menge:
Beispiel:


1: [ 3061.168030] usb 8-1: new full-speed USB device number 2 using uhci_hcd
2: [ 3061.347067] usb 8-1: New USB device found, idVendor=16c0, idProduct=2a9b
3: [ 3061.347074] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
4: [ 3061.347079] usb 8-1: Product: AVR-ISP
5: [ 3061.347083] usb 8-1: Manufacturer: ERFOS
6. [ 3061.952051] cdc_acm 8-1:1.0: This device cannot do calls on its own. It is not a modem.
7. [ 3061.952152] cdc_acm 8-1:1.0: ttyACM0: USB ACM device


1. Fullspeed USB. aka USB 1.1
2. vendor(hersteller) Id: 16c0 Product ID: 2a9b. Eindeutige Identifikation des Gerätes
3. Seriennummer etc
4. Produktname
5. Herstellername
6. Jaja, ich weis, das ist kein Modem ;)
7. Der sog. device node. /dev/ttyACM0 WICHTIG!!!

Das zeigt die Daten des Chips welcher mit dem Rechner kommuniziert.
Für den USB ISP lautet also die avrdude Zeile

Ist das dieser hier?
http://www.reichelt.de/Programmer-Entwicklungstools/DIAMEX-ALL-AVR/3/index.html?&ACTION=3&LA=446&ARTICLE=110345&GROUPID=2969&artnr=DIAMEX+ALL+AVR

AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P usb -e -U flash:w:




Denke dass der Untere dieser hier ist:
http://www.fischl.de/usbasp/

Für den USB ASP lautet also die avrdude Zeile


AVRDUDE=sudo avrdude -p m168 -c usbasp -e -U flash:w:




Der STK500 ist ja ein serieller Programmer. Einfach den USB Adapter einstecken und die dmesg Ausgabe betrachten. -P /dev/ttyxyz anpassen ;)
Es gibt auch noch einen stk500/stk500v1/stk500v2. Einfach probieren. Wenn du


sudo avrdude -p m168 -c stk500 -P /dev/ttyACM0 -v
einfach in der Konsole eingibst, kannst du sehen was avrdude so erkennt. mit -vv siehst du noch mehr. -vvv geht auch ;)


Bei den USB Ids ist das 16c0 oft verwendet, das sind IDs von VOTI, welche oft frei verwendet werden können. Leider nicht so eindeutig, aber absolut die Ausnahme! Hier wird oft die vusb [1] Bibliothek eingesetzt wie bei dem usbasp. Diese IDs kann man in der vusb Bibliothek aber konfigurieren. Normalerweise, bezahlen Firmen für so einen Block Ids einiges an Geld. Deshalb wird bei Eigenbauprojekten oft das 16c0 verwendet ;)


Gruß
Georg

[1] http://www.obdev.at/products/vusb/

oderlachs
17.09.2013, 17:25
Mein erster Test endete gleich mit nem Fehler, wär auch zu schön wenns gleich geht...

gerhard@ubuntu12:~/avr_code$ make Led
cc Led.c -o Led
Led.c:8:20: schwerwiegender Fehler: avr/io.h: Datei oder Verzeichnis nicht gefunden
Kompilierung beendet.
make: *** [Led] Fehler 1


ich habe nur eine C Datei im VZ die Led.c

/* Sample program for Olimex AVR-P40-USB with ATMega16 processor
* Blink Led
* Compile with AVRStudio+WinAVR (gcc version 3.4.6) */

// Verwendete CPU = ATmega_1284p
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>

void PORT_Init()
{
PORTB = 0b00000000;
DDRB = 0b00000001; //set Led as output
}

int main()
{

PORT_Init();
while (1)
{
PORTB = PORTB | 0b00000001;
_delay_ms(500);
PORTB = PORTB & 0b11111110;
_delay_ms(500);
}
}
und die "umgestrickte make.txt":


CC=avr-gcc
RM=rm -f
OBJCOPY=avr-objcopy
AVRDUDE=sudo avrdude -p m1284 -c avrisp -P usb -e -U flash:w:
AVRSIZE=avr-size
MCU=atmega168p
F_CPU=16000000
CFLAGS=-g -DF_CPU=$(F_CPU) -Wall -Os -mcall-prologues
OBJ = Led.o
BIN = Led.bin
HEX = Led.hex
MAP = Led.map
.phony: all
all:
$(OBJ)
$(RM) $(HEX) $(BIN) $(MAP)
$(CC) -mmcu=$(MCU) $(CFLAGS) -o $(BIN) -Wl,-Map,$(MAP) $(OBJ)
$(OBJCOPY) -R .eeprom -O ihex $(BIN) $(HEX)
%.o: %.c
$(CC) -mmcu=$(MCU) $(CFLAGS) -c $<
clean:
$(RM) $(OBJ) $(BIN) $(HEX) $(MAP)
flash: $(OBJ)
$(AVRDUDE)$(HEX)
size:
$(BIN)
$(AVRSIZE) -C --mcu=$(MCU) $(BIN)

schorsch_76
17.09.2013, 17:59
Bitte noch die MCU anpassen auf deinen Atmega 1284

MCU=atmega1284p

und einfach nur

make all

Und wichtig: Die Tabs aus dem obigen Makefile müssen erhalten bleiben!!!

- - - Aktualisiert - - -

Habs hochgeladen, dann tust du dir leichter.

26408

Musst nur die txt Endung wegmachen sonst gings nicht.

oderlachs
17.09.2013, 18:01
Ich denke das es mit den Pfaden nicht klappt, weil ja avr/io.h nicht gefunden wird. Es ist aber alles unter "usr/lib/avr/include/avr/io.h" usw.. zu finden. habe da keine kennung wo ich das eintragen muss das dieser Pfad zu den Umgebungsvariablen hizugeführt wird

schorsch_76
17.09.2013, 18:14
Bei der avr build chain, muss die mcu stimmen. Die Kameraden haben teils unterschiedliche Verzeichnisse.

Habe deine main.c in mein Verzeichnis kopiert und es klappt soweit ...

oderlachs
17.09.2013, 18:26
ich habe nach wie vor fehler über nicht gefundedene dateien...es muss doch sowas wie eine config geben wo man das einstellen kann...dann habe ich den ganzen pfad angegeben :


#include <usr/lib/avr/include/avr/io.h>
dann wird über eine andere nicht aufgefundene Datei gemeckert, die dann von der io.h wohl aufgerufen wird oder ähnlich. Ich muss mal sehen ob ich irgendwo noch was in sachen installation dafür finde. ich kann Dich ja nicht mit meinem ganzen Ärger hier "bombardieren" .
Ich war jetzt auch ein paar Jahre raus aus Linux...habe nur win gemacht...muss auch wieder in linux reinfinden, weil mir das eigendlich gut gefällt.

Meine source liegt in einem verz. avr_code im home Verzeichnis aufrufen tue ich damit : make Led.c

ist das so ok ??
Danke
Gerhard

schorsch_76
17.09.2013, 18:32
Falls er es nicht findet kannst du die CFLAGS anpassen mit
-I/usr/lib/avr/include/ ergänzen

- - - Aktualisiert - - -

So sieht es bei mir aus:


georg@gentoo-machariel ~/IR/Programm $ ls
Makefile main.c
georg@gentoo-machariel ~/IR/Programm $ make all
avr-gcc -mmcu=atmega1284p -g -DF_CPU=16000000 -Wall -Os -mcall-prologues -c main.c
rm -f ir.hex ir.bin ir.map
avr-gcc -mmcu=atmega1284p -g -DF_CPU=16000000 -Wall -Os -mcall-prologues -o ir.bin -Wl,-Map,ir.map main.o
avr-objcopy -R .eeprom -O ihex ir.bin ir.hex
georg@gentoo-machariel ~/IR/Programm $ make flash
sudo avrdude -p m1284p -c avrisp -P usb -e -U flash:w:ir.hex
Password:



einfach nur
make all
den Rest soll das Makefile machen. Das ist seine Aufgabe ;)

oderlachs
17.09.2013, 18:39
Etwas besser ist es schon, aber noch nicht so ganz...werde mal den code umschreiben....

gerhard@ubuntu12:~$ cd avr_code
gerhard@ubuntu12:~/avr_code$ make all
avr-gcc -g -DF_CPU=16000000 -Wall -Os -mcall-prologues -c -o Led.o Led.c
Led.c:7:0: warning: »F_CPU« redefiniert
<command-line>:0:0: note: dies ist die Stelle der vorherigen Definition
In file included from Led.c:8:0:
/usr/lib/avr/include/avr/io.h:428:6: warning: #warning "device type not defined"
In file included from Led.c:9:0:
/usr/lib/avr/include/util/delay.h: In function ‘_delay_ms’:
/usr/lib/avr/include/util/delay.h:135:11: warning: unused variable ‘__ticks’
/usr/lib/avr/include/util/delay.h: In function ‘_delay_us’:
/usr/lib/avr/include/util/delay.h:212:10: warning: unused variable ‘__ticks’
Led.c: In function ‘PORT_Init’:
Led.c:14:2: error: ‘PORTB’ undeclared (first use in this function)
Led.c:14:2: note: each undeclared identifier is reported only once for each function it appears in
Led.c:15:2: error: ‘DDRB’ undeclared (first use in this function)
Led.c: In function ‘main’:
Led.c:24:3: error: ‘PORTB’ undeclared (first use in this function)
make: *** [Led.o] Fehler 1
gerhard@ubuntu12:~/avr_code$



habe erst mal besten Dank, Georg das hat mir sehr viel geholfen, ich werde später weiter probieren, mir kribbeln schon die Tippfinger vor Aufregung ob es doch noch gehen wird ;) ;)

schorsch_76
17.09.2013, 18:46
Das ist jetzt in der main.c muss das F_CPU raus.

Led.c:7:0: warning: »F_CPU« redefiniert

Hier nimm bitte mein Makefile, da passt die mcu und die Tabs.
/usr/lib/avr/include/avr/io.h:428:6: warning: #warning "device type not defined"

Untersched:
avr-gcc -g -DF_CPU=16000000 -Wall -Os -mcall-prologues -c -o Led.o Led.c
avr-gcc -mmcu=atmega1284p -g -DF_CPU=16000000 -Wall -Os -mcall-prologues -c main.c

Viel Erfolg!
Gruß
Georg

oderlachs
17.09.2013, 21:38
So bis aufs Flashen geht alles weil der usb port nicht gefunden wird ..werde ich bestimmt noch hinbekommen, es freut mich riesig hier eine solche Hilfe zu erfahren .
Danke Georg !!

Gerhard

oderlachs
18.09.2013, 12:31
Also mit meinem AVRISP habe ich Probleme beim Flaschen....es fehlt ein Returnwert vom AVRISP, mit dem USBASP läuft alles ohne Fehleranzeige, nur wird das Programm im Chip nicht geändert...???
Was das nun sein soll ist mir ein neues Rätsel...

Ich arbeite weiter an der Fehlersuche, zum anderen stelle ich mir die Frage wie ich unterlinux die Fuse auslesen/programmieren kann, dafür wird es doch wohl auch ein Prog geben..wenn man schon für Linux "Teewecker" programmiert.. ;)

schorsch_76
18.09.2013, 12:34
Heute abend hab ich wieder Linux unter der Tastatur, da kann ich dir dann nochmal helfen ;)

oderlachs
18.09.2013, 12:41
Danke Georg !,
da bin ich wieder bestimmt online...eine Fehler habe ich gefunden...Ich habe immer die Led.c geändert , das Makefile ist aber auf main.c ausgelegt.. Na ja aus Fehlern lernt man. Ich muss mich da mit Make und Makefile noch befassen...habe leider in meiner Fachöliteratur bislang nix darüber gefunden...habe diesen Werdegang auch noch nire gebraucht, aber doch schon mal was davon gehört.
In meiner Informatikerausbildung haben wir das so auch nicht gebraucht, war nur in Richtung Windoof gewesen mit MS C++.

Gerhard
Nachtrag mit dieser Änderung des Makefiles geht der AVRISP auch:

CC=avr-gcc
RM=rm -f
OBJCOPY=avr-objcopy
# Für USB-ASP Programmer
#AVRDUDE=sudo avrdude -p m1284p -c usbasp -P usb -e -U flash:w:
# Für AVRISP Progger(neu) Manufacturer: ERFOS
AVRDUDE=sudo avrdude -p m1284p -c avrispmkII -P /dev/ttyACM0 -e -U flash:w:
AVRSIZE=avr-size

MCU=atmega1284p
F_CPU=16000000

CFLAGS=-g -DF_CPU=$(F_CPU) -Wall -Os -mcall-prologues

OBJ = main.o

BIN = blink.bin
HEX = blink.hex
MAP = blink.map

.phony: all

all: $(OBJ)
$(RM) $(HEX) $(BIN) $(MAP)
$(CC) -mmcu=$(MCU) $(CFLAGS) -o $(BIN) -Wl,-Map,$(MAP) $(OBJ)
$(OBJCOPY) -R .eeprom -O ihex $(BIN) $(HEX)

%.o: %.c
$(CC) -mmcu=$(MCU) $(CFLAGS) -c $<

clean:
$(RM) $(OBJ) $(BIN) $(HEX) $(MAP)

flash: $(OBJ)
$(AVRDUDE)$(HEX)

size: $(BIN)
$(AVRSIZE) -C --mcu=$(MCU) $(BIN)

schorsch_76
18.09.2013, 15:23
Dann bringst du ja dein hex File in den Avr ein. Sehr gut :)

Sprich nur noch die Fuse bits, welche wie folgt erledigt werden:



# Fuse high byte:
# 0x5f = 0 1 0 1 1 1 1 1 <-- BODLEVEL0 (Brown out trigger level bit 0)
# ^ ^ ^ ^ ^ ^ ^------ BODLEVEL1 (Brown out trigger level bit 1)
# | | | | | +-------- BODLEVEL2 (Brown out trigger level bit 2)
# | | | | + --------- EESAVE (don't preserve EEPROM over chip erase)
# | | | +-------------- WDTON (WDT not always on)
# | | +---------------- SPIEN (allow serial programming)
# | +------------------ DWEN (ebug wire is enabled)
# +-------------------- RSTDISBL (reset pin is disabled)
# Fuse low byte:
# 0xdf = 1 1 0 1 1 1 1 1
# ^ ^ \ / \--+--/
# | | | +------- CKSEL 3..0 (external >8M crystal)
# | | +--------------- SUT 1..0 (crystal osc, BOD enabled)
# | +------------------ CKOUT (clock output enable)
# +-------------------- CKDIV8 (divide clock by eight disabled)

AVRDUDE=sudo avrdude -P deineschnittstelle -c deinprogger -p deintarget -U lfuse:w:0xdf:m -U hfuse:w:0x5f:m -U flash:w:



aus dem vusb Makefile entliehene Beschreibung der Bits.

Die Low/High Fusebits anpassen. WICHTIG!!!

Gruß
Georg

oderlachs
18.09.2013, 17:35
Danke Georg !
Ja so allmälich klapps auch unter Linux....Ist schon eine Umstellung wenn man sonst nur unter AVR Studio oder manchmal Bascom programmiert/geflasht hat.

Darum hatte/habe ich auch so viele Programmer, weil das eine mit dem und das andere mit dem nur ging. bestimmt gehen auchj alle, nur bin ich wohl nicht gut genug um alle anzupassen für die entsprechende Software.

Ich denke das ich mich über den kommenden Winter in Linux wieder einarbeiten werden, noch ist mir das Ubuntu12 etwas ungewohnt in der Bedieneroberfläche, war schon mal einfacher. Ich bin ja mit RedHat/Fedora "linuxtauglich" geworden. In den 90ern war ich auch noch bei einer Linuxgroup an einer FH, aber nun ist es für mich schon zu umständlich daran teilzunehmen geworden, vom Anfahrweg her...

Wenn ich mich mit "Geany" besser eingearbeitet habe wird dann auch einiges leichter für mich in Sachen AVR unter Linux. da muss ich die Einstellungen für Avrdue herrausfinden, einstellen usw...

Na trotzdem bin ich jetzt schon froh, dass ich doch auch schon etwas unter Linux programmieren kann.

Gruss und Dank
Gerhard

schorsch_76
18.09.2013, 17:58
Ich mag Geany, da man damit einfach eigene Commandos ins Menü einfügen kann. Bsp, Flashen ;)

Gruß
Georg

Chypsylon
18.09.2013, 19:12
Mit dem Burn-o-mat (http://avr8-burn-o-mat.aaabbb.de/) (auf deutsch) kannst du die Fuses über eine GUI programmieren bzw. den entsprechenden avrdude-befehl kopieren, ist vermutlich leichter als alles am Anfang direkt zu machen.

oderlachs
18.09.2013, 20:26
@Chysylon
Danke !

Werde mir das später anschauen installieren...

@Georg
Bestimmt kann ich Dich auch in Sachen Geany befragen ? ;) Heute kam mein 80x5x/AT89x5x Enwicklerboard aus Fernost an...Nun suche ich erst mal da nach ner Möglichkeit ein erstes Testprogramm drauf zu brennnen....muss sehen ob es geht.
Nicht ATmel bietet da was an Software an..oder nur uralt noch mit Lpt Port Verwendung.
Ich weiss ja nicht ob es einem ISP-Progger egal ist was als ISP Ziel drann hängt...jedenfalls noch keinen Erfolg...muss mal googlen.. :(

Gerhard

-schumi-
21.09.2013, 15:41
@Georg
Bestimmt kann ich Dich auch in Sachen Geany befragen ? ;) Heute kam mein 80x5x/AT89x5x Enwicklerboard aus Fernost an...Nun suche ich erst mal da nach ner Möglichkeit ein erstes Testprogramm drauf zu brennnen....muss sehen ob es geht.
Also um noch den Zusammenhang: Geany <-> Compiler <-> Makefile usw. zu verdeutlichen:

Du musst ja das Programm irgendwie auf den AVR bekommen. Dafür gibt es ein Programm namens "avrdude". Wenn du jetzt z.B. ein anderes Programmiergerät hast, muss avrdude mit anderen Parametern aufgerufen werden.

Du musst das Programm in Maschinensprache übersetzen, damit du es überhaupt übertragen kannst. Dafür gibt es den "gcc-avr" (die C-Bibliothek avr-libc gehört da auch dazu).

Mit diesen beiden Tools kannst du also Theoretisch schon AVRs programmieren: Du machst dir eine Datei namens "main.c" und schreibst da den Quellcode rein. Dann könntest du dir ein Terminal aufmachen (Strg + Alt + t), in deinen Projektordner wechseln (cd pfad/zum/ordner) und dort als erstes das Programm übersetzen, z.B.:

avr-gcc -g -Os -mmcu=<mcu type> -c file_name.c
dann linken

avr-gcc -g -mmcu=<mcu type> -o file_name.elf file_name.o
und dann noch ein hex-file daraus machen, damit man es flashen kann:

avr-objcopy -j .text -j .data -O ihex file_name.elf file_name.hex
Dann das hex-file noch Flashen:

avrdude -p <mcu_type> -P <port> -c <programming_device> -U flash:w:file_name.hex

Allerdings ist das alles sehr umständlich und macht keinen Spaß. Aus diesem Grund gibt es makefiles: man kann es aufrufen und ihm sagen, was es machen soll (z.B. "all", "flash", "program"), und das makefile führt dann die oben genannten Programme aus. Inzwischen gibt es viele verschiedene makefiles, und jedes funktioniert ein bisschen anders..

Wenn du jetzt so ein makefile in deinem Projektordner hast, brauchst du nur noch im Terminal in deinen Projektordner gehen (cd pfad/zum/ordner) und dort, je nach dem was du machen willst, folgende Befehle ausführen:



makefile im Ubuntuusers-Wiki:

makefile von Schorsch_76:



Übersetzen:

make all
make all


Programmieren:

make program
make flash


Aufräumen:

make clean
make clean


Das ist doch schon mal viel besser, als die vielen kryptischen Befehle oben :)

Damit das funktioniert, muss das Makefile allerdings noch richtig konfiguriert werden: Wenn man sich die Befehle oben ansieht, merkt man, dass man Informationen wie den verwendeten Controller, Programmiergerät usw. angeben muss. Diese Informationen braucht das Makefile natürlich auch, damit es die obigen Befehle ausführen kann. Und deshalb müssen diese Informationen in das Makefile eingetragen werden.
Im Falle des Makefiles von Schorsch ist das dieser Bereich:

AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P usb (http://www.rn-wissen.de/index.php/USB) -e -U flash:w:
AVRSIZE=avr (http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht)-size
MCU=atmega168p
F_CPU=16000000
Die roten Dinge musst du also anpassen. Bei dem Makefile im Ubuntuusers-Wiki ist das:


MCU = atmega16
F_OSC = 3686400
AVRDUDE_PROGRAMMER = stk500
AVRDUDE_PORT = usb

Die sind zwar leichter anzugeben, dafür etwas etwas verstreuter im Makefile verteilt (genaueres: http://wiki.ubuntuusers.de/avr#Einrichten-einer-Entwicklungsumgebung ).Wenn man jetzt z.B. "make all" ausführt, sieht das makefile nach, welcher Controller etc. eingetragen ist, und führt dann automatisch die oben hingeschrieben Befehle mit den passenden Einstellungen aus.


Ich hoffe das dir damit die Rolle des makefiles etwas klarer ist, und du gemerkt hast, dass diese beiden Sätze eigentlich nichts miteinander zu tun haben:

Bestimmt kann ich Dich auch in Sachen Geany befragen ? :wink: Heute kam mein 80x5x/AT89x5x Enwicklerboard aus Fernost an...
Denn das neue Board hat ja ein anderes Programmiergerät, je nach dem welchen du draufsteckst auch einen anderen Controller und auch eine andere Taktfrequenz. Das sind aber alles Dinge, die im Makefile (siehe rote Markierungen oben) einstellen kannst, und die mit Geany in keinem Zusammenhang stehen.


Die Rolle von Geany folgt jetzt:
Als erstes eignet sich Geany toll zum schreiben von C-Programmen, weil es Syntax-highlighting (Schlüsselwörter farbig darstellen) und noch viele weitere tolle Dinge beherrscht (Autovervollständigung, Suchen & Ersetzen, in mehreren Zeilen gleichzeitig schreiben etc.). Aber dieser Editor hat noch einen enormen Vorteil:

Bis jetzt wäre es ja so, dass du mit Geany deinen Quellcode schreibst (die Einstellungen im Makefile kannst du damit natürlich auch anpassen), aber um dein Programm auf den Controller zu bekommen musst du immer noch:

Terminal öffnen
mit "cd pfad/zum/ordner" in deinen Projektordner wechseln
mit "make all" das Programm in maschinensprache übersetzen
mit "make program" oder "make flash" (je nach verwendetem makefile) das Programm auf den Controller brennen

Das ist natürlich doof und umständlich, aber hier kommt Geany: Man kann nämlich einzelnen Buttons selbst Befehle zuordnen, die ausgeführt werden, wenn man den Button drückt. Also würe man sich idealerweise einen Button so belegen, dass er "make all" im Projektordner ausführt, und einen anderen, der "make program" bzw. "make flash" ausführt. Und diese Belegung kann man so einstellen: http://wiki.ubuntuusers.de/avr#Einrichten-einer-Entwicklungsumgebung
Jetzt brauchst du eben nur noch die Buttons anklicken, oder alternativ "F8" für "make all" und "F9" für "make program/flash" drücken. Is doch super, oder? :)


Noch eine Sache zum Schluss:
Unter Linux ist die Rechteverteilung sehr streng. Das ist sehr gut für die Sicherheit, und wohl der größte Grund, warum es bisher noch keine ernstzunehmende Schadsoftware gibt. Im Zuge dessen werden dir allerdings auch nicht die Rechte gegeben, um einfach so deine Programmiersoftware zu benutzen.

Das ist auch der Grund für folgende Zeile im Makefile von Schorsch:

AVRDUDE=sudo avrdude -p m168 -c avrispmkii -P usb (http://www.rn-wissen.de/index.php/USB) -e -U flash:w:
Warscheinlich ist dir sudo ja bekannt: Man kann damit Root-Rechte bekommen, und darf mit dem ganzen System alles anstellen. Das ist aus zweierlei Sicht schlecht

Man muss zum programmieren immer das Passwort eingeben
das avrdude darf dann alles erdenkliche mit deinem System anstellen. Würde jemand Schadsoftware ist avrdude hineinprogrammieren, könnte das Programm deinen Computer zerlegen (könnte auch durch einen Fehler in der Software passieren)

Es wäre also sinnvoller, dir selbst die Rechte zu geben, mit dem Programmiergerät zu arbeiten (wenn du das Programm aufrufst, darf es alles, was du darfst). Dazu musst du:

Einen Editor mit Root-Rechten öffnen: "gksudo gedit"
Eine Neue Datei machen
Dort folgenden Inhalt hineinkopieren:



# Atmel AVR ISP mkII
SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2104", GROUP="plugdev", MODE="0660"

# usbprog bootloader
ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c62", GROUP="plugdev", MODE="0660"

# USBasp programmer
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="plugdev", MODE="0660"

# USBtiny programmer
ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", GROUP="plugdev", MODE="0660"



Die Datei unter /etc/udev/rules.d/015_usbprog.rules speichern
Das Programmiergerät ab- und wieder anstecken, falls es angesteckt war



Ich hoffe dir sind die Zusammenhänge jetzt etwas klarer :)

Viele Grüße
-schumi-

PS: Könntest du noch verraten, welches Entwicklerboard du dir gegönnt hast? Dann könnte ich dir evtl. sagen, was die richtigen Einstellungen für das Makefile sind, und ob das mit den Linux-Rechten so klappt

oderlachs
21.09.2013, 19:16
Hallo Schumi !!

Ein wirklich vom herzen kommendes Dankeschön möchte ich Dir sagen, eine Suuperanleitung für mich, es ist doch schön wenn man hier gute Freunde findet die einem helfen. Das was hier zu meiner Anfrage geschrieben besser geantwortet wurde verdient meinen vollen Respeckt und Hochachtung für Schursch und Dich Schumi, Ihr habt Euch wirklich viel Mühe mit mir gemacht, Danke !
Dieses 8051 DeveloperBoard (http://www.ebay.de/itm/180967735298?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649) habe ich mir geleistet, leider hat der verkäufer keine weiteren Unterlagen.

Später etwas mehr , wenn ich besser "Duchblick" habe ;)

Gruss und Dank !!
Gerhard

-schumi-
22.09.2013, 13:14
Ein wirklich vom herzen kommendes Dankeschön
Biddeschön ;)

Von der Ebay-Seite:

AT-ISP (10pin)download interface

So wie es aussieht hat das Board also keine eigene Programmierschaltung, sondern nur einen Anschluss zum programmieren (ISP - InSystemProgramming). Dort musst du einen eigenen Programmieradapter anstecken, z.B. UsbAsp.
Makefile dafür wäre dann (angenommen du benutzt den ATMEGA8515):

Schorsch:

AVRDUDE=avrdude -p m8515 -c usbasp -P usb (http://www.rn-wissen.de/index.php/USB) -e -U flash:w:
AVRSIZE=avr (http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht)-size
MCU=atmega8515
F_CPU=1000000
(das "sudo" vor avrdude habe ich jetzt mal weggelassen, wenn die Rechte passend eingestellt sind braucht man das ja nicht mehr)

Ubuntuusers-Wiki:


MCU = atmega8515
F_OSC = 1000000
AVRDUDE_PROGRAMMER = usbasp
AVRDUDE_PORT = usb


Den Takt habe ich mit 1Mhz angenommmen, da neue AVRs das ja voreingestellt haben. Falls der Quarz schon aktiviert ist, eben 12Mhz eintragen.


Viele Grüße
Simon


<EDIT>
Wegen den Fuses:
Da kann man den AVR-8-Burn-O-Mat benutzen.

Java installieren. Im Terminal eingeben: "sudo apt-get install default-jre" (Kann sein dass es schon von Haus aus installiert ist, weis ich gerade nicht..)
Burn-o-mat hier herunterladen: http://avr8-burn-o-mat.aaabbb.de/AVR8_Burn-O-Mat_2_1_2.zip
Mit Dateimanager in den Downloads-Ordner gehen
Rechtsklick auf AVR8_Burn...zip und "hier Entpacken" (oder wie auch immer das bei dir dann heißt) wählen
In den entpackten AVR8_Burn-O-Mat Ordner wechseln
Leider hat der Autor bei der Datei "start.sh" etwas vergessen: Das Programm lässt sich nur starten, wenn man sich im Augenblick auch im richtigen Ordner befindet. Das macht der Dateimanager aber nicht unbedingt, deswegen musst du in der Datei "start.sh" noch eine Zeile einfügen (Einfach rechtsklick drauf und öffnen mit Gedit oder Geany oder ...):
#!/bin/bash
cd "$( dirname "${BASH_SOURCE[0]}" )"
java -jar AVR8_Burn_O_Mat.jar
Die Zeile in der Mitte eintragen, speichern und wieder schließen
Jetzt musst der Burn-O-Mat gestartet werden. Allerdings muss man erst erlauben, die Datei als Programm auszuführen (auch Sicherheitsfeature: z.B. kann man Schadsoftware die via EMail versendet wird nicht einfach mit draufklicken starten): Rechtsklick auf die Datei "start.sh" -> Eigenschaften. Dort musst du dann beim dritten Reiter die Ausführung als Programm erlauben. Hier gibts ein Bild davon: http://3.bp.blogspot.com/-vyc_rUSU6ac/UdratpZDCiI/AAAAAAAAC10/krSRAiRw4Jo/s1600/0028.png Falls das nicht klappt, kannst du auch ein Terminal öffnen und dort hineinkopieren: "chmod +x ~/Downloads/AVR8_Burn-O-Mat/start.sh"
Jetzt solltest du das Programm mit einem Doppelklick auf "start.sh" starten können. Falls das nicht geht, kannst du auch ein Terminal öffnen und dort hineinkopieren: "~/Downloads/AVR8_Burn-O-Mat/start.sh"
So, jetzt läuft das Programm, und man muss noch die passenden Einstellungen treffen. Im Menu vom Programm auf "Settings" und dort "AVRDUDE" auswählen. Bei "AVRDUDE location" folgendes eintragen: "/usr/bin/avrdude". Bei "alternative AVRDUDE configuration file" folgendes eintragen: "/etc/avrdude.conf". Dann "Ok" klicken und das Programm schließen. Dann das Programm mit klicken auf "start.sh" wieder starten (erst dann werden die Werte die du eingetragen hast übernommen) und wieder nach "Settings" -> "AVRDUDE" gehen.
Jetzt musst du noch deinen Programmer auswählen: in dem Kasten unter den beiden Pfaden die du vorher eingetragen hast, gibt es ein Auswahlmenü für "Programmer", dort den richtigen auswählen (z.B. "usbasp"). Dann musst du eins drunter bei "Port" noch auswählen, wie dein Programmer angeschlossen ist. Im Fall von USBasp ist "usb" der richtige Eintrag. Dann mit "OK" bestätigen
Jetzt kannst du bei "AVR type" z.B. den "ATmega8515" auswählen und dann auf "Fuses" klicken
Was du immer zuerst unbedingt machen solltest, ist auf "read fuses" zu klicken!!! (Damit werden in dem Konfigurations-Fenster das gerade offen ist die aktuellen Einstellungen übernommen)
Jetzt kannst du entweder mithilfe der Häckchen die Fuses setzen (Wenn du ein Rot-Markiertes Häckchen setzen willst, musst du erst bei "Mode: normal" auf "Mode: expert" umstellen). Oder du schaust dir noch die anderen Reiter an. Ich finde z.B. den "Oscillator/Clock Options"-Reiter sehr toll. Dort wählt man einfach die Taktquelle und Frequenz die man haben möchte
Wenn du deine Einstellungen gemacht hast, klickst du auf "write fuses"
Am besten klickt man direkt danach noch mal auf "read fuses", um sicher zu gehen, dass man immer noch mit dem AVR kommunizieren kann. (und nicht z.B. den Takt auf "external RC-Oscillator" gestellt hat, obwohl man garkeinen angeschlossen hat, und sich der AVR mangels Taktversorgung somit nicht mehr programmieren lässt)

Wie du sehen kannst, ist es also leider nicht ganz einfach das Programm zum laufen zu bekommen, aber es lohnt sich doch :)

oderlachs
22.09.2013, 14:13
Hallo Simon !
Da hast Du was falsch aufgefasst, oder ich habe es falsch verstanden. Dieses Board(Ebay) ist nur für AT89S51 oder 80C51 Chips...Otto-Normal-Atmegas/Tinys brenne ich auf einem STK500, oder auf den entsprechenden Protoboards per ISP usw.. etc.

Dieses 80x50-Board(Ebay) hatte ich nur zwischenzeitlich erwähnt weil ich feststellen musste ob intakt....und mich mit der Linux/makefile-sache momentan nicht weiterbefassen konnte.

Gruss Gerhard

Chypsylon
22.09.2013, 19:42
Es gibt übrigens auch ein .deb Paket vom Butn-o-mat, damit lässt sich des ganze einfacher installieren...

oderlachs
23.09.2013, 18:10
Wäre zu schön um WAHR zu sein, jeder Versuch schlägt fehl, mit Fehlermeldung, dass im Paket irgendwas nicht stimmt. Habe dann JRE neu installieren wollen, nach der Anleitung auf der Oracele Website:

Fazit: JRE ist installiert , wohl aber alle mit Java verbundenen Anwendungen "Arduino" , "Eclipse" , etc. sind dahin....:mad: :confused:

Chypsylon
23.09.2013, 18:56
Welches Linux verwendest du den genau und was ist die Fehlermeldung?

oderlachs
23.09.2013, 20:29
Hallo Chypsylon !
ich verwende Ubuntu 12.04 LTS. Die Fehlermeldung habe ich leider nicht zur Hand dann muss ich erst windoof beenden und Linux starten( gleicher PC). Ich werde mal morgen die Meldung hier veröffendlichen. ich war nur so schockiert das mir mit der Anleitung das JRE zu installieren min. 2 Programme vom PC verschwanden. Habe noch nicht alles überprüft, aber schon wieder neu installiert : Arduino und Eclipse.
Die Meldung drehte sich um irgendeinen Script in dem Paket von Burn-O-Mat.deb, habe die Meldung aber unter Linux gespeichern, ach hier ist sie(war im Webspeicher synchr.)
dpkg: error processing /home/gerhard/Downloads/avr8-burn-o-mat-2.1.2-all.deb (--install):
parsing file '/var/lib/dpkg/tmp.ci/control' near line 2 package 'avr8-burn-o-mat':
error in Version string 'REPLACE_PROG_VERSION': version number does not start with digit


Ich bin noch nicht wieder so firm unter Linux..ist ne weile her und einiges vergessen habe...

Gruss Gerhard

Chypsylon
23.09.2013, 21:40
Falls Java nicht funktionieren sollte ist hier (http://translate.google.at/translate?sl=en&tl=de&js=n&prev=_t&hl=de&ie=UTF-8&u=http%3A%2F%2Fwww.webupd8.org%2F2012%2F01%2Finsta ll-oracle-java-jdk-7-in-ubuntu-via.html&act=url) eine gute Anleitung mit der ich Java immer installiert habe. Die Eclipse Version in den offiziellen Ubuntu-Quellen ist so weit ich weiß relativ veraltet. Du kannst die neueste Version (4.3) von der hier (http://www.eclipse.org/downloads/?osType=linux&release=undefined) herunterladen. Wenn ich mich recht erinnere musst du nichts installieren sondern einfach nur das Archiv entpacken und kannst es direkt starten.

-schumi-
23.09.2013, 23:42
Es gibt übrigens auch ein .deb Paket vom Butn-o-mat, damit lässt sich des ganze einfacher installieren...

Wie Gerhard ja schon feststellen musste ist das Paket verbuggt. Es gibt zwar einen Fix irgendwo im ubuntuusers-forum, aber da ist es einfacher die .zip zu benutzen... (Hätte ich vielleicht auch oben schon hinschreiben sollen #-o)



Ich bin noch nicht wieder so firm unter Linux..ist ne weile her und einiges vergessen habe...

Dein Ansatz das Paket zu installieren war schon richtig. Nur ist das Paket kaputt. (Der Fehler hat auch mit Java nichts zu tun)


Falls das mit der Orace-Java-Installation nicht funktioniert hat, kann ich dir das openjdk-java empfehlen. Installieren (wie vorher bei Burn-O-Mat schon geschrieben) mit:


sudo apt-get install default-jre


Bzw. du kannst dir auch die Version aussuchen, indem du einen der folgenden beiden Befehle benutzt:


sudo apt-get install openjdk-7-jre
sudo apt-get install openjdk-6-jre


Viele Grüße
Simon

PS: Das mit deinem Evalboard hab ich noch nicht so ganz geblickt... Kenne mich eben nur bei Tiny/Mega AVRs aus ;-)

oderlachs
24.09.2013, 12:07
Hallo Simon !

Also Java und JRE sinst installiert..alles ok.
Das mit dem Eval-Board hat eigendlich nichts damit zu tun...ich hatte nur eingeflochten in einem meiner Postings zu diesem Thema, das ich meine zeit erst mal für dieses Eval. Board brauche und mich dann erst weiter mit dem Thema Linux-AVR befassen kann. Irgendwie ist das dann falsch aufgefasst worden oder ich hatte mich zu dumm ausgedrückt...
ich habe auch noch arge probleme mit der Oberfläche von Ubuntu 12...komme nicht damit zurecht....wollte eigendlich auch Fedora installieren, aber das kommt mit meinen PC nicht aus dem Knick..

Gruss und Dank

Gerhard