Hallo, baue an einer Schaltung zur Strommessung mit einem TLC549, damit die Messwerte stabiler und leicht zu verarbeiten sind ist U-Ref 2,56V und der Eingang wird mit einem 1:10 Verstärker vom Shunt angehoben. Meine Frage: gibt es etwas Besonders bei dem Messverst. zu beachten oder kann ich den so lassen? (Funktionieren tuts schon) Danke. MfG, R.N.
Ok, R8 also 11,11k, hab da jetzt ein Poti zum testen ist mir deshalb nicht aufgefallen. Danke.
Für die Tiefpaßschaltungen würde ich 10k / 100nF nehmen. Deine fgr. liegt bei 15 Hz.
Sorry, bin heute ein bischen langsam, für die VREF würde ich ein REF Element verwenden, 2 Potis sind 2 zuviel ;-))
Danke. So hypergenau muss es nicht werden, soll als Anzeige in mein WoMo. Gibt es denn Ref.Quellen mit 2,56V am Ausgang? Der Prototyp läuft auf dem Steckbrett eigentlich ganz ok. Was kann man denn am Eingang des ADC als Multiplexer nehmen? 4053?
4053 ist in Ordnung, ja es gibt 2,56 V REF Elemente. Du mußt es auch nicht zu genau nehmen, sollte nur ein Hinweis sein. Wie gesagt, 10K / 100 nF würde ich dennoch vorschlagen, wie oft wird denn die Messung ausgeführt ? /Sek. ?
Mein Programm macht momentan soviele Messungen wie es schaft :-), das sind so ca. 130 Messungen/Sek., momentan wird noch ein Balkenanzeige zusätlich zur Ausgabe des Wertes realisiert, die fällt aber später weg. War nur ein Test, dann sind so 300 Mess./Sek. möglich, was aber durch die Anzahl der genutzten Kanäle des Mux geteilt werden muss. Ich denke um die Schaltung universell einsetzten zu können, das der 4051 mit 8 Eingängen optimal ist. Der 8051 läuft mit 11,059MHz, ggf. versuch ich mal die 89LP4051, hab ich noch da, werde die aber einbremsen müssen da sonst das LM162 Display schlapp macht.
Hallo, hab das Teil mit einem 4051 erweitert, es funktioniert auch fast alles. Ein Problem, der 4051 reagiert komisch, das Umschalten ist immer um ein versetzt: y - x0 sollte eigentlich a0 b0 sein, ist aber a1 b0, also immer eins weiter. Kann ich mir nicht erklären, sieht auch am Oszi ok aus. hier der Quellcode "MCS-51 Assembler V 4 Andreas Roth"
1 | #cpu = 80C31 ; @12 MHz |
2 | |
3 | #bit clk = p3.3, data = p3.4, cs = p3.5, muxa = p1.0, muxb = p1.1 |
4 | #byte adc_read0, adc_read1, adc_read2, adc_read3 |
5 | |
6 | ;LCD |
7 | #bit d0=p1.4, d1=p1.5, d2=p1.6, d3=p1.7 |
8 | #bit rs=p1.2, en=p1.3 |
9 | #bit nibble_write |
10 | #byte write_pause |
11 | |
12 | ; Initialisierung |
13 | |
14 | acall init_lcd |
15 | |
16 | start: |
17 | |
18 | ;Kanal 0 Messen |
19 | setb muxa ;mux auf Eingang 0 (eigentlich 1) |
20 | clr muxb |
21 | acall warten ;warten bis mux umgeschalten hat |
22 | acall adc ;wandeln |
23 | mov adc_read0, a ;Ergebniss sichern |
24 | acall warten ;warten bis nächster Kanal gewählt werden kann |
25 | |
26 | ;Kanal 1 Messen |
27 | clr muxa ;mux auf Eingang 1 (eigentlich 2) |
28 | setb muxb |
29 | acall warten ;warten bis mux umgeschalten hat |
30 | acall adc ;wandeln |
31 | mov adc_read1, a ;Ergebniss sichern |
32 | acall warten ;warten bis nächster Kanal gewählt werden kann |
33 | |
34 | ;Kanal 2 Messen |
35 | setb muxa ;mux auf Eingang 2 (eigentlich 3) |
36 | setb muxb |
37 | acall warten ;warten bis mux umgeschalten hat |
38 | acall adc ;wandeln |
39 | mov adc_read2, a ;Ergebniss sichern |
40 | acall warten ;warten bis nächster Kanal gewählt werden kann |
41 | |
42 | ;Kanal 3 Messen |
43 | clr muxa ;mux auf Eingang 3 (eigentlich 0) |
44 | clr muxb |
45 | acall warten ;warten bis mux umgeschalten hat |
46 | acall adc |
47 | mov adc_read3, a ;Ergebniss sichern |
48 | ;acall warten ;warten bis nächster Kanal gewählt werden kann |
49 | |
50 | |
51 | acall lcd_out |
52 | |
53 | jmp start |
54 | |
55 | end |
56 | ; * * * Hauptprogramm Ende * * * |
57 | |
58 | adc: |
59 | mov a, #0h |
60 | clr clk |
61 | clr cs |
62 | for r4=#8 |
63 | setb clk |
64 | ;acall warten |
65 | if bit data |
66 | setb c |
67 | else |
68 | clr c |
69 | end if |
70 | rlc a |
71 | clr clk |
72 | ;acall warten |
73 | next |
74 | setb cs |
75 | setb clk |
76 | ret |
77 | |
78 | lcd_out: |
79 | |
80 | clr rs ;LCD auf Instruktion Register umschalten |
81 | mov a, #80h ;Befehl nach Akku |
82 | acall write_lcd ;Befehl an LCD senden |
83 | |
84 | ;Anzeigen der Spannungen in Zeile 1 |
85 | |
86 | mov a, #'V' |
87 | acall put_char |
88 | mov a, #':' |
89 | acall put_char |
90 | |
91 | mov a, adc_read0 ;Wert nach Akku |
92 | acall hex_to_dec ;Wandeln nach BCD |
93 | |
94 | mov a, r1 |
95 | if a = #0 ;führende 0 löschen |
96 | mov a, #' ' |
97 | else |
98 | add a, #30h |
99 | end if |
100 | acall put_char |
101 | mov a, r2 |
102 | add a, #30h |
103 | acall put_char |
104 | |
105 | mov a, #',' |
106 | acall put_char |
107 | |
108 | mov a, r3 |
109 | add a, #30h |
110 | acall put_char |
111 | |
112 | mov a, #' ' |
113 | acall put_char |
114 | |
115 | mov a, #'V' |
116 | acall put_char |
117 | mov a, #':' |
118 | acall put_char |
119 | |
120 | mov a, adc_read3 ;Wert nach Akku |
121 | acall hex_to_dec ;Wandeln nach BCD |
122 | |
123 | mov a, r1 |
124 | if a = #0 ;führende 0 löschen |
125 | mov a, #' ' |
126 | else |
127 | add a, #30h |
128 | end if |
129 | acall put_char |
130 | mov a, r2 |
131 | add a, #30h |
132 | acall put_char |
133 | |
134 | mov a, #',' |
135 | acall put_char |
136 | |
137 | mov a, r3 |
138 | add a, #30h |
139 | acall put_char |
140 | |
141 | mov a, #c0h |
142 | clr rs |
143 | acall write_lcd |
144 | |
145 | ;Anzeigen der Ströme in Zeile 2 |
146 | |
147 | mov a, #'A' |
148 | acall put_char |
149 | mov a, #':' |
150 | acall put_char |
151 | |
152 | mov a, adc_read1 ;Wert nach Akku |
153 | acall hex_to_dec ;Wandeln nach BCD |
154 | |
155 | mov a, r1 |
156 | add a, #30h |
157 | acall put_char |
158 | mov a, #',' |
159 | acall put_char |
160 | mov a, r2 |
161 | add a, #30h |
162 | acall put_char |
163 | mov a, r3 |
164 | add a, #30h |
165 | acall put_char |
166 | |
167 | mov a, #' ' |
168 | acall put_char |
169 | |
170 | mov a, #'A' |
171 | acall put_char |
172 | mov a, #':' |
173 | acall put_char |
174 | |
175 | mov a, adc_read2 ;Wert nach Akku |
176 | acall hex_to_dec ;Wandeln nach BCD |
177 | |
178 | mov a, r1 |
179 | add a, #30h |
180 | acall put_char |
181 | mov a, #',' |
182 | acall put_char |
183 | mov a, r2 |
184 | add a, #30h |
185 | acall put_char |
186 | mov a, r3 |
187 | add a, #30h |
188 | acall put_char |
189 | |
190 | ret |
191 | |
192 | hex_to_dec: ;Ausgangswert im Akku, Ergebniss in r1,2,3 |
193 | mov b,#10d |
194 | div ab |
195 | mov r3,b |
196 | mov b,#10d |
197 | div ab |
198 | mov r1,a |
199 | mov r2,b |
200 | ret |
201 | |
202 | bcd_to_hex: |
203 | push b ; Save B |
204 | push acc ; Save Value |
205 | anl a,#0f0h ; Keep High Bits |
206 | swap a ; Get To Low |
207 | mov b,#10 ; 10 Decimal |
208 | mul ab ; Multiply |
209 | mov b,a ; Store In B |
210 | pop acc ; Recover BCD Value |
211 | anl a,#00fh ; Keep Low Nybble |
212 | add a,b ; Add In High |
213 | pop b ; Recover B |
214 | ret ; Return To Caller |
215 | |
216 | warten: |
217 | for r0=#01h |
218 | for r5=#3ch ; ~80 us |
219 | next |
220 | next |
221 | ret |
ach ja, es fehlt noch die include Datei fürs LCD, die ist ja für den Mux nicht wichtig. Sollte wer Interesse daran haben, www.elste.org unter Akku-Kapazitätsmessgerät.
Hier ein Bild von dem Teil. P.S. ja ich habe auch einen Login, das Passwort aber nicht immer im Kopf
Hallo Ich arbeite auch gerade mit dem TLC549 Habe da folgendes Problem Ref Spannung ist 2,5 V über LM385 Die Daten die eingelesen werden geben 1,25 V 0-255 1,25 -2,5 V nochmal 0-255 Variabeln sind als unsigned char deklariert und eingelesen werden 8 Bits Hat jemand ne Idee Schönes Wochenende Juppo
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.