8-bit of 7-bit instelling digitale meter
3 berichten
• Pagina 1 van 1
- AndreasSchepens
- Berichten: 2
- Geregistreerd: 18 Mrt 2020, 15:37
8-bit of 7-bit instelling digitale meter
Ik heb een vraag omtrent de bit-instelling als ik mijn digitale meter uitlees.
Ik lees de telegrammen van een slimme meter uit doormiddel van een Arduino Uno, werkt perfect.
Echter heb ik toch een vraag. Mijn digitale meter verstuurd, volgens de datasheets, zijn gegevens volgens 8N1 bit instelling.
Het programma dat ik gebruik ziet er uit als onderstaande;
Waarom wordt in dit programma gebruik gemaakt van een 7-bit instelling terwijl de gegevens volgens 8-bit instelling verzonden worden?
#include <AltSoftSerial.h>
// AltSoftSerial always uses these pins:
//
// Board Transmit Receive PWM Unusable
// ----- -------- ------- ------------
// Teensy 2.0 9 10 (none)
// Teensy++ 2.0 25 4 26, 27
// Arduino Uno 9 8 10
// Arduino Mega 46 48 44, 45
// Wiring-S 5 6 4
// Sanguino 13 14 12
AltSoftSerial altSerial;
char c;
void setup() {
Serial.begin(115200);
altSerial.begin(115200);
}
void loop() {
if (altSerial.available()) {
c = altSerial.read();
// --- 7 bits instelling ---
c &= ~(1 << 7);
char inChar = (char)c;
Serial.print(c);
}
}
Ik lees de telegrammen van een slimme meter uit doormiddel van een Arduino Uno, werkt perfect.
Echter heb ik toch een vraag. Mijn digitale meter verstuurd, volgens de datasheets, zijn gegevens volgens 8N1 bit instelling.
Het programma dat ik gebruik ziet er uit als onderstaande;
Waarom wordt in dit programma gebruik gemaakt van een 7-bit instelling terwijl de gegevens volgens 8-bit instelling verzonden worden?
#include <AltSoftSerial.h>
// AltSoftSerial always uses these pins:
//
// Board Transmit Receive PWM Unusable
// ----- -------- ------- ------------
// Teensy 2.0 9 10 (none)
// Teensy++ 2.0 25 4 26, 27
// Arduino Uno 9 8 10
// Arduino Mega 46 48 44, 45
// Wiring-S 5 6 4
// Sanguino 13 14 12
AltSoftSerial altSerial;
char c;
void setup() {
Serial.begin(115200);
altSerial.begin(115200);
}
void loop() {
if (altSerial.available()) {
c = altSerial.read();
// --- 7 bits instelling ---
c &= ~(1 << 7);
char inChar = (char)c;
Serial.print(c);
}
}
Advertisement
Re: 8-bit of 7-bit instelling digitale meter
Heel vroeger, ongeveer vlak na de uitvinding van het spijkerschrift, was tekst altijd 'char'. Dat is dus een signed 8-bit waarde.
Tegenwoordig is dat meestal unsigned 8-bit, Dat is 'uint8_t' of 'byte'. Maar toch hebben nog veel functies de 'char' of een 'char' pointer.
Die signed 'char' is tegenwoordig alleen maar lastig, met UTF-8 is gewoon 8-bit zonder sign veel handiger.
Er waren oudere meters die 9600, 7E1 gebruikten. Blijkbaar gemaakt door mensen die nog in 1970 waren blijven hangen.
Als je code hebt die het parity-bit leeg maakt, dan kijk je even via een tijd-portaal naar 1970.
In andere woorden: Je kunt "c &= ~(1 << 7);" weglaten en ik geef de voorkeur aan 'uint8_t' of 'byte'.
Tegenwoordig is dat meestal unsigned 8-bit, Dat is 'uint8_t' of 'byte'. Maar toch hebben nog veel functies de 'char' of een 'char' pointer.
Die signed 'char' is tegenwoordig alleen maar lastig, met UTF-8 is gewoon 8-bit zonder sign veel handiger.
Er waren oudere meters die 9600, 7E1 gebruikten. Blijkbaar gemaakt door mensen die nog in 1970 waren blijven hangen.
Als je code hebt die het parity-bit leeg maakt, dan kijk je even via een tijd-portaal naar 1970.
In andere woorden: Je kunt "c &= ~(1 << 7);" weglaten en ik geef de voorkeur aan 'uint8_t' of 'byte'.
Re: 8-bit of 7-bit instelling digitale meter
Na het spijkerschrift is er ook nog de ECMA code geweest een 6 bit variant.
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 31 gasten