Erster Blinkversuch ATmega328

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Re: Erster Blinkversuch ATmega328

Beitragvon Mathias » 11. Okt 2017, 19:16 Re: Erster Blinkversuch ATmega328

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:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3047
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon kupferstecher » 11. Okt 2017, 19:49 Re: Erster Blinkversuch ATmega328

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]
kupferstecher
 
Beiträge: 46
Registriert: 17. Nov 2016, 11:52

Beitragvon Timm Thaler » 11. Okt 2017, 20:38 Re: Erster Blinkversuch ATmega328

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.
Timm Thaler
 
Beiträge: 361
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Mathias » 11. Okt 2017, 21:36 Re: Erster Blinkversuch ATmega328

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:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3047
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 11. Okt 2017, 22:56 Re: Erster Blinkversuch ATmega328

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
Socke
 
Beiträge: 2374
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Mathias » 12. Okt 2017, 17:06 Re: Erster Blinkversuch ATmega328

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3047
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 12. Okt 2017, 18:58 Re: Erster Blinkversuch ATmega328

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


Und, funktioniert es denn jetzt?
Timm Thaler
 
Beiträge: 361
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Mathias » 12. Okt 2017, 19:10 Re: Erster Blinkversuch ATmega328

Ja es läuft. :shock:

Dank, auch deiner Hilfe. :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3047
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 14. Okt 2017, 17:49 Re: Erster Blinkversuch ATmega328

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3047
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 14. Okt 2017, 21:50 Re: Erster Blinkversuch ATmega328

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.
Timm Thaler
 
Beiträge: 361
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Mathias » 14. Okt 2017, 22:55 Re: Erster Blinkversuch ATmega328

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3047
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 14. Okt 2017, 23:36 Re: Erster Blinkversuch ATmega328

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.
Timm Thaler
 
Beiträge: 361
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Mathias » 15. Okt 2017, 13:07 Re: Erster Blinkversuch ATmega328

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3047
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 15. Okt 2017, 18:53 Re: Erster Blinkversuch ATmega328

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3047
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 15. Okt 2017, 20:12 Re: Erster Blinkversuch ATmega328

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
Timm Thaler
 
Beiträge: 361
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried