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: 4342
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: 733
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: 4342
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: 4342
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: 733
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

• Themenende •
Vorherige

Zurück zu Sonstiges



Wer ist online?

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

porpoises-institution
accuracy-worried