Tutorial Arduino programmieren,

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

Re: Tutorial Arduino programmieren,

Beitragvon Mathias » 29. Okt 2018, 18:01 Re: Tutorial Arduino programmieren,

Man muss das Format nicht umwandeln. Die 7-malige Division durch 10 ist völlig unnötig.

Und wie sieht es aus, wen ich die Zeit ausgeben will, ich denke kaum, das ich da auf eine Umwandlung verzichten kann ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4497
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 29. Okt 2018, 21:18 Re: Tutorial Arduino programmieren,

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 ?


Du liest aber schon, was ich schreibe, oder? Im Nachbarthread zur DS-RTC?

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.
Timm Thaler
 
Beiträge: 1021
Registriert: 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
Nach oben

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

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

Beitragvon Timm Thaler » 31. Okt 2018, 21:19 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.
Timm Thaler
 
Beiträge: 1021
Registriert: 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
Nach oben

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

Beitragvon wp_xyz » 22. Jan 2020, 16:59 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)
wp_xyz
 
Beiträge: 3126
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 22. Jan 2020, 17:13 Re: Tutorial Arduino programmieren,

Es wäre hilfreich, wenn man eine Unit mit so typischen Arduino-IDE-Befehlen wie "DigitalRead", "DigitalWrite", "AnalogRead", "AnalogWrite", "Delay" etc. hätte

Wäre machbar, aber genau dies wollen wir vermeiden, mit den direkten Zugriffe, weis man genau, was man macht.
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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4497
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 22. Jan 2020, 17:35 Re: Tutorial Arduino programmieren,

Mathias 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

Wäre machbar, aber genau dies wollen wir vermeiden, mit den direkten Zugriffe, weis man genau, was man macht.
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++.

Sehe ich total anders. Warum programmierst du das Ding nicht gleich in Assembler? "Da weiß man genau, was man macht."
wp_xyz
 
Beiträge: 3126
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 22. Jan 2020, 17:54 Re: Tutorial Arduino programmieren,

Hast du das Tutorial gelesen, dann solltest du sehen, das Pinzugriffe einfacher als mit Arduino sind.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4497
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon pluto » 22. Jan 2020, 18:13 Re: Tutorial Arduino programmieren,

Sehe ich total anders. Warum programmierst du das Ding nicht gleich in Assembler? "Da weiß man genau, was man macht."

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.....
MFG
Michael Springwald
Aktuelles Projekt: ContentManager2(Ehmals NoteManager2).
pluto
Lazarusforum e. V.
 
Beiträge: 7039
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg(Oldenburg)
OS, Lazarus, FPC: Linux Mint 19.2 | 
CPU-Target: AMD
Nach oben

Beitragvon Timm Thaler » 22. Jan 2020, 21:23 Re: Tutorial Arduino programmieren,

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


Leider holt man sich damit wieder einen Wasserkopf an unnötigen und teils störenden Routinen rein.

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.

wp_xyz hat geschrieben:Sehe ich total anders. Warum programmierst du das Ding nicht gleich in Assembler?


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...

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. ;-)
Timm Thaler
 
Beiträge: 1021
Registriert: 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
Nach oben

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

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

Beitragvon af0815 » 22. Jan 2020, 21:57 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).
af0815
 
Beiträge: 3926
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

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

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried