Forum: Mikrocontroller und Digitale Elektronik Kommunikation zwischen uC und Display (Personenwaage)


von Konstantin L. (konze)


Lesenswert?

Hallo zusammen,

ich habe derzeit etwas Freizeit und habe mich deswegen entschlossen ein 
bisschen mit meinem neu erworbenen Open Logic Sniffer zu beschäftigen. 
Zuerst war mir nicht ganz recht klar was ich den messen könnte um mich 
in die Software bzw. das Gerät an sich einzuarbeiten. Dann kam mir die 
Idee, dass ich die Kommunikation zwischen dem Display und dem uC meiner 
Personenwaage im Bad belauschen könnte. Also habe ich die Waage (Soehnle 
Silver Sense) aufgeschraubt und ein bisschen von innen studiert. Zu 
finden war der Mess-Chip, vier Wiege-Zellen (druckabhängige Widerstände) 
sowie das Hinterteil des Displays. Die Platine mit dem Mess-Chip ist nur 
auf die Kontakte des Displays aufgelegt, sodass es sehr einfach war die 
Signale abzugreifen. Damit ich die Waage nicht auf den Tisch stellen 
muss bzw. das Laptop auf den Boden für die Messungen habe ich ein paar 
Leitungen aus der Waage herausgeführt und an eine Sockelleiste gelötet 
damit ich Messungen bequem am Schreibtisch durchführen kann.

Hier ist ein Bild der Platine, ich habe an die Kontakte die Namen der 
Kanäle der Mess-Software geschrieben.
https://dl.dropboxusercontent.com/u/6454333/mikrocontoller.net/scale%20hacking/board_channels.jpg

Das Display besteht aus vier 7-Segment Anzeigen sowie einem Doppelpunkt 
zwischen der ersten und zweiten Zahl, einem Punkt zwischen der dritten 
und vierten Zahl. Des Weiteren sind an der rechten Seite noch 3 Anzeigen 
die zeigen welches Masssystem eingestellt ist.
1
 _    _  _   _  st
2
|_|· |_||_| |_| lb
3
|_|· |_||_|.|_| kg

Die Waage schaltet sich automatisch ein sobald man sich daraufstellt 
(bzw. ~20 kg gemessen werden). Wenn die Waage für eine Zeit lang 
unbelastet ist (0 kg) so schaltet sie sich wieder automatisch aus. Für 
meine Messungen habe ich die Display-Kontakte an meinen Open Logic 
Sniffer angeschlossen.
Durchführung der Messung:
- Waage ist aus.
- Messung der Sniffers beginnt sobald eine High-Signal auf dem Kanal 0 
anliegt (Waage ist ein), anschließend wird noch 600ms gewartet (Display 
wird eingeschaltet) bis die Daten aufgezeichnet werden.
- Nun habe ich mich kurz auf die Waage gestellt, damit diese 
eingeschaltet wird.
- Messung wird durchgeführt.
- Anschließend wird die nächste Messung erst durchgeführt wenn die Waage 
wieder aus geschaltet ist.

Als Mess-Software setze ich LogicSniffer ein 
(http://www.lxtreme.nl/ols/). Gemessen wird mit einer Sample-Rate von 20 
kHz.
Hier ist nun die erste Messung:

0-50ms ( start der Kommunikation mit dem Display bei 4,95ms)
https://dl.dropboxusercontent.com/u/6454333/mikrocontoller.net/scale%20hacking/001/001_0-50.png

3-16ms
https://dl.dropboxusercontent.com/u/6454333/mikrocontoller.net/scale%20hacking/001/001_3-16.png

50-100ms
https://dl.dropboxusercontent.com/u/6454333/mikrocontoller.net/scale%20hacking/001/001_50-100.png

0-600ms
https://dl.dropboxusercontent.com/u/6454333/mikrocontoller.net/scale%20hacking/001/001_0-600.png

Datei der Messung für LogicSniffer:
https://dl.dropboxusercontent.com/u/6454333/mikrocontoller.net/scale%20hacking/001/001.ols

Ich habe den Kanälen unterschiedliche Farben gegeben. Ich gehe davon aus 
dass auf 2-3 Daten übertragen werden und die anderen Kanäle eine Art 
Taktsignal liefern. 4, 5, 6 scheinen alle dasselbe Signal zu übertragen, 
zudem ist hier die Periode immer gleich. Die restlichen Signale ändern 
immer mal wieder die Dauer der High/Low Signals. Ich würde gerne wissen 
was der uC mit dem Display spricht und vor allem wie sich dieses 
Kommunikationsprotokoll zusammensetzt.

Ich würde mich sehr freuen wenn ihr mir ein paar Tipps geben könntet wie 
ich hier eine Systematik entdecken könnte. Gerne bin führe ich noch 
weitere Messungen durch.

Vielen dank und viele Grüße

konze

von Nosnibor (Gast)


Lesenswert?

Bei so vielen Anschlüssen (und so viel Aktivität) für so ein kleines 
(wenig Segmente) Display ist es sehr wahrscheinlich, daß es sich nicht 
um Kommunikation handelt, sondern daß das Display direkt angesteuert 
wird, d.h. die Treiber für die Segment- und Backplaneleitungen sitzen 
direkt im µC. Zumindest die Backplaneanschlüsse werden mit mehr als zwei 
unterschiedlichen Pegeln angesteuert; da unterschlägt der LA also 
wichtige Information.

Ein Blick auf die Bilder: die meisten Signale wiederholen sich alle 
sechs "Takte" (je ca. 4,2ms); das sieht also nach drei Backplanes aus.

Channel 2 und 3 könnten Backplanes sein: die sind jeweils einen Takt L, 
dann einen Takt H (die aktive Phase der Backplane), dann haben sie vier 
Takte lang einen Pegel dazwischen (die aktiven Phasen der anderen beiden 
Backplanes). Aus dem Zwischenpegel macht der LA H mit unregelmäßigen 
kurzen L-Störimpulsen drin.

Channel 4, 5 und 6 sind typische Beispiele für Segmentleitungen, die nur 
ausgeschaltete Segmente bedienen: sie gehen immer mit dem Pegel der 
gerade aktiven Backplane mit, so daß dazwischen keine Differenzspannung 
entsteht.

Channel 9 im Bild 50-100ms steuert ein ausgeschaltete Segment (das zur 
Backplane Channel 3 gehört) und wahrscheinlich zwei eingeschaltete: man 
sieht, daß Channel 9 in der aktiven Phase von Channel 2 genau den 
umgekehrten Pegel annimmt, und wahrscheinlich ist es bei der dritten 
Backplane genauso.

Wenn die Segmente wirklich alle einzeln steuerbar sind, komme ich auf 33 
Stück (4x7 für die Ziffern + 3 Maßeinheiten + Punkt + Doppelpunkt); bei 
3 Backplanes werden also 11 Segmentleitungen benötigt; das Display 
sollte also 14 Anschlüsse haben. Auf dem Foto sehe ich noch einen 
Testpunkt auf gleicher Höhe wie Channel 9, der wahrscheinlich auch zum 
Display gehört. Ein weiterer könnte sich unter der Schraube hinter 
Channel 0/1 verbergen. Kann aber auch sein, daß die ganz linke 
Displaystelle mit weniger echten Segmenten auskommt, weil sie nicht alle 
Ziffern darstellen können muß (0+1: zwei Segmente, 0+1+2: fünf 
Segmente).

Die fehlende Backplaneleitung kommt wahrscheinlich zwischen Channel 2 
und 3 aus dem Chip und verschwindet ohne Testpunkt in einer 
Durchkontaktierung; möglicherweise gehört der Testpunkt unterhalb von C1 
dazu.

von Marc Rupprath (Gast)


Lesenswert?

Hallo;
zum Thema direkte Ansteuerung der Segmente über uC:

Zum einen kann man, sofern das Datenblatt zum Display vorliegt, dies 
bestimmt auch durch direktes Ansteuern über "normale" IO Ports 
bewerkstelligen.

Zum anderen gibt es µC welche speziell zur Segmentansteuerung von LCD 
Displays über die entsprechende Peripherie verfügen.
Als Beispiel seien hier die Arm Cortex M3 /M4 Derivate von EnergyMicro 
genannt.
http://cdn.energymicro.com/dl/an/pdf/an0057_efm32_segment_lcd.pdf

Gruß

von Thomas (Gast)


Lesenswert?

Hallo Konstantin,
zunächst würde ich mit einem Scope die Logiksignale kontrollieren, um 
die Triggerschwellen für Deinen LA korrekt einzustellen. Anschliessend 
legst Du ein Gewicht auf die Waage, z.B. 12.34 KG. Aus dem Anzeigewert 
kannst Du nun das Pattern der 7-Segmente ermitteln. Da es sich mit an 
Sicherheit grenzender Wahrscheinlichkeit um ein gemultiplexte Anzeige 
handelt, muss Du nun nach der Patternfolge 1..2..3..4 in Deinen Signale 
suchen. Das ist Gehirntraining pur, da Du nicht weisst, ob Du ein Common 
Anode oder Common Kathode Display hast.
Viel Glück
Thomas

von spess53 (Gast)


Lesenswert?

Hi

> Das ist Gehirntraining pur, da Du nicht weisst, ob Du ein Common
>Anode oder Common Kathode Display hast.

Common Anode oder Common Kathode bei LC-Diplays?

MfG Spess

von Markus A. (transltr)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hatte vor einiger Zeit die gleiche Idee wie Konstantin und habe mich 
an der Dekodierung der Displaysignale versucht. Dieser Thread hat mir 
dabei einen guten Ansatzpunkt gegeben - daher möchte ich euch meine 
Ergebnisse nicht vorenthalten.

Das Display der Waage wird in der Tat mithilfe von drei 
Bitplane-Signalen und zwölf Segmentleitungen angesteuert. Somit können 
bis zu 3*12=36 verschiedene Segmente angesteuert werden. Außer den von 
Konstantin dargestellten Segmenten gibt es noch zwei weitere:
1
      _     _   _     _   st
2
  |  |_| · |_| |_|   |_|  lb
3
  |  |_| · |_| |_| . |_|  kg
4
5
  H   F  E  D   C  B  A   G
6
7
      1     1   1     1   1
8
  1  672 1 672 672   672  2
9
  2  5 3 2 5 3 5 3 1 5 3  3
10
      4     4   4     4
Ich habe die Segmente entsprechend ihrer Position benannt - Die 
Segmentgruppen von A-G - die einzelnen Segmente einer Gruppe werden 
durchnummeriert. So ergibt sich z. B. für das mittlere Segment der 
Nachkommastelle die Bezeichnung A7, für das Komma die Bezeichnung B1.

Wie bereits beschrieben wechseln die drei Bitplane-Leitungen zwischen 
0V, 1.5V und 3V. Die drei Bitplanes ermöglichen das zeitliche 
Multiplexing der Segmentansteuerung, indem sie nacheinander zunächst für 
je 4.2 ms 0V, dann 3V annehmen und danach für 4x4.2ms bei 1.5V 
verharren. Ein Segment leutet, wenn zwischen Bitplane-Leitung und 
Segmentleitung eine Spannung von mehr als ~2V anliegt.

Soll ein ausgewähltes Segment leuchten, verhält sich die Segmentleitung 
invers zum zugehörigen Bitplane Signal. Es nimmt im entsprechenden 
Zeitfenster zunächst 0V, dann 3V an. Soll das Segment nicht leuchten, 
folgt die Segmentleitung der Bitplane-Spannung, nimmt also zunächst 3V, 
dann 0V an. In den übrigen 4x4.2 ms werden die beiden anderen Bitplanes 
durch die Segmentleitung bedient.

Ich habe mir also eine kleine Schaltung gebastelt, die mithilfe von drei 
Komparatoren die Bitplane-Signale in digitale Signale umwandelt, die 
aktiv sind, sobald deren Spannung 2V überschreitet. Diese drei Signale 
sowie die 12 Segmentleitungen werte ich mithilfe eines ATMEGA328 aus und 
sende das Ergebnis mit einem 433 Mhz Funkmodul (RFM12B) an meine 
Hausautomatisierung, wo sie in einer Datenbank abgelegt werden.

(Irgend-)Ein Segment leuchtet, wenn gilt:
BPx & !Py == 1  (mit BPx = Bitplane, x= 1..3, Py = Segmentleitung, y= 
1..12)

Mithilfe von Testgewichten und einer Wahrheitstabelle lassen sich die 
Segmentleitung/Bitplane Kombinationen zu den einzelnen Segmenten 
zuordnen.

Die folgenden Kombinationen haben sich für meine Waage ergeben:
1
 P   BP0   BP1    BP2
2
 1   F3    F2     F4
3
 2   D6           E1      
4
 3   D7    D1     D5      
5
 4   D3    D2     D4            
6
 5   C7    C1     C5       
7
 6   C3    C2     C4      
8
 7   A6    G2     G3      
9
 8   A7    A1     A5      
10
 9   F7    F1     F5      
11
10   F6    H1/2   H1/2        
12
11   C6    G1     B1      
13
12   A3    A2     A4
Misst man also an der Bitplane-Leitung BP0 3V und and der Segmentleitung 
P8 0V so leuchtet das mittlere Segment der Nachkommastelle.


Die Pinnamen habe ich wie folgt festgelegt.
1
 ------------------------------- 
2
| X O                           |       o = Displaypin
3
|                               |       O = Loch
4
|                               |       X = Schraube
5
|                               |      
6
|                               |      
7
|                            O  |      
8
| o  Mess-                    o | BP1  
9
| o  brücke1             o  X   | BP0
10
|                  _          o | BP2
11
| o              /   \        o |  P10
12
| o             |     |       o |  P9
13
|               |     |       o |  P1
14
| o  Mess-       \ _ /        o |  P2
15
| o  brücke1             P11  o |  P3
16
|                          o  o |  P4
17
|                             o |  P5
18
| o Taster  _                 o |  P6
19
| o       /   \               o |  P7
20
|        |     |            X o |  P8
21
|        |     |             o  |  P12         
22
|___      \ _ /                 |           
23
    |                           |         
24
 ___|     Versorgung            |     
25
|          GND   +              |
26
| X         o    o              |
27
 -------------------------------
Wer jetzt fröhlich eine neue Waage kaufen möchte, um daran rumzubasteln 
- ich musste leider feststellen, dass die Elektronik in den neueren 
Waagen verändert wurde.
Die Ansteuerung erfolgt nun über vier Bitplanes und Segmentleitungen mit 
vier Spannungsleveln (0V, 1V, 2V, 3V), welche nun nur noch je 2.1 ms 
anliegen. Außerdem wurde die Versorgungsspannung von ~6V auf ~3V 
reduziert (statt 4xAAA nur  noch 2xAAA Batterien). Prinzipiell kann die 
Dekodierung jedoch nach obigem Muster erfolgen. Da jedoch auch die 
Segmentleitungen vier verschiedene Spannungslevel aufweisen, können 
diese nicht ohne weiteres mithilfe der Digitaleingänge des 
Mikrocontrollers ausgewertet werden. Auch die geringere Eingangsspannung 
erschwert die Bauteilauswahl. Die meisten Komparatoren haben eine 
maximale Common-Mode Offsetspannung von Vcc-1.5V. Das bedeutet, dass die 
Spannung am Eingang 3V-1.5V = 1.5V nicht übersteigen darf. Trotz dieser 
Schwierigkeiten konnte ich die Signale abtasten und decodieren. Jedoch 
fehlen noch einige Signale, die ich bislang nicht auf der Platine 
lokalisieren konnte.

Ich hoffe, ich konnte bastelfreudigen Waagenmanipulatoren weiterhelfen.
Gruß,
Markus

von Forist (Gast)


Lesenswert?

Konstantin L. schrieb:
> Hier ist ein Bild der Platine, ich habe an die Kontakte die Namen der
> Kanäle der Mess-Software geschrieben.
> 
https://dl.dropboxusercontent.com/u/6454333/mikrocontoller.net/scale%20hacking/board_channels.jpg

Schei. Dropbox:

Error (404)
We can't find the page you're looking for.

Damit ist der ursprüngliche Thread ziemlich kastriert.

@Konstantin L. (konze)
Es wäre ausgesprochen hilfreich, wenn du die Bilder noch mal hier ins 
Forum hochladen würdest.

Markus A. schrieb:
> Waage4.bmp

Versuchs mal als PNG -> Bildformate

> Die meisten Komparatoren haben eine
> maximale Common-Mode Offsetspannung von Vcc-1.5V. Das bedeutet, dass die
> Spannung am Eingang 3V-1.5V = 1.5V nicht übersteigen darf. Trotz dieser
> Schwierigkeiten konnte ich die Signale abtasten und decodieren.

Mit einem TS864, MCP6549, TLV1704, TLV3404 MAX9094/MAX9095(VDD-0.7V) als 
Komparator steht man evtl. besser da, auch wenn die Datenblätter sich zu 
dem Thema Common Mode Range unterschiedlich klar ausdrücken.

> Ich hoffe, ich konnte bastelfreudigen Waagenmanipulatoren weiterhelfen.
Auf jeden Fall, danke für die ausführliche Darstellung

von Jim M. (turboj)


Lesenswert?

Forist schrieb:
> Es wäre ausgesprochen hilfreich, wenn du die Bilder noch mal hier ins
> Forum hochladen würdest.

Nö, es wäre nicht wirklich hilfreich.

Denn er hatte einen Logic Analyser verwendet, aber im Oszi von Markus 
sieht man schön das die Bitplane Signale NICHT digital sind, sondern (in 
diesem Falle) 3 Pegel haben. Das kann ein LA gar nicht korrekt 
wiedergeben.

von Wolfgang (Gast)


Lesenswert?

Jim M. schrieb:
> Nö, es wäre nicht wirklich hilfreich.

Stimmt auch wieder. Das Platinenphoto alleine würde auch nicht viel 
weiter helfen und der alte Teil vom Thread kann eigentlich nach /dev/nul

von Markus A. (transltr)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ja, dass die Links nicht mehr funktionieren, war zunächst hinderlich. 
Wie schon angemerkt, sind spätestens durch meine Scope- und 
Platinenbilder wieder alle benötigten Informationen vorhanden.

Der TLV1704 sieht auf den ersten Blick ganz brauchbar aus. Ich habe das 
Problem mit einer Erweiterung der unten dargestellen Statemachine 
gelöst. So habe ich mich auf die 0V-Phase der Bitplane Signale 
synchronisiert und die Segmentleitungen während der 3V-Phase der 
Bitplanes abgetastet. In diesem Zeitraum sind die Segmentleitungen 
nämlich entweder 0V (Segment aktiv) oder 2V (Segment inakiv) und bewegen 
sich somit im Rahmen der gültien Eingangsspannung der digitalen IOs.

Die internen ADCs des ATMEGA konnte ich leider nicht nutzen, da der 
Multiplexer zu lange benötigt, zwischen den Kanälen zu wechseln. 
Außerdem besteht bei einem sequentiellen Sampling die Gefahr, dass sich 
die Signale in der Zwischenzeit geändert haben.

Habe das Bild noch einmal als png hochgeladen - gar nicht gesehen, das 
es ein bmp war.

Falls es hilft - hier ein Auszug aus der Auswertung der gemessenen 
Signale und die Umrechnung in ein Gewicht.

Gruß,
Markus
1
 //sampling
2
    bPortB = PINB;
3
    bPortC = PINC;
4
    bPortD = PIND;
5
    
6
    (bPortC & ( 1 << BP0)) ? int_BP0=1 : int_BP0=0; 
7
    (bPortC & ( 1 << BP1)) ? int_BP1=1 : int_BP1=0;
8
    (bPortC & ( 1 << BP2)) ? int_BP2=1 : int_BP2=0; 
9
  
10
11
    
12
  
13
 //Statemachine - order: BP2 - BP1 - BP0
14
 //init:
15
  if(!int_BP0 & int_BP1 & !int_BP2 & (state==99)){
16
   state = 00;
17
  }
18
  
19
  if(!int_BP0 & !int_BP1 & int_BP2 & (state==00)){
20
   _delay_ms(2);
21
   sample_PortB_BP2 = PINB;
22
   sample_PortC_BP2 = PINC;
23
   sample_PortD_BP2 = PIND;
24
   state = 01;  
25
  }
26
   
27
   if(!int_BP0 & int_BP1 & !int_BP2 & (state==01)){
28
    _delay_ms(2);
29
    sample_PortB_BP1 = PINB;
30
    sample_PortC_BP1 = PINC;
31
    sample_PortD_BP1 = PIND; 
32
    state = 02; 
33
  } 
34
  
35
   if(int_BP0 & !int_BP1 & !int_BP2 & (state==02)){
36
    _delay_ms(2);
37
    sample_PortB_BP0 = PINB;
38
    sample_PortC_BP0 = PINC;
39
    sample_PortD_BP0 = PIND;
40
    state = 03;
41
   }  
42
   
43
   if(state == 03){ 
44
45
 // inverse read of digital IOs - LCD is activated if physical BP-Line high and physical P-Segment-Line low - or vice versa
46
 // if variables int_Pn and BPm are both HIGH, respective segment is active.
47
  
48
  // Conversion of BP0 asserted Pins to active Segments
49
    (sample_PortC_BP0 & ( 1 << P1))?Seg_F3 = 0:Seg_F3 = 1;
50
    (sample_PortD_BP0 & ( 1 << P2))?Seg_D6 = 0:Seg_D6 = 1;
51
    (sample_PortD_BP0 & ( 1 << P3))?Seg_D7 = 0:Seg_D7 = 1;  
52
    (sample_PortD_BP0 & ( 1 << P4))?Seg_D3 = 0:Seg_D3 = 1;
53
    (sample_PortD_BP0 & ( 1 << P5))?Seg_C7 = 0:Seg_C7 = 1;
54
    (sample_PortD_BP0 & ( 1 << P6))?Seg_C3 = 0:Seg_C3 = 1;
55
    (sample_PortB_BP0 & ( 1 << P7))?Seg_A6 = 0:Seg_A6 = 1;
56
    (sample_PortB_BP0 & ( 1 << P8))?Seg_A7 = 0:Seg_A7 = 1;
57
    Seg_F7 =0; // P9  not needed for 0-199 kg conversion
58
    Seg_F6 =0; // P10 not needed for 0-199 kg conversion
59
    (sample_PortC_BP0 & ( 1 << P11))?Seg_C6 = 0:Seg_C6 = 1;
60
    (sample_PortC_BP0 & ( 1 << P12))?Seg_A3 = 0:Seg_A3 = 1;
61
 
62
 // Conversion of BP1 asserted Pins to active Segments 
63
    (sample_PortC_BP1 & ( 1 << P1))?Seg_F2 = 0:Seg_F2 = 1;
64
    (sample_PortD_BP1 & ( 1 << P3))?Seg_D1 = 0:Seg_D1 = 1; 
65
    (sample_PortD_BP1 & ( 1 << P4))?Seg_D2 = 0:Seg_D2 = 1; 
66
    (sample_PortD_BP1 & ( 1 << P5))?Seg_C1 = 0:Seg_C1 = 1; 
67
    (sample_PortD_BP1 & ( 1 << P6))?Seg_C2 = 0:Seg_C2 = 1; 
68
    (sample_PortB_BP1 & ( 1 << P7))?Seg_G2 = 0:Seg_G2 = 1; 
69
    (sample_PortB_BP1 & ( 1 << P8))?Seg_A1 = 0:Seg_A1 = 1; 
70
    Seg_F1 =0; // P9  not needed for 0-199 kg conversion
71
    Seg_H1 =0; // P10 not needed for 0-199 kg conversion
72
    (sample_PortC_BP1 & ( 1 << P11))?Seg_G1 = 0:Seg_G1 = 1;
73
    (sample_PortC_BP1 & ( 1 << P12))?Seg_A2 = 0:Seg_A2 = 1; 
74
 
75
  // Conversion of BP2 asserted Pins to active Segments 
76
    (sample_PortC_BP2 & ( 1 << P1))?Seg_F4 = 0:Seg_F4 = 1;
77
    (sample_PortD_BP2 & ( 1 << P2))?Seg_E1 = 0:Seg_E1 = 1;
78
    (sample_PortD_BP2 & ( 1 << P3))?Seg_D5 = 0:Seg_D5 = 1;
79
    (sample_PortD_BP2 & ( 1 << P4))?Seg_D4 = 0:Seg_D4 = 1;
80
    (sample_PortD_BP2 & ( 1 << P5))?Seg_C5 = 0:Seg_C5 = 1;
81
    (sample_PortD_BP2 & ( 1 << P6))?Seg_C4 = 0:Seg_C4 = 1;
82
    (sample_PortB_BP2 & ( 1 << P7))?Seg_G3 = 0:Seg_G3 = 1;
83
    (sample_PortB_BP2 & ( 1 << P8))?Seg_A5 = 0:Seg_A5 = 1;
84
    Seg_F5 =0; // P9  not needed for 0-199 kg conversion
85
    Seg_H2 =0; // P10 not needed for 0-199 kg conversion
86
    (sample_PortC_BP2 & ( 1 << P11))?Seg_B1 = 0:Seg_B1 = 1;
87
    (sample_PortC_BP2 & ( 1 << P12))?Seg_A4 = 0:Seg_A4 = 1;
88
 
89
 
90
  
91
         
92
  
93
    state_A = bsd_2_hexbsd(Seg_A1,Seg_A2,Seg_A3,Seg_A4,Seg_A5,Seg_A6,Seg_A7); // Nachkommastelle
94
    state_C = bsd_2_hexbsd(Seg_C1,Seg_C2,Seg_C3,Seg_C4,Seg_C5,Seg_C6,Seg_C7); // Einerstelle
95
    state_D = bsd_2_hexbsd(Seg_D1,Seg_D2,Seg_D3,Seg_D4,Seg_D5,Seg_D6,Seg_D7); // Zehnerstelle
96
    state_F = bsd_2_hexbsd(Seg_F1,Seg_F2,Seg_F3,Seg_F4,Seg_F5,Seg_F6,Seg_F7); // Hunderterstelle 
97
    state_kg = Seg_G3; // Kilogramm-Anzeige
98
99
Weight = hexbsd_2_int(state_A) + 10*hexbsd_2_int(state_C) + 100*hexbsd_2_int(state_D) + 1000*hexbsd_2_int(state_F); //Weight in kg/10

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.