Erster Blinkversuch ATmega328

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erster Blinkversuch ATmega328

Beitrag von Mathias »

Doch, das sollte unter Projekteinstellungen stehen:

Das man so wie hinten etwas verstellen muss hätte ich nicht gedacht.
Die Einstellung -Wp<x> wird erst ersichtlich, wen die Plattfomreinstellungen auf auf Embedded/avr/AVR5 stelle.

Bei Compiler-Kommando habe ich noch folgendes eingefügt.

Code: Alles auswählen

/home/tux/Programme/arduino-1.8.5/hardware/tools/avr/bin/avrdude -C/home/tux/Programme/arduino-1.8.5/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b57600 -D -Uflash:w:Project1.hex:i

Somit wird nach dem kompilieren noch geflasht. :wink:

Ein Manko hat es immer noch, nach dem flashen kommt noch "Datei nicht gefunden" - "Programmdatei "/n4800/Atmega328_test/Project1" nicht gefunden."
[Ctrl + Shift + F9] , dann kommt die Fehlermeldung nicht.

Immerhin ein grosser Schritt.

Was ich mich noch Frage, wieso muss man den Atmega mit -WpAtmgaxxx einstellen und nicht über uses Atmegaxxx ?

Im Anhang noch das Blink-Project für den Arduino Nano.

@Timm Thaler
Du hast mich jetzt einen grossen Schritt weiter gebracht. Danke. :wink:
Dateianhänge
Bildschirmfoto vom 2017-10-11 20-11-11.png
Atmega328_test.tar.gz
(4.56 KiB) 65-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Erster Blinkversuch ATmega328

Beitrag von kupferstecher »

Mathias hat geschrieben:Das man so wie hinten etwas verstellen muss hätte ich nicht gedacht.
Die Einstellung -Wp<x> wird erst ersichtlich, wen die Plattfomreinstellungen auf auf Embedded/avr/AVR5 stelle.

Das ist ja die Idee vom ProjektWizard, dass man diese Einstellung nicht suchen muss. Die controllerspezifisch vorhandenen Interrupts werden auch in der Datei uInterrupts zusammengestellt.

Was ich mich noch Frage, wieso muss man den Atmega mit -WpAtmgaxxx einstellen und nicht über uses Atmegaxxx ?

Der Compiler braucht Informationen über den Controller, wie Speichergrößen. Deshalb ist der Parameter zwingend. Die Datei mit den Registerdefinitionen wird dann automatisch mit eingebunden. So ist zumindest mein Verständnis.

Bei Compiler-Kommando habe ich noch folgendes eingefügt.
[...]
Ein Manko hat es immer noch, nach dem flashen kommt noch "Datei nicht gefunden" - "Programmdatei "/n4800/Atmega328_test/Project1" nicht gefunden."
[Ctrl + Shift + F9] , dann kommt die Fehlermeldung nicht.

In den Einstellungen in dem von mir zuvor angehängten Beispielprojekt wurde mit Strg+F9 kompiliert und mit Shift+F9 kompiliert und hochgeladen. Meines Erachtens beides gute Kombinationen, im Embeddedbereich möchte man ja nicht bei jedem Kompilierversuch gleich hochladen. Drückt man aus Gewohnheit F9 dann passiert gar nichts.

Einstellungen:
Projekteinstellungen/Verschiedes/"Projekt ist lauffähig" [ ]
Compilereinstellungen/Compiler-Kommandos/Compiler: Kompilieren [x] Neu kompilieren [x]
Compilereinstellungen/Compiler-Kommandos/Nachher ausführen: Kompilieren [ ] Neu kompilieren [x]

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Erster Blinkversuch ATmega328

Beitrag von Timm Thaler »

Mathias hat geschrieben:Das man so wie hinten etwas verstellen muss hätte ich nicht gedacht....


Ich hab mein Projekt mit dem oben erwähnten LazWizard erstellt, da war das schon so eingetragen.

Zum Brennen kann ich nix sagen, ich brenne extra mit dem AVR8 Burn-O-Mat. Da kann man auch die Fuses bequem setzen. Und ich will nicht nach jedem Kompilieren auch brennen.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erster Blinkversuch ATmega328

Beitrag von Mathias »

Ich hab mein Projekt mit dem oben erwähnten LazWizard erstellt, da war das schon so eingetragen.

Dies wollte ich auch, aber es kam so ein Link-Fehler.

Der Compiler braucht Informationen über den Controller, wie Speichergrößen. Deshalb ist der Parameter zwingend. Die Datei mit den Registerdefinitionen wird dann automatisch mit eingebunden. So ist zumindest mein Verständnis.

Das muss ich zugeben, bei Sloeber ist dies sehr komfortabel gelöst, siehe Anhang. Vielleicht, wird dies in ferner Zukunft bei Lazarus auch sein. :wink:
Dateianhänge
Bildschirmfoto vom 2017-10-11 22-33-58.png
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Erster Blinkversuch ATmega328

Beitrag von Socke »

kupferstecher hat geschrieben:
Was ich mich noch Frage, wieso muss man den Atmega mit -WpAtmgaxxx einstellen und nicht über uses Atmegaxxx ?

Der Compiler braucht Informationen über den Controller, wie Speichergrößen. Deshalb ist der Parameter zwingend. Die Datei mit den Registerdefinitionen wird dann automatisch mit eingebunden. So ist zumindest mein Verständnis.

Im Compiler sind für ARM diese Adressen hinterlegt (bei AVR wird es ähnlich sein, auch wenn hier eine Harvard-Architektur vorliegt):
  • Wo beginnt der Flash-Speicher und wie groß ist er?
  • Wo beginnt der RAM und wie groß ist er?
Der Compiler warnt dann automatisch, wenn das Programm zu groß wird oder zu viel Speicher (statisch in Variablen/Konstanten) benötigt wird.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erster Blinkversuch ATmega328

Beitrag von Mathias »

Im Compiler sind für ARM diese Adressen hinterlegt (bei AVR wird es ähnlich sein, auch wenn hier eine Harvard-Architektur vorliegt):

Was bei den AVR sehr speziell ist, sie haben kein OS und somit auch keine Treiber, somit muss jedes Programm auf die Hardware angepasst werden.

Bei ARM weis ich nicht genau wie das ist. Android, NAS oder auch der Raspi habe alle ein OS.
Aber es gibt auch den Arduino-Due, welcher ein ARM besitzt, und dieser hat kein OS.

Das Blink-Programm habe ich noch ein wenig angepasst.

Code: Alles auswählen

program Project1;
const
  BP5 = 5; // Pin 13 des Arduino
  sl = 100025;
 
  procedure mysleep(t: int32);
  var
    i: Int32;
  begin
    for i := 0 to t do begin
      asm
               NOP;
      end;
    end;
  end;
 
begin
  DDRB := DDRB or (1 shl BP5);
  repeat
    PORTB := PORTB or (1 shl BP5);
    mysleep(sl);
 
    PORTB := PORTB and not (1 shl BP5);
    mysleep(sl);
  until 1 = 2;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Erster Blinkversuch ATmega328

Beitrag von Timm Thaler »

Mathias hat geschrieben:Das Blink-Programm habe ich noch ein wenig angepasst.


Und, funktioniert es denn jetzt?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erster Blinkversuch ATmega328

Beitrag von Mathias »

Ja es läuft. :shock:

Dank, auch deiner Hilfe. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erster Blinkversuch ATmega328

Beitrag von Mathias »

Ein Frage hätte ich noch, Bei der Arduino-IDE, kann man beim Atmega und bei den ATTiny noch Clock einstellen.
Da kann man ach sagen ob man den Oszilator intern oder extern will.
Kann man dies auch bei Lazarus ?

Kann man dies auch irgendwie über die benutzerdefinierten Einstellungen machen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Erster Blinkversuch ATmega328

Beitrag von Timm Thaler »

Mathias hat geschrieben:Kann man dies auch irgendwie über die benutzerdefinierten Einstellungen machen ?


Nein, das wird nicht im Programm hinterlegt. Dazu werden die sogenannten "Fuses" gesetzt, mit denen man auch Brown-Out-Verhalten, Ausleseschutz usw. setzen kann.

Dafür empfehle ich Dir echt den AVR8 Burn-O-Mat, das ist eine grafische Oberfläche für Avrdude (geht auch unter Linux und auf dem Raspi), welche diese Fuseeinstellungen sehr angenehm macht. Man kann das auch in Avrdude direkt einstellen, aber dann muss man die Fuses als Hexcodes berechnen und von Hand übertragen.

Mit den Fuses solltest Du sehr vorsichtig sein. Wenn man zum Beispiel den Takt von internem Takt auf externen Quarz umstellt, aber keinen Quarz dranhat, oder wenn man einen Quarz dranhat und auf externe Taktquelle (Quarzoszillator) umstellt, dann reagiert der AVR überhaupt nicht mehr. Dann hat man den AVR "verfused" und muss per Signalgenerator einen externen Takt am XTAL einspeisen, um wieder programmieren und die Fuses richtigstellen zu können. Auch gefährlich, den Resetpin abschalten um ihn als Eingangpin zu nutzen, damit ist natürlich nur noch Programmieren über den internen Bootloader des Arduino oder über ein "high-voltage-programming" möglich. Auch böse, das Abschalten des SPI-Interfaces als Programmierschnittstelle, macht man ebenfalls nur einmal.

Sinnvoll ist meist, den internen Taktteiler von CKDIV 8 auf 1 zu stellen, damit der Atmega mit 8MHz rennt, und einen Brown-out einzuschalten, wenn man auf dem Experimentierboard bastelt.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erster Blinkversuch ATmega328

Beitrag von Mathias »

Wen ich es richtig verstehe, wird dies mit avrdude eingestellt ?

Auch ist es möglich einen AVR mit avrdude zu schrotten ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Erster Blinkversuch ATmega328

Beitrag von Timm Thaler »

Mathias hat geschrieben:Wen ich es richtig verstehe, wird dies mit avrdude eingestellt ?


Nicht zwingend. Du kannst die Fuses mit allem programmieren, was auch den Flash programmieren kann: Ponyprog, AVRStudio, Bascom... und halt Avrdude. Da Avrdude ziemlich viele AVRs und Programmieradapter unterstützt, greifen einige IDEs wie die Arduiono IDE darauf zu.

Mathias hat geschrieben:Auch ist es möglich einen AVR mit avrdude zu schrotten ?


Ja, leicht. Man muss sich nur ein bißchen in den Fuses verrechnen. Deswegen bevorzuge ich eine Oberfläche, die mir die Fuseberechnung abnimmt.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erster Blinkversuch ATmega328

Beitrag von Mathias »

Auch gefährlich, den Resetpin abschalten um ihn als Eingangpin zu nutzen

Das habe ich auch schon festgestellt, das man diesen Pin im Normalfall nicht nutzen kann.

damit ist natürlich nur noch Programmieren über den internen Bootloader des Arduino

Ist das die Variante, welche über den UART/USB geht ?

über ein "high-voltage-programming" möglich.

Kann man damit jeden verflahsten AVR reten ?

Was den Takt anbelangt musste ich schon festellen, das man in der Arduino-IDE den Bootloader brennen muss.
Ich denke mal, dies geschieht mit -Uxxxx.

Ich habe nachgeguckt, die IDE ruft dabei folgendes Kommando auf. Bei einem ATtiny13.

Code: Alles auswählen

/home/acer/Programme/arduino-1.8.4/hardware/tools/avr/bin/avrdude -C/home/acer/.arduino15/packages/MicroCore/hardware/avr/1.0.2/avrdude.conf -v -pattiny13 -cstk500v1 -B32 -P/dev/ttyUSB0 -b19200 -e -Ulock:w:0x3f:m -Uhfuse:w:0xff:m -Ulfuse:w:0x3A:m 


Das Bootkonzept der AVR muss ich mal genauer angucken. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erster Blinkversuch ATmega328

Beitrag von Mathias »

Ich habe gerade paar Schreib-Versuche mit der Arduino-IDEund ATmega328p gemacht.
Wen ich den CPU-Takt ändere, ist nur die Baudrate anders.

Code: Alles auswählen

/home/tux/Programme/arduino-1.8.5/hardware/tools/avr/bin/avrdude -C/home/tux/.arduino15/packages/MiniCore/hardware/avr/1.0.3/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b115200 -D -Uflash:w:/tmp/arduino_build_769317/Blink.ino.hex:i 
/home/tux/Programme/arduino-1.8.5/hardware/tools/avr/bin/avrdude -C/home/tux/.arduino15/packages/MiniCore/hardware/avr/1.0.3/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b9600 -D -Uflash:w:/tmp/arduino_build_769317/Blink.ino.hex:i


Mache ich aber Bootloader brennen, habe ich etliche -U Parameter.

Code: Alles auswählen

/home/tux/Programme/arduino-1.8.5/hardware/tools/avr/bin/avrdude -C/home/tux/.arduino15/packages/MiniCore/hardware/avr/1.0.3/avrdude.conf -v -patmega328p -cstk500v2 -Pusb -e -Ulock:w:0x3f:m -Uefuse:w:0xfc:m -Uhfuse:w:0xd6:m -Ulfuse:w:0x62:m 
/home/tux/Programme/arduino-1.8.5/hardware/tools/avr/bin/avrdude -C/home/tux/.arduino15/packages/MiniCore/hardware/avr/1.0.3/avrdude.conf -v -patmega328p -cstk500v2 -Pusb -e -Ulock:w:0x3f:m -Uefuse:w:0xfc:m -Uhfuse:w:0xd6:m -Ulfuse:w:0xf7:m


Sehe ich es richtig, das der CPU-Takt mit dem Bootloader bestimmt wird ?
Das normale Hochladen des Programmes, hat dabei keinen Einfluss mehr ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Erster Blinkversuch ATmega328

Beitrag von Timm Thaler »

Mathias hat geschrieben:Sehe ich es richtig, das der CPU-Takt mit dem Bootloader bestimmt wird ?

Nein.

Mathias hat geschrieben:Das normale Hochladen des Programmes, hat dabei keinen Einfluss mehr ?

Ja.

Das

Code: Alles auswählen

... avrdude -C... -v -patmega328p -carduino -P/dev/ttyUSB0 -b9600 -D -Uflash:w:/tmp/arduino_build_769317/Blink.ino.hex:i 

schreibt nur Dein hexfile in den Flash. Im Hexfile stehen normalerweise - man kann daran bei einigen AVR rumspielen - nur die Befehle, die ausgeführt werden. Da stehen keine Befehle, mit welchem Takt der Controller laufen soll.

Dass die Arduino-IDE hier die Baudrate ändert liegt wahrscheinlich nur daran, dass die IDE annimmt: Ok, der Controller läuft mit niedrigem Takt, dann kannst Du nur mit 9600 Baud übertragen weil der Uart bei niedrigem Takt die 115kBaud nicht schafft. Und dann Avrdude den Befehl gibt, mit niedriger Baudrate zu arbeiten.

Das

Code: Alles auswählen

... avrdude -C... -v -patmega328p -cstk500v2 -Pusb -e -Ulock:w:0x3f:m -Uefuse:w:0xfc:m -Uhfuse:w:0xd6:m -Ulfuse:w:0x62:m

schreibt die Fuses des AVR. Da wird jeweils nur ein Byte geschrieben. Was die Bytes genau machen steht im Datenblatt und ist abhängig vom Controllertyp.

Eine Übersicht zu Fuses gibt es hier: https://www.mikrocontroller.net/articles/AVR_Fuses

Antworten