Und wie sieht es aus, wen ich die Zeit ausgeben will, ich denke kaum, das ich da auf eine Umwandlung verzichten kann ?Man muss das Format nicht umwandeln. Die 7-malige Division durch 10 ist völlig unnötig.
Tutorial Arduino programmieren,
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tutorial Arduino programmieren,
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: Tutorial Arduino programmieren,
Du liest aber schon, was ich schreibe, oder? Im Nachbarthread zur DS-RTC?Mathias hat geschrieben:Und wie sieht es aus, wen ich die Zeit ausgeben will, ich denke kaum, das ich da auf eine Umwandlung verzichten kann ?
Wenn Du eine Zeit auf Display oder per RS232 ausgeben willst, musst Du jede einzelne Ziffer auf Ascii wandeln. Bei Binärzahlen (uint8, uint16) musst Du dazu wieder durch 10 teilen. Bei packed BCD nimmst Du einfach das high Nibble (Wert shr 4) + $48 für die Zehner und das low Nibble (Wert and $0F) + $48 für die Einer. Das ist ja der Witz, und deswegen hat man früher BCD für sowas genommen: Es läßt sich ganz einfach wandeln, egal ob für Ziffernanzeige-Röhren, BCD-zu-7Segment-Decoder, Codierschalter, RS232, ASCII-Display.
BCD ist quasi der kleinste gemeinsame Nenner zwischen menschlichem Dezimalsystem und elektronischem Binärsystem.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tutorial Arduino programmieren,
Da habe ich wohl etwas übersehen. Bei mir wird zwei mal gewandelt. Einmal mit bcd2bin(.. und einmal mit str(.. .
Und so wie du schreibst, kann man einen BCD-Wert sehr schnell in einen String umwandeln.
Und so wie du schreibst, kann man einen BCD-Wert sehr schnell in einen String umwandeln.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tutorial Arduino programmieren,
Ich habe es auf deine Weise umgesetzt, nur mit dem Unterschied das es 48 anstelle von $48 ist.
Mit folgendem Code klappt es:
Mit folgendem Code klappt es:
Code: Alles auswählen
procedure ReadDS3231neu(addr: UInt16);
begin
TWIStart((addr shl 1) or TWI_Write);
TWIWrite(0);
TWIStop;
TWIStart((addr shl 1) or TWI_Read);
Date.second := TWIReadACK_Error and $7F;
....
end;
begin
....
ReadDS3231neu(I2CAddr);
UARTSendString('Sec: ');
UARTSendChar(char((Date.second shr 4) + 48));
UARTSendChar(char((Date.second and $0F) + 48));
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: Tutorial Arduino programmieren,
Ja "0" ist Hex 30 und Dez 48. Ich schreib des Verständnisses wegen immer uint8('0'), was im erzeugten Code auf das Gleiche hinauskommt, aber es wird sofort klar, was hier addiert wird.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tutorial Arduino programmieren,
Ich habe gerade gesehen, das jemand angefangen hat, das Deutsche Tutorial in Englisch zu übersetzen.
Somit besteht die Chance, das es mehr AVR-Anhänger für Lazarus gibt.
Somit besteht die Chance, das es mehr AVR-Anhänger für Lazarus gibt.

Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Tutorial Arduino programmieren,
Bin Arduino-Neuling und mache meine ersten Geh-Versuche. Da hilft das Tutorial sehr - danke! Muss allerdings feststellen, dass die Programmierung des Arduino mit Lazarus viel komplizierter ist als mit der Arduino-IDE. Es wäre hilfreich, wenn man eine Unit mit so typischen Arduino-IDE-Befehlen wie "DigitalRead", "DigitalWrite", "AnalogRead", "AnalogWrite", "Delay" etc. hätte (aber viellicht wird so eine auch auf einer der anderen 21 Seiten dieses Monster-Threads vorgestellt, die ich nicht alle durchgesehen habe)
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tutorial Arduino programmieren,
Wäre machbar, aber genau dies wollen wir vermeiden, mit den direkten Zugriffe, weis man genau, was man macht.Es wäre hilfreich, wenn man eine Unit mit so typischen Arduino-IDE-Befehlen wie "DigitalRead", "DigitalWrite", "AnalogRead", "AnalogWrite", "Delay" etc. hätte
Wen du mal das hier durchliest: https://wiki.freepascal.org/AVR_Embedde ... _output/de , wirst du sehen, das es mit Pascal einfacher ist, als mir Arduino C++.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Tutorial Arduino programmieren,
Sehe ich total anders. Warum programmierst du das Ding nicht gleich in Assembler? "Da weiß man genau, was man macht."Mathias hat geschrieben:Wäre machbar, aber genau dies wollen wir vermeiden, mit den direkten Zugriffe, weis man genau, was man macht.Es wäre hilfreich, wenn man eine Unit mit so typischen Arduino-IDE-Befehlen wie "DigitalRead", "DigitalWrite", "AnalogRead", "AnalogWrite", "Delay" etc. hätte
Wen du mal das hier durchliest: https://wiki.freepascal.org/AVR_Embedde ... _output/de , wirst du sehen, das es mit Pascal einfacher ist, als mir Arduino C++.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tutorial Arduino programmieren,
Hast du das Tutorial gelesen, dann solltest du sehen, das Pinzugriffe einfacher als mit Arduino sind.
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: Tutorial Arduino programmieren,
Aber nein, dann solltest du gleich Rust und STM32 nehmen, und wirst fluchen, weil du kaum Tutorials findest im Internet.... und musst dir alles selbst beibringen oder Datenblätter lesen und verstehen.....Sehe ich total anders. Warum programmierst du das Ding nicht gleich in Assembler? "Da weiß man genau, was man macht."
MFG
Michael Springwald
Michael Springwald
-
- 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: Tutorial Arduino programmieren,
Leider holt man sich damit wieder einen Wasserkopf an unnötigen und teils störenden Routinen rein.wp_xyz hat geschrieben:Es wäre hilfreich, wenn man eine Unit mit so typischen Arduino-IDE-Befehlen wie "DigitalRead", "DigitalWrite", "AnalogRead", "AnalogWrite", "Delay" etc. hätte
Zum Beispiel macht ein DigitalWrite bei Arduino viel mehr als einfach den Pin auf High oder Low setzen: Dadurch dass man den Pin als Variable ansprechen kann, muss der erstmal geshiftet und maskiert werden. Aus einem einzigen sbi / cbi Befehl wird da schnell ein loop-shift-in-mask-out mit einem Dutzend Befehlen - die in 99% der Fälle überflüssig sind, denn wann muss man schon mal einen Portpin variabel ansprechen.
Oder delay - arbeitet mit dem Timer Interrupt. Unnötigerweise. Allerdings beeinflußt das die PWM, so dass bei Delay die PWM dieses Timers nicht mehr nutzbar ist.
Habe ich jahrelang gemacht, und Inline-ASM baue ich immer wieder ein, weil einige Dinge gar nicht anders gehen (String aus Flash lesen, Lockup-Table aus Flash lesen). Ist aber fehleranfällig, man kann schonmal stundenlang suchen, bis man werk dass man statt eines lds (lade aus Speicher) ein ldi (lade Konstante) geschrieben hat, das Programm läuft, aber irgendwas stimmt da nicht...wp_xyz hat geschrieben:Sehe ich total anders. Warum programmierst du das Ding nicht gleich in Assembler?
Mit Pascal werden die Programme grundsätzlich größer, weil:
- Der Compiler optimiert nicht immer so gut, wie man das in ASM könnte.
- Es macht mit Pascal soviel Spass, dass man noch das und das Gimmick einprogrammiert, was man sich in ASM schenken würde.

-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tutorial Arduino programmieren,
Das DigitalWrite ist ein sehr gutes Beispiel, wie Arduino sehr viel Resourcen verschwendet.
Ein Schieberegister steuert Arduino sehr gemütlich an, weil intern gemütlich mit DigitalWrite gearbeitet wird.
Und wie Timm schon sagt, versuche mal mit Arduino alle 3 Timer zu nutzen.
Ein Schieberegister steuert Arduino sehr gemütlich an, weil intern gemütlich mit DigitalWrite gearbeitet wird.
Und wie Timm schon sagt, versuche mal mit Arduino alle 3 Timer zu nutzen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Tutorial Arduino programmieren,
Das DigitalWrite ist ein sehr gutes Beispiel, wie Arduino sehr viel Resourcen verschwendet.
Ein Schieberegister steuert Arduino sehr gemütlich an, weil intern gemütlich mit DigitalWrite gearbeitet wird.
Und wie Timm schon sagt, versuche mal mit Arduino alle 3 Timer zu nutzen.
Ein Schieberegister steuert Arduino sehr gemütlich an, weil intern gemütlich mit DigitalWrite gearbeitet wird.
Und wie Timm schon sagt, versuche mal mit Arduino alle 3 Timer zu nutzen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- af0815
- Lazarusforum e. V.
- Beiträge: 6780
- 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: Tutorial Arduino programmieren,
ich habe mich zu dem Thema etwas versucht zu beschäftigen https://github.com/afriess/Laz_AVR_Lib dabei habe ich gesehen wie komplex die Materie ist. Durch die vielen Register mit den Möglichkeiten und den Interrupts wird es ganz schön unübersichtlich, wenn man es flexibler haben will.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).