Forum: Mikrocontroller und Digitale Elektronik AVR-Assembler programmieren mit Raspberry Pi 3


von Christoph (Gast)


Lesenswert?

Hallo zusammen,

ich möchte meine AVR Mikrocontroller in Assembler programmieren. Das 
ganze aber über ein Raspberry Pi 3. Kann mir da jemand weiterhelfen?

1. Variante: Ich installiere Windows 10 IoT Core - also ein abgespecktes 
Windows 10 - auf dem Pi. Anschließend installiere ich Atmel Studio und 
richte mir einen virtuellen USB COM Port ein, um mittels Programmer die 
.hex-files in den Atmega zu laden. Ich bin allerdings nicht sicher, ob 
ich Atmel Studio auf dem Pi zum Laufen bringe...

2. Variante: Ich installiere eine Linux Distribution, erstelle meinen 
Assembler Code als Text-Datei und kompeliere ihn zu einem Hex-File, dass 
ich dann über einen virtuellen COM Port mittels Programmer in den Atmega 
übertrage. Gibt es hierfür Compiler? Ich habe bisher nur mit Atmel 
Studio gearbeitet und das generiert mir ja automatisch das .hex-File.

Was haltet Ihr von den Ansätzen? Ist das überhaupt möglich?

Viele Grüße
Christoph

von Tante Gugel (Gast)


Lesenswert?


von Yalu X. (yalu) (Moderator)


Lesenswert?

Ob das Atmel-Studio auf einem abgespeckten Windows 10 läuft, kann ich
nicht sagen.

Für die Linux-Distributionen Raspbian und Arch (wahrscheinlich auch für
andere) gibt es die fertigen Pakete avr-binutils und avrdude. Damit
kannst du in Assembler programmieren und die Programme auf einen AVR
überspielen. Falls du auch in C programmieren möchtest, gibt es
zusätzlich avr-gcc und avr-libc.

: Bearbeitet durch Moderator
von Bitwurschtler (Gast)


Lesenswert?

Schau mal im Wiki nach Raspberry Pi als Universalprogrammer, dort 
ist beschrieben wie man über die GPIO's AVR's programmiert. Gcc-aver 
solltes es auch für den RasPi geben.

von Christopher J. (christopher_j23)


Lesenswert?

Christoph schrieb:
> Was haltet Ihr von den Ansätzen? Ist das überhaupt möglich?

Ansatz 1 kann und wird aus verschiedenen Gründen niemals funktionieren.

Ansatz 2 geht relativ problemlos. Wie schon erwähnt brauchst du avrdude 
und gcc-avr. Make ist bei allen Linux Distributionen bereits dabei. Als 
Editor würde ich es mit Geany versuchen. Dafür gibt es auch ein Plugin 
für das Syntax-Highlighting von AVR-Assembler:
http://triggetry.blogspot.de/2013/03/linux-add-avr-assembly-s-syntax.html

Wenn du Raspbian installiert hast kannst du mit
1
sudo apt-get install avrdude gcc-avr geany

deine "IDE" aufsetzen.

Dort kannst du dann dein Projekt ganz einfach über ein Makefile bauen 
lassen. Anleitungen dazu gibts hier auf Mikrocontroller.net, z.B. 
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Exkurs_Makefiles 
.
Die Abwicklung über Makefiles hat zudem den Vorteil, dass es nicht nur 
in irgendeiner XYZ-Studio IDE läuft sondern wirklich in jedem Texteditor 
der den Aufruf eines externen Programms (in dem Fall "make") erlaubt und 
das sind sehr viele.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Yalu X. schrieb:
> Ob das Atmel-Studio auf einem abgespeckten Windows 10 läuft, kann ich
> nicht sagen.

Wird es mit sehr großer Wahrscheinlichkeit nicht - das Atmel-Studio 
ist kein Arm-Binary, sondern setzt ein auf x86/x64 laufendes Windows 
voraus.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Rufus Τ. F. schrieb:
> Yalu X. schrieb:
>> Ob das Atmel-Studio auf einem abgespeckten Windows 10 läuft, kann ich
>> nicht sagen.
>
> Wird es mit sehr großer Wahrscheinlichkeit nicht - das Atmel-Studio
> ist kein Arm-Binary, sondern setzt ein auf x86/x64 laufendes Windows
> voraus.

Wo du recht hast, hast du recht. Auf den Gedanken bin ich nicht
gekommen ;-)

von Christoph (Gast)


Lesenswert?

Vielen Dank soweit. Morgen starte ich mit dem Projekt und schaue mal wie 
weit ich komme.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Mit Tricks bekommt man Windows-Programme auf dem Raspberry zum Laufen, 
aber ziemlich langsam:
https://github.com/AlbrechtL/RPi-QEMU-x86-wine
Das angebotene SD-Card-Image ist allerdings schon etwas älter.
Und ob das Atmel Studio unter Wine läuft weiss ich nicht.

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?


von Christoph (Gast)


Lesenswert?

Hallo zusammen.

Der aktuelle Stand sieht so aus:

+ Raspberry Pi 3 läuft
+ Raspbian installiert
+ AVR Dude  installiert
+ AVRA installiert
+ gcc-avr installiert
+ geany war bereits installiert

Ich haben nun ein erstes Assembler programm mit Geany geschrieben:
1
.include "m32def.inc"
2
  ldi r16, 0xFF
3
  out DDRA, r16
4
  ldi r16, 0b01010101
5
  out PORTA, r16
6
  ende: rjmp ende

Ich habe die Datei als "helloworld01.asm" abgespeichert.

Mit "avra helloworld01.asm" wollte ich assembilieren und erhalte die 
Fehlermeldung das die m32def.inc nicht gefunden wird.

Ich habe die Datei dann ins gleiche Verzeichnis kopiert. Jetzt wird sie 
gefunden. Ich erhalte aber folgende Fehlermeldung:


pi@raspberrypi:~/avr $ avra helloworld01.asm
AVRA: advanced AVR macro assembler Version 1.3.0 Build 1 (8 May 2010)
Copyright (C) 1998-2010. Check out README file for more info
   AVRA is an open source assembler for Atmel AVR microcontroller family
   It can be used as a replacement of 'AVRASM32.EXE' the original 
assembler
   shipped with AVR Studio. We do not guarantee full compatibility for 
avra.
   AVRA comes with NO WARRANTY, to the extent permitted by law.
   You may redistribute copies of avra under the terms
   of the GNU General Public License.
   For more information about these matters, see the files named 
COPYING.
Pass 1...
m32def.inc(44) : PRAGMA directives currently ignored
m32def.inc(48) : PRAGMA directives currently ignored
m32def.inc(53) : PRAGMA directives currently ignored
m32def.inc(416) : Error   : Line to long
m32def.inc: Success

Kann mir jemand weiterhelfen? Mein Ziel ist eine .hex zu generieren.

Vielen Dank und Grüße, Christoph

von spess53 (Gast)


Lesenswert?

Hi

>   AVRA is an open source assembler for Atmel AVR microcontroller family
>   It can be used as a replacement of 'AVRASM32.EXE' the original
>   assembler

Deine Fehlermeldungen

>m32def.inc(44) : PRAGMA directives currently ignored
>m32def.inc(48) : PRAGMA directives currently ignored
>m32def.inc(53) : PRAGMA directives currently ignore

gehören aber zu einer .inc-Datei für den Assembler2 (avrasm2.exe) und 
nicht zum 'AVRASM32.EXE'. Der kennt keine PRAGMA Preprozessor 
Directiven.

>AVRA: advanced AVR macro assembler Version 1.3.0 Build 1 (8 May 2010)

Das ist auch nicht unbedingt die frischeste Version. Oder wurde mit AVRA 
2010 aufgehört?

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Das ist auch nicht unbedingt die frischeste Version. Oder wurde mit AVRA
>2010 aufgehört?

Gerade mal nachgesehen: Das ist wirklich die letzte AVRA-Version. Dann 
must du die .inc-Files z.B. vom 4er Studio, Ordner AVRASSEMBLER/APPNOTES 
verwenden. Da ist die Auswahl an AVRs aber sehr übersichtlich.

MfG Spess

von Yalu X. (yalu) (Moderator)


Lesenswert?

Christoph schrieb:
> m32def.inc(44) : PRAGMA directives currently ignored
> m32def.inc(48) : PRAGMA directives currently ignored
> m32def.inc(53) : PRAGMA directives currently ignored

Die Pragma-Warnungen kannst du wahrscheinlich ignorieren.

> m32def.inc(416) : Error   : Line to long

Diese Meldung kommt, wenn eine Zeile länger als 256 Zeichen ist. In
m32def.inc von hier

  https://raw.githubusercontent.com/DarkSector/AVR/master/asm/include/m32def.inc

ist die Zeile 416 nicht zu lang, und ich kann darin auch sonst nichts
Auffälliges erkennen:
1
.equ  ADIF  = 4  ; ADC Interrupt Flag

Schau mal nach, ob dein m32def.def vielleicht verkrüppelt ist.

Bei mir erzeugt Avra 1.3.0 zusammen mit dem verlinkten m32def.inc aus
dem folgenden Testprogramm nach der Ausgabe von 7 Pragma-Warnungen eine
korrekte Hex-Datei.

Source:
1
.include "m32def.inc"
2
3
  ldi r16,0xff
4
  out DDRA,r16
5
  clr r16
6
loop:
7
  out PORTA,r16
8
  inc r16
9
  rjmp loop

List:
1
...
2
C:000000 ef0f        ldi r16,0xff
3
C:000001 bb0a        out DDRA,r16
4
C:000002 2700        clr r16
5
          loop:
6
C:000003 bb0b        out PORTA,r16
7
C:000004 9503        inc r16
8
C:000005 cffd        rjmp loop
9
10
11
Segment usage:
12
   Code      :         6 words (12 bytes)
13
   Data      :         0 bytes
14
   EEPROM    :         0 bytes
15
16
Assembly completed with no errors.

Hex:
1
:020000020000FC
2
:0C0000000FEF0ABB00270BBB0395FDCFE0
3
:00000001FF


> m32def.inc: Success

Das wird bei mir nur dann angezeigt, wenn ich absichtlich eine zu lange
Codezeile einbaue :)

von Draco (Gast)


Lesenswert?

Christoph schrieb:
> 1. Variante: Ich installiere Windows 10 IoT Core - also ein abgespecktes
> Windows 10 - auf dem Pi. Anschließend installiere ich Atmel Studio und
> richte mir einen virtuellen USB COM Port ein, um mittels Programmer die
> .hex-files in den Atmega zu laden. Ich bin allerdings nicht sicher, ob
> ich Atmel Studio auf dem Pi zum Laufen bringe...

Du darfst Windows 10 IoT nicht mit einem normalen Windows vergleichen, 
da gibt es nichtmal eine Benutzeroberfläche. Das kannst du nur Remote 
bedienen.

von Peter D. (peda)


Lesenswert?

Was mich umtreibt, wozu will man sowas überhaupt machen?
Ich sehe da keine Vorteile an ner losen Platine, wo ich erst Netzteil, 
HDD, LCD, KBD, Mouse ranpappen muß und dann aufpassen, daß mir der 
Drahtverhau nicht vom Tisch fällt.

Wenn ich programmiere, dann setze ich mich bequem an meinen 2-Schirm PC.
Beim Programmieren kann mir die Bildfläche nicht groß genug sein. Neben 
der IDE möchte man oft noch ein paar PDFs (Datenblätter) sehen oder 
googlen.
Bzw. ich hab dann oft noch den Schaltplan im Altium offen, damit man 
sehen kann, wo man Signale antasten muß, falls das Programm nicht das 
Gewünschte auf Anhieb macht.

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.