AVR allgemein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

AVR allgemein

Beitrag von af0815 »

Ich möchte hier einen allgemeinen Thread über AVR und den Bibliotheken dazu aufmachen, damit nicht andere Thrads von dem Thema gekapert werden.
DL3AD hat geschrieben:Hallo, mal eine Frage - ich mache bisher meine AVR Projekte in Bascom / Lunaavr. Gibt es fur Lazarus für die AVR Programmierung eine art Sprachreferenz ?

af0815 hat geschrieben:Im Hintergrund ist der gnu avr as, wenn du das meinst. Ansonsten geht pascal OHNE real Unterstützug und ohne class. Es ist aber ein laufender Prozess, im fpc ist schon auch angedacht (irgendwann) real zu unterstützen. Aktuell kommt nur ein komischer Internal Error, aber lt. Mantis ist das comming soon :D Deswegen ist das auch mit der Sprachreferenz so eine Sache.

DL3AD hat geschrieben:...was ist mit real und class gemeint ?Ich meinte Sprachelemente wie z.B. Ports schalten, Timer, Serielle Schnittstelle, I2C ...und steuernde Elemente wie Schleifen if, Case...(die hoffe ich sind wie gehabt in Pascal)


Generell:
*) Syntax wie if, case,.... bleiben komplett gleich, ist ja auch der FPC der das kompiliert
*) Aktuell werden Gleitkommazahlen (damit war real gemeint) noch nicht unterstützt. Es kommt ein Internal error 200103281. Siehe auch https://bugs.freepascal.org/view.php?id=32006

Bibliotheken:
*) LCL ist nicht vorhanden, FCL nur ganz wenig, es gibt keine Widgetsets, es gibt keine visuellen Komponenten
*) Serielle Schnittstelle (Synaser,...) etc. sind nicht als Paket vorhanden

Dazu auch die vielen Infos die Mathias dazu im Wiki hinterlassen hat.

Projektunterstützende Komponernten, Wizards etc.
https://www.lazarusforum.de/viewtopic.p ... 54#p108282
https://www.lazarusforum.de/viewtopic.php?f=18&t=11760
http://www.lazarusforum.de/viewtopic.ph ... 7&p=105496

Tutorials, Infos
https://wiki.freepascal.org/AVR_Embedded_Tutorial/de
https://wiki.freepascal.org/AVR_Programming/de
https://wiki.freepascal.org/AVR_Programming

Codeschnipsel
https://github.com/sechshelme/Lazarus-Embedded
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR allgemein

Beitrag von jayway »

Hallo DL3AD,

ich steige auch gerade in die AV-Programmierung mittels FPC/Lazarus ein. Bisher habe ich mit C gearbeitet.

Mit real ist der Gleitkommatyp aus Pascal gemeint. Beim FPC ist Rechnen mit Fließkommazahlen nicht möglich.
class (Klassen) werden ebenfalls nicht unterstützt, ersatzweise kann man, object verwenden, einen Vorläufer.
Übrigens kann man vieles unter https://wiki.freepascal.org/AVR_Programming/de nachlesen.

Nach meinem bisherigen Verständnis, programmiert man die Controller im wesentlichen in Assembler mit Pascal-Sprachmitteln. Aber es gibt schon viele Bibliotheken die man nutzen kann, bei denen der Pascal-Charakter und Komfort dann wesentlich mehr zum tragen kommt. Ich arbeite mich da auch gerade ein.

Falls ich daneben liege, bitte korrigieren.

Gruß Jay

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR allgemein

Beitrag von jayway »

--doppelt--

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR allgemein

Beitrag von af0815 »

jayway hat geschrieben:Nach meinem bisherigen Verständnis, programmiert man die Controller im wesentlichen in Assembler mit Pascal-Sprachmitteln.
...
Falls ich daneben liege, bitte korrigieren.

Ich würde es genau umgekehrt definieren. Im wesentlichen in Pascal, nur wenn nichts geht, muss man auf assembler ausweichen.

Das ist eine interrupt procedure, da braucht man nicht wirklich was von assembler

Code: Alles auswählen

 
procedure ardTimeSetup;
begin
  asm CLI end;//InterruptsDisable;
  TCCR0A := TCCR0A or byte(1 shl WGM01);
  TCCR0A := TCCR0A or byte(1 shl WGM00);
 
  TCCR0B := TCCR0B or byte(1 shl CS01);
  TCCR0B := TCCR0B or byte(1 shl CS00);
 
  TIMSK0 := TIMSK0 or byte(1 shl TOIE0);
 
  asm SEI end; //InterruptsEnable;
end;
 
//--- Interrupt 16 Timer/Couner0 Overflow ---
Procedure TIMER0_OVF_ISR; Alias: 'TIMER0_OVF_ISR'; Interrupt; Public;
var
  m,
  f: LongWord;
begin
  m := timer0_millis;
  f := timer0_fract;
 
  inc(M,MILLIS_INC);
  inc(f,FRACT_INC);
 
  if (f>= FRACT_MAX) then begin
    f := f - FRACT_MAX;
    m := m + 1;
  end;
 
  timer0_millis:= m;
  timer0_fract:= f;
  inc(timer0_overflow_count);
end;
 
 
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR allgemein

Beitrag von jayway »

Stimmt, da habe ich Blödsinn geschrieben. Meine Erwartungshaltung ging eher in die Richtung einer Kapselung á la Arduino oder Luna. Da kam mir der Pascal-Style mit Registernamen und asm-Blöcken, wie Assembler vor. :roll:

Jay

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR allgemein

Beitrag von af0815 »

Na, ja, mann kann es schon so treiben wie beim Arduino Projekt, wenn man genug Zeit hat :-)
Pascal:

Code: Alles auswählen

uses
  uInterrupts, ard_digitalIO, ard_Time;
 
procedure setup;
begin
  pinMode(ardLED_BUILTIN,ardOUTPUT);
end;
 
begin
  ardTimeSetup;
  setup;
  while True do
  begin
    digitalWrite(ardLED_BUILTIN,ardHIGH);
    delay(1000);
    digitalWrite(ardLED_BUILTIN,ardLOW);
    delay(1000);
  end;//Main loop
end.
 

Arduino

Code: Alles auswählen

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}
 
// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR allgemein

Beitrag von jayway »

Gibt es eine Übersicht, wo man Packages für AVR-Controller finden kann, oder eine Strategie zur Suche? So wie durch deine Antworten und das Rumstöbern im Forum, finde ich immer mal wieder Informationen, aber etwas gebündelter oder ein guter Ausgangspunkt zur Suche sind mir jetzt noch nicht untergekommen.
Dein Repo habe ich gefunden, aber eben auch eher durch einen Thread hier im Forum.

Gruß Jay

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR allgemein

Beitrag von af0815 »

Kurze Antwort - nein

Lange Antwort - was für Packages suchst du ? Es gibt genaugenommen nichts. Die beste Info ist noch auf https://wiki.freepascal.org/AVR_Programming/de zu finden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR allgemein

Beitrag von jayway »

Danke, das hatte ich befürchtet.
Also werde ich mich durch die Seiten lesen und meine Programme dabei Stück für Stück von C auf FP überführen. Nach ein bisschen Übung, vor allem auch im Umgang mit den ganzen Möglichkeiten die FP und Lazarus bieten, kann ich mich auch mal an eine Bibliothek ranwagen, z.B. LCD oder verschiedene Sensoren.
Das verspricht interessante Winterabende. :D

Gruß Jay

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR allgemein

Beitrag von af0815 »

Es ist leider C++, sonst wäre das ganze einfacher in den FPC einzubinden. sprich man könnte direkt gegen die Bibliotheken linken.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR allgemein

Beitrag von jayway »

Da muss ich dir mal widersprechen. :D Arduino mag C++ sein, aber ich habe Atmel-µC ausschließlich in C programmiert (Atmel Studio und avr-toolchain). Die meisten Bibliotheken existieren in C. Was hier neben mir blinkert ist ein Atmega328 auf dem Breadbord mit ISP-Programmer und zwei LEDs. Dafür habe ich nichts Arduino-artiges benutzt.

https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

Arduino habe ich mir mal angesehen, aber dann doch nie ernsthaft verwendet.

Gruß Jay

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR allgemein

Beitrag von af0815 »

BTW: Im englischen Forum ist ein neues Unterforum zu AVR-embeded und ARM-embeded eingerichtet worden.

AVR: https://forum.lazarus.freepascal.org/in ... ,78.0.html
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: AVR allgemein

Beitrag von af0815 »

jayway hat geschrieben:Arduino habe ich mir mal angesehen, aber dann doch nie ernsthaft verwendet.

Neben mir blinkt ein Ardunio Uno nachbau :-) Nachdem ich vorige Woche noch nichts von AVR wusste, beschäftige ich mich jetzt damit. Soll was für den Wohnwagen werden, der RasPi säuft zuviel, damit muss es was kleineres werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

jayway
Beiträge: 15
Registriert: Di 13. Feb 2018, 10:38
OS, Lazarus, FPC: Windows/Linux (L 2.0.8 FPC 3.0.4)
CPU-Target: 64Bit/8Bit
Wohnort: Dresden

Re: AVR allgemein

Beitrag von jayway »

So ein Arduino(-Nachbau) hat sein gutes (ich habe hier auch zwei Nanos für schnelle Experimente rumfliegen), weil man die ganze grundlegende Hardware schon mal erledigt hat, und mit einer USB-Schnittstelle arbeiten kann. Das ist genau die Stärke von Arduino, mit kleiner Einstiegshürde schnell zu zählbaren Ergebnissen.
Als ich mit µC zu experimentieren anfing, habe ich den Arduino irgendwie verpasst und den etwas steinigeren Weg gewählt. Viel Bastelei, viel Trial and Error, viel C, komische Programmer an parallelen und seriellen Schnittstellen. Jetzt erkenne ich aber einen Vorteil an diesem Einstieg: Es gibt kaum einen Unterschied zwischen der Programmierung in C und der Variante in Pascal. Die Registernamen, Ports, Flags etc. sind alle identisch (was sicher an der gemeinsamen Basis liegt), die Vorgehensweise ist ebenfalls identisch, nur bei Freepascal kann man eben den ganzen Klammer- und Sonderzeichen-Irrsinn aus C, durch lesbaren Pascal-Code ersetzen. Das ist grandios...
Nachteil ist allerdings, dass es wesentlich mehr Informationen, Beispielcode und Bibliotheken zu Assembler und C gibt. Der avr-gcc ist auch ein wirklich hammermäßiger Compiler, aber da ich µC nur als Hobby programmiere, brauche ich das letzte Optimierungsbyte und den letzten Zyklus auch nicht. Und ich gebe nach fünf Jahren C zu, dass mir Pascal doch lieber ist. :D

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: AVR allgemein

Beitrag von Socke »

jayway hat geschrieben:Jetzt erkenne ich aber einen Vorteil an diesem Einstieg: Es gibt kaum einen Unterschied zwischen der Programmierung in C und der Variante in Pascal. Die Registernamen, Ports, Flags etc. sind alle identisch (was sicher an der gemeinsamen Basis liegt)

Die Entwickler sind faul und übernehmen die Registernamen von den MCU-Datenblättern :roll: Warum sollte man sich hier neue Namen ausdenken?
Da die embedded-Entwicklung für FPC noch nicht ganz so ausgereift wie in GCC ist, gibt es aber auch hier durchaus noch die ein oder anderen Inkonsistenzen ...
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten