- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 38

Thema: Linux-AVR Programmierung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    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:
    Code:
    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-En...DIAMEX+ALL+AVR
    Code:
    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
    Code:
    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
    Code:
    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

    [Auschweifmodus]
    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
    [/Auschweifmodus]

    Gruß
    Georg

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

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    75
    Beiträge
    1.175
    Blog-Einträge
    1
    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)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    75
    Beiträge
    1.175
    Blog-Einträge
    1
    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..
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Heute abend hab ich wieder Linux unter der Tastatur, da kann ich dir dann nochmal helfen

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    75
    Beiträge
    1.175
    Blog-Einträge
    1
    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)
    Geändert von oderlachs (18.09.2013 um 13:25 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Dann bringst du ja dein hex File in den AVR ein. Sehr gut

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

    Code:
    # 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
    Geändert von schorsch_76 (18.09.2013 um 14:30 Uhr)

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    75
    Beiträge
    1.175
    Blog-Einträge
    1
    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
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Ich mag Geany, da man damit einfach eigene Commandos ins Menü einfügen kann. Bsp, Flashen

    Gruß
    Georg

Ähnliche Themen

  1. Welches Linux für AVR , Asuro.....Linux überhaupt?
    Von oderlachs im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 10
    Letzter Beitrag: 09.01.2012, 12:23
  2. AVR STK600 + Kubuntu Linux + AVR Dude
    Von Nitromechanik im Forum AVR Hardwarethemen
    Antworten: 11
    Letzter Beitrag: 25.11.2010, 09:06
  3. AVR-Programmierung mit ISP Dongle unter AVR Studio 4
    Von Earnie im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 23.09.2008, 18:57
  4. [solved] AVR Programmierung utner Linux
    Von epic im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 29.06.2008, 21:29
  5. ATMega32 programmierung unter Linux
    Von stormracer im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 13.11.2006, 14:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test