Plutos-AVR
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Plutos-AVR
Hallo,
ich dachte ich erstelle mal ein eignen Thread. Ich habe meine AVR Umgebung inzwischen Überarbeitet.
Änderungen:
Samstag, 08.09.2018
- AM2320: Die Methoden "readTemp" und "readHum" überarbeitet und Fehler Erkennung eingebaut.
über die Errror Variable kann nun abgefragt werden ob es Problem gab(ist noch nicht optimal).
- AM2320: crc16 Hinzugefügt. Vielen Dank an Mathias der, die Methode von C++ nach Pascal übersetzt hat.
Hier ist noch geplant: Eine Auswahl Möglichkeit hinzuzufügen, da die Methode mehr Speicher benötigt und mehr Zeit braucht.
Freitag, 07.09.2018
- AM2320: Ist nun ein eigene Klasse(object)
- AM2320: Über die Methoden "readTemp" und "readHum" können nun die Werte ausgelesen werden
- DS3231 Ist ebenfalls eine eigene Klasse(object)
ich dachte ich erstelle mal ein eignen Thread. Ich habe meine AVR Umgebung inzwischen Überarbeitet.
Änderungen:
Samstag, 08.09.2018
- AM2320: Die Methoden "readTemp" und "readHum" überarbeitet und Fehler Erkennung eingebaut.
über die Errror Variable kann nun abgefragt werden ob es Problem gab(ist noch nicht optimal).
- AM2320: crc16 Hinzugefügt. Vielen Dank an Mathias der, die Methode von C++ nach Pascal übersetzt hat.
Hier ist noch geplant: Eine Auswahl Möglichkeit hinzuzufügen, da die Methode mehr Speicher benötigt und mehr Zeit braucht.
Freitag, 07.09.2018
- AM2320: Ist nun ein eigene Klasse(object)
- AM2320: Über die Methoden "readTemp" und "readHum" können nun die Werte ausgelesen werden
- DS3231 Ist ebenfalls eine eigene Klasse(object)
- Dateianhänge
-
Plutos_AVR_08_09_2018_A.zip
- Version vom Samstag, 08.09.2018
- (151.42 KiB) 143-mal heruntergeladen
Zuletzt geändert von pluto am Sa 8. Sep 2018, 18:52, insgesamt 3-mal geändert.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
Hier hast du ein UInt16, ein Int ohne Vorzeichen.
Und hier gibt es ein negatives Result.
Hat deine Funktion in C++ keinen Funktionskopf ?
Code: Alles auswählen
function TAVR_Sensor_Am2320.readTemp(): UInt16;
Code: Alles auswählen
result:=-(Temp_T and $7fff)
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Doch schon.... Aber der Hilft nicht unbedingt weiter....Hat deine Funktion in C++ keinen Funktionskopf ?
Code: Alles auswählen
float readTemperature();
float readHumidity();
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
Aber hast den Fehler gefunden ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Nein, noch nicht, ich verstehe die Syntax an dieser Stelle einfach nicht:Aber hast den Fehler gefunden ?
Code: Alles auswählen
-(int16_t)(t&0x7fff);
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
Das (int16_t) eine Typenumwandlung, in komplizierter C-Schreibweise.
Hast du das UInt16 im Procedurekopf schon in Int16 umbenannt ?
Code: Alles auswählen
// C
ft = -(int16_t)(t&0x7fff);
// Pascal
ft := - Int16(t and $7FFF);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- 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: Plutos-AVR
Die codieren die Zahl einfach bißchen bekloppt. Statt im üblichen Zweierkomplement wird die Zahl als Betrag (Bit14..0) und Vorzeichen (Bit15) übergeben. Zum Verstehen des Unterschiedes siehe die Tabelle unter https://de.wikipedia.org/wiki/Zweierkomplement.pluto hat geschrieben:Nein, noch nicht, ich verstehe die Syntax an dieser Stelle einfach nicht:Code: Alles auswählen
-(int16_t)(t&0x7fff);
Die Funktion prüft mit if(t & 0x8000), ob Bit15 gesetzt, also ein Vorzeichen vorhanden ist und entfernt dann mit (t&0x7fff) das Vorzeichen. Anschließend wird mit (int16_t) von unsigned integer auf signed integer gecastet und mit - die bisher noch positive Zahl (Betrag) negiert, so dass ein echtes Zweierkomplement herauskommt.
-
- 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: Plutos-AVR
Btw: Nicht machen!pluto hat geschrieben:- AM2320: Ist nun ein eigene "class"
- DS3231 Ist ebenfalls eine eigene class
Klassen funktionieren zwar auch bei den AVRs, erzeugen aber einen erheblichen Overhead im Kompilat, der Dir eigentlich nichts bringt.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Danke, Ein teil habe ich mir schon fast gedacht, den anderen noch nicht... Werde ich morgen mal ausprobieren.Das (int16_t) eine Typenumwandlung, in komplizierter C-Schreibweise.
Ich meine ja..Hast du das UInt16 im Procedurekopf schon in Int16 umbenannt ?
Wie sonst sollte man z.b. mehrer LCD oder AM2320 Sensoren nutzen können? Wenn nicht in Klassen? Mit Records?Klassen funktionieren zwar auch bei den AVRs, erzeugen aber einen erheblichen Overhead im Kompilat, der Dir eigentlich nichts bringt.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
Object wäre eine Alternative.Wie sonst sollte man z.b. mehrer LCD oder AM2320 Sensoren nutzen können? Wenn nicht in Klassen? Mit Records?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Das habe ich ja genutzt. Timm Thaler meinte aber man sollte es besser nicht nutzen.... oder habe ich es Falsch verstanden?Object wäre eine Alternative.
Ich meinte mit class object eigentlich....
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Plutos-AVR
Funktionieren tut es, aber es verbraucht Speicher, welcher bei einem AVR knapp werden kann.Timm Thaler meinte aber man sollte es besser nicht nutzen....
Ich habe mal versucht Proceduren in eine erweiterten Record zu packen, dies braucht aber mehr Speicher als wen man Proceduren nackt schreibt.
Ob dies bei C++ auch der Fall ist, das eine Classe mehr Speicher verbraucht, müsste man mal testen. Immerhin baut fast alles bei Arduino auf Classen aus. Schon ein serial.begin ist eine Classen-Funktion.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Aus diesem Grund habe ich es inzwischen in eigene Klassen(object) gepackt. Weil es einfach "übersichtlicher" ist finde ich....Ob dies bei C++ auch der Fall ist, das eine Classe mehr Speicher verbraucht, müsste man mal testen. Immerhin baut fast alles bei Arduino auf Classen aus. Schon ein serial.begin ist eine Classen-Funktion.
Ich denke die Proceduren müssen gar nicht in das Record. Es könnte reichen, wenn da z.b. nur die Adresse drin steht...
Werde ich mal ausprobieren. Ob das eine Alternative ist und ob das wirklich deutlich weniger Speicher verbraucht. Aktuell erzeugt fpc bei mir eine hex die ca 30.5 kb oder so groß ist und avrude macht daraus dann 11 kb oder so.... ist natürlich schon viel, wenn man nur 32 kb hat.
Ich finde aber für den Anfang ist das schon OK... Vielleicht vergleiche ich mal die Größe mit Klassen(object) und ohne ob das WIRKLICH so viel ausmacht.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Plutos-AVR
Dann schreibe das bitte auch so. "object" richtig angewandt kann für uP's Sinn machen, "class" nicht, da es einen grossen Overhead bedeutet. Auch musst du darauf achten, dass nicht unnötig RTTI angelegt wird.pluto hat geschrieben: Ich meinte mit class object eigentlich....
Falls du dich für die Programmierung von Microchip uP's in Pascal interessierst, Edsons PicPas ist ein weiteres interessantes Projekt:
https://forum.lazarus.freepascal.org/in ... 595.0.html
Kennt jemand den Stand des LLVM AVR Backends? Falls das bereits brauchbar ist, wäre auch MSElang von Interesse.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Plutos-AVR
Mich wundert nur, dass der FPC das scheinbar Kompiliert.... Vielleicht wäre an dieser stelle ein "Hinweis" oder sogar eine "Warnung" nicht schlecht.Dann schreibe das bitte auch so. "object" richtig angewandt kann für uP's Sinn machen, "class" nicht, da es einen grossen Overhead bedeutet.
Ich habe aber schon vorher gelesen, dass CLASS nicht geht bzw. nicht Sinnvoll ist.
Klar, aber ich bin immer Froh wenn es die Infos auf Deutsch gibt, so wie es hier der Fall war...Falls du dich für die Programmierung von Microchip uP's in Pascal interessierst, Edsons PicPas ist ein weiteres interessantes Projekt:
MFG
Michael Springwald
Michael Springwald