Forum: Mikrocontroller und Digitale Elektronik Direkte Programmierung des Arduino Micro


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marco W. (gubelat)


Bewertung
0 lesenswert
nicht lesenswert
Als 16 Jähriger Blag habe ich auf einem C64 einen Auerswald DLC 4830
inklusive allen Bitmustern aus dem ROM des DLC so gut es ging in 
Assembler
nachgebaut. Die Ansteuerung lief damals über den Userport der über 
Transistoren Solid State Relais ansteuerte.

Heute bin ich 42 und dachte es ist Zeit sich endlich mal mit µC zu 
befassen.
Naiv wie ich bin dachte ich besogst du dir ein Arduino Mikro Board.
Nach der Instalation und dem ersten Wechselblinken von LEDs vermisse ich 
aber doch das direkte programmieren der Hardware.

Nehmen wir an ich habe IO Ports 0-7 als Ausgang definiert und möchte
nun meine Bitmuster aus dem RAM/ROM oder Flashspeicher auslesen und 
direkt in die IO Register der Ports schreiben.

Am C64 habe ich das so relativ simpel lösen können..

LDA $#4000 ; Lädt Akkumulator mit Wert aus RAM Adresse 4000 Hex
STA $#DD00 ; Schreibt Akkumulator in D0-D7 des Userports....

Wie bekomme ich nun dieses C Derivat dazu einen Wert aus dem 
RAM/ROM/Flaschspeicher auszulesen und direkt in die Datenregister zu 
Schreiben.

Kann jemand das vielleicht mittels Beispiel erklären.

von Zweifler (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Patrick J. (ho-bit-hun-ter)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Wenn Du zuvor schon in Assembler programmiert hast - gibt's hier auch.
Was wo im µC zu finden ist, gibt's im Datenblatt.

C64 - das waren Zeiten (größten Respekt den Leuten, Die Den 
programmieren konnten!!)

... bei mir reichte es nur zum voll-poken des Bildschirm-Speicher - und 
wenn man die Grenzen überschritt, bootete die Kiste einfach neu oder 
fror ein.

Auf dem PC dann unter DOS mit 'debug'
... aber mit ähnlichem 'Erfolg' :)

MfG

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Was spricht gegen klassische AVR Programmierung in C:
1
const uint8_t dataArray[] = {1,2,3,4};
2
3
DDRA = 0xFF; //alle Pins auf Ausgang
4
PORTA = dataArray[0];

Müsste eigentlich auch unter dem C++ des Arduino tun.
Ansonsten gibt es dafür reichlich Literatur.

von Marco W. (gubelat)


Bewertung
1 lesenswert
nicht lesenswert
Nichts spricht gegen die Verwendung von C, bis auf die Tatsache das ich 
dann wohl einen C Kurs machen muß. 6502 Assembler hatte ich damals ganz 
gut im Griff. Und bei C müste ich von vorne anfangen....

Egal. Der Weg ist das Ziel. Aber ich werde euch bestimmt noch mit 
einigen Fragen nerven müssen :-)

LG Marco

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Marco W. schrieb:
> Nichts spricht gegen die Verwendung von C, bis auf die Tatsache das ich
> dann wohl einen C Kurs machen muß. 6502 Assembler hatte ich damals ganz
> gut im Griff. Und bei C müste ich von vorne anfangen....

Dann mach doch ATmega328 Assembler. Was spricht dagegen?
http://www.atmel.com/webdoc/avrassembler/

von Manfred (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Marco W. schrieb:
> 6502 Assembler hatte ich damals ganz
> gut im Griff. Und bei C müste ich von vorne anfangen....
6502 hatte ich auf eigener Hardware als Europakarte, Makroassembler und 
sogar einen Hardware-Emulator dazu ... lange ist's her.

Nach vielen Jahren ohne Prozessor habe ich mir Arduino angetan. Die 
C-Syntax und Semikolon / Klammern kosten einige Nerven, im Endeffekt 
komme ich bei kleinen Dingen aber dennoch schneller ans Ziel als früher.

von Helmut H. (helmuth)


Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Dann mach doch ATmega328 Assembler.

NB: Mit avrdude können die hex files dann über die USB Schnittstelle und 
den bootloader auf den Arduino geladen werden. Unter win könnte man z.B. 
eine cmd erstellen
avrdude -v -patmega328p -carduino -P\\.\COM6 -b57600 -D -V 
-Uflash:w:C:\pfad\datei.hex:i

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Der Micro hat doch sicher keinen ATMeg328P drauf, sondern einen 
ATMega32U4

Aber das tut der Sache keinen Abbruch.
C, C++ und Assembler ist leicht möglich mit dem Atmel Studio

Die Arduino IDE möchte C++, kann aber auch, wenn man es geschickt 
anstellt, C und Assembler Dateien kompilieren.
Direkte Register- und Portzugriffe, keine Problem.

Marco W. schrieb:
> Am C64 habe ich das so relativ simpel lösen können..
>
> LDA $#4000 ; Lädt Akkumulator mit Wert aus RAM Adresse 4000 Hex
> STA $#DD00 ; Schreibt Akkumulator in D0-D7 des Userports....
>
> Wie bekomme ich nun dieses C Derivat dazu einen Wert aus dem
> RAM/ROM/Flaschspeicher auszulesen und direkt in die Datenregister zu
> Schreiben.

Arduino:
1
void setzePortdAufOutput()
2
{
3
  const byte data = 0xff; // diese Daten landen im Flash(ROM). 
4
  DDRD = data;    // Register direkt beschreiben, pinMode() vermeiden
5
}

: Bearbeitet durch User
von Markus (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du könntest auch eine BluePill ( STM32F103 ) zusammen mit der 
Arduino-Umgebung nutzen und dann auf die Register Bare Metal zugreifen.

Das sieht dann so aus
1
// STM32F103 IO register
2
#define GPIOPort_B_ADDRESS 0x40010C00
3
#define GPIOPort_C_ADDRESS 0x40011000
4
#define BSRR_REGISTER_OFFSET 0x10 // port bit set/reset register
5
#define BRR_REGISTER_OFFSET 0x14 // port bit reset register
6
7
void blink()
8
{
9
  *(volatile uint16_t *) (GPIOPort_C_ADDRESS + BSRR_REGISTER_OFFSET) = 1 << 13; // LEDON: write direct into GPIO memory
10
11
  delay(1000);
12
13
  *(volatile uint16_t *) (GPIOPort_C_ADDRESS + BRR_REGISTER_OFFSET)  = 1 << 13; // LEDOFF
14
15
  delay(1000);
16
}

von Cyblord -. (cyblord)


Bewertung
0 lesenswert
nicht lesenswert
Marco W. schrieb:
> Naiv wie ich bin dachte ich besogst du dir ein Arduino Mikro Board.
> Nach der Instalation und dem ersten Wechselblinken von LEDs vermisse ich
> aber doch das direkte programmieren der Hardware.

Also da versteht man die Welt nicht mehr. Du möchtest hardwarenah 
programmieren, aber bügelst dir erst mal das ganze Arduino Zeug drauf 
und dann wird rumgeheult? AVRs bieten jede Möglichkeit in Assembler oder 
in C direkt programmiert zu werden. Ganz wie es beliebt.

von NuMal Halblang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Cyblord -. schrieb:
> Also da versteht man die Welt nicht mehr.

Er muss ja erst mal Orientierung finden. Das wirst du ihm
schon zugestehen können  dürfen  müssen.

Nur mal so als Beispiel:
Er spricht von einem "C Derivat", das wäre ein spezieller Dialekt
von C, er meint aber wohl die IDE oder den Prozessor.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.