Hallo, Es soll ein Wecker werden, welcher das Pollin-VFD-Display FV651G zur Anzeige nutzt. Controller soll ein Atxmega128A3 sein. Der Wecker soll über ein DCF77-Modul, sowie ein RTC-Modul mit DS3231 immer auf die genaue Zeit eingestellt sein. Der Wecker teilt sich in 2 Platinen auf, in den Wecker selbst, sowie eine Platine welche 12V, 3,3V, 37V sowie die Wecktöne bereitstellt. Der Wecker soll durch 5 Tasten/Schalter bedient werden können. Eine Frage die ich nun z.b. hätte ist ob dass Display nun mit 3,7V oder 100mA geheizt werden soll? Ausserdem kann der heitzstrom eventuell mit FETs besser erzeugt werden. Bin mir aber nicht sicher ob dass auch sinvoll ist. Welche Kritik, Anregungen habt ihr?
Matze schrieb: > Ausserdem kann der heitzstrom eventuell mit FETs besser erzeugt werden. > Bin mir aber nicht sicher ob dass auch sinvoll ist. Ist es. In der jetzigen Schaltung fehlt für T2 der Basiswiderstand. Und T3 und T4 geben sich gegenseitig Basisstrom und leiten beide, solange kein Eingangssignal anliegt.
Kenne micht mit Mosfets nicht sehr aus, welche Typen würden in frage kommen?
Habe nun auch die Versorgungs und Weck Platine fertig. Sie kann durch ein UKW-Radio modul mit TAE5767, einen AD-Wandler+Lautsprecher oder mechanische Glocke wecken. 3,3V macht ein Linearregler, 37V ein Aufwärtswandler, 12V sind Versorgungsspannung.
Nosnibor schrieb: > Ist es. In der jetzigen Schaltung fehlt für T2 der Basiswiderstand. Und > T3 und T4 geben sich gegenseitig Basisstrom und leiten beide, solange > kein Eingangssignal anliegt. Habe die gegentaktendstufe nun mit Mosfets BSS123 / BSS84 aufgebaut. Die Spannungsversorgung der fürs Display wird nun mit Vorwiderständen realisiert. Wird es so funktionieren?
Wie auch immer, diese Version wird nun angschafft. Sehe keine Fehler mehr.
Hallo, Habe nun ein Problem, mit dem 34063. Er regent nicht, wenn ich ihm nur 3V eingangsspg gebe macht er daraus bereits 50V am Ausgang. Last sind 10KOhm Auch hängt die Ausgangsspg viel zu sehr/(fast völlig) von der Eingsngsspg ab. Auch der Ausgangsstrom bestimmt die Ausgangsspg sehr stark. Ist so eine schlechte Regelung bei dem Baustein normal? Habe ihn Dimensioniert mit: http://www.cctools.eu/download/mc/mc34063.html Vin=12V Vout=32V Iout=40mA Vripple=100mV Fmin=70Khz
R9 wird hinter der Diode angeschlossen und nicht davor.
Nun gehts um den DCF77-Empfang, Der Empfänger (von Pollin) gibt wie im Anhang ein beliebiges Signal aus. Habe nun die Versorgung mittels Spule geglättet was aber auch nichts brachte. Gemessen wurde direkt am Ausgang des DCF77-Moduls. Standort ist Ulm. Kann es etwas bringen den Ferritstab zu verlängern?
Matze schrieb: > Kann es etwas bringen den Ferritstab zu verlängern? Eher nicht. Denn Stab, bzw. Spule sind auf die Frequenz abgestimmt. So wie das aussieht, hast du ganz einfach an deinem Ort keinen Empfang. Das kommt vor und ein paar Meter weiter bzw. die Platine/Antenne anders gedreht kann alles ganz anders sein. Häng eine LED an den Ausgang (die 4k7 wirst du verkleinern müssen oder du baust eine Transistorstufe nach, die die LED ansteuert) und mach dich in deiner Wohnung/Werkstatt auf die Suche nach einem geeignetem Ort und/oder Ausrichtung der Antenne, an dem die Platine liegen kann. Wenn du guten Empfang hast, dann blinkt die LED ruhig im Sekundentakt.
:
Bearbeitet durch User
Matze schrieb: > Kann es etwas bringen den Ferritstab zu verlängern Ja, das bewirkt viel. Du verstimmst den Eingangskreis und das Signal wird noch schlechter. Es sieht so aus, als ob du massive Störungen hast (Monitor, Computer, Drucker, ein Schaltnetzteil in der Nähe, ...). Da hilft nur probieren. Und denk dran, dass es nicht nur Störungen über die Leitung gibt. Vieles kommt auch durch die Luft. Dein Wandler läuft auf 70kHz (glaubst du) und wenn dann die Spule dort nicht abgeschirmt ist, kann es schon knallen.
:
Bearbeitet durch User
Die verlängerung war ursprünglich nicht meine Idee, habe gelesen dass es bei jemanden dadurch funktioniert hat. Habe nun mit einer Funkuhr festgestellt das es hier fast nirgends empfang gibt (zumindest nicht in 3 von 4 Räumen). Das Modul funktionierte (in Raum 4) mit direktem Anschluss an ein Labornetzteil. Auf der Schaltung jedoch nicht. Habe schließlich 2*10KOhm an VCC und GND des Moduls angelötet. Dadurch sinkt die Versorgungsspannung auf 2V, der messbare Ripple ligt bei 15mV und das Modul gibt nichts sinvolles aus. Vielleicht brauch man bei uns für DCF77-Empfang wirklich eine sehr viel bessere Antenne? Ist es vielleicht sinvoll dem DCF-Modul einen eigenen 3,3V Spannungsregler zu geben?
Habs nun mit einem eigenen Spannungsregler für das DCF-Modul Ausprobiert aber es brachte nichts. Auch gut wäre es wohl eine geschirmte Drossel für den Auswärtswandler zu nehmen. Habe aber momentan keine andere da. Habe nun den Controller in Betrieb genommen, die Ausgänge richtig konfiguriert und den Externen Quarz als Taktquelle eingestellt. Ausserdem klapt das Multiplexing der Anzeige. Es wird mit Timer1-IRQ Jede ms wird 1 Segment weiter geschaltet, alle 10ms wird die Stromrichtung der Heizung gewechselt. Nun geht es darum einen String auf die Anzeige zu bringen. Kann man ein struct mit 10 elementen als String verwenden? Würde dann selbst einen Zeichensatz definieren, welcher von einer Funktion auf die Ports zur Displayansteuerung umgewandelt wird. Brauche irgendeine Möglichkeit 11 zusammenhängende 16Bit-Elemente zu definieren.
Habe nun ein Problem welches ich mir nicht erklären kann. Das Analog / ()-Symbol der Anzeige wird eingeschaltet wenn man im folgenden Code die Zeile min10++ einkommentiert. Scheinbar wird dadurch das angezeigte Array verändert, ich kann mir aber nicht vorstellen wie das gehen soll? Selbst wenn das Array danach wider komplett auf 0 zurückgeschrieben wird, werden durch min10++ PortA0, B0 und B1 gesetzt, dies aber nur für Display-stelle 10.
1 | #include <avr/io.h> |
2 | #include<avr\interrupt.h> |
3 | |
4 | uint16_t Array[11]; //Global; |
5 | |
6 | int main(void) |
7 | {
|
8 | Array[10]=0; |
9 | Array[9]=0; |
10 | Array[8]=0; |
11 | Array[7]=0; |
12 | Array[6]=0; |
13 | Array[5]=0; |
14 | Array[4]=0; |
15 | Array[3]=0; |
16 | Array[2]=0; |
17 | Array[1]=0; |
18 | Array[0]=0; |
19 | Startup(); |
20 | while(1) |
21 | {
|
22 | ;
|
23 | }
|
24 | }
|
25 | |
26 | void Startup() |
27 | {
|
28 | //---------Externer Oszillator------------------------
|
29 | CLK.PSCTRL = 0x00; |
30 | OSC.CTRL=0x08; |
31 | while(!(OSC.STATUS & 0x08)); |
32 | CCP = 0xD8; |
33 | CLK.CTRL = 0x03; |
34 | //---------Timer0 für 1ms zuer Ausgabe--------------
|
35 | TCC0.CTRLB=0x00; |
36 | TCC0.CTRLC=0x00; |
37 | TCC0.CTRLD=0x00; |
38 | TCC0.CTRLE=0x00; |
39 | TCC0.CNTH=0x83; |
40 | TCC0.CNTL=0x00; |
41 | TCC0.INTCTRLA=0x03; //Hoch priorer Interrupt |
42 | sei(); //Global IRQ enable |
43 | PMIC.CTRL=0x07; |
44 | TCC0.CTRLA=0x01; // Timer Starten Prescaler = 1 |
45 | //----------Timer1 1Sec Uhr-Interrupt---------------------
|
46 | TCC1.CTRLB=0x00; |
47 | TCC1.CTRLC=0x00; |
48 | TCC1.CTRLD=0x00; |
49 | TCC1.CTRLE=0x00; |
50 | TCC1.CNTH=0x85; |
51 | TCC1.CNTL=0xEE; |
52 | TCC1.INTCTRLA=0x02; //Mittel priorer Interrupt |
53 | PMIC.CTRL=0x07; |
54 | TCC1.CTRLA=0x07; // Timer Starten Prescaler = 1024 |
55 | //---------Ein/Ausgänge richtig setzten---------------
|
56 | PORTA.DIRSET=0xc0; |
57 | PORTB.DIRSET=0xf3; |
58 | PORTC.DIRSET=0xff; |
59 | PORTD.DIRSET=0xff; |
60 | PORTE.DIRSET=0xf4; |
61 | |
62 | PORTA.OUTSET=0x00; |
63 | PORTB.OUTSET=0x00; |
64 | PORTC.OUTSET=0x00; |
65 | PORTD.OUTSET=0x02; |
66 | PORTE.OUTSET=0x00; |
67 | }
|
68 | |
69 | ISR(TCC1_OVF_vect) |
70 | {
|
71 | Uhr(0); |
72 | TCC1.CTRLA=0x00; // Timer Stoppen |
73 | TCC1.CNTH=0x85; |
74 | TCC1.CNTL=0xEE; |
75 | TCC1.CTRLA=0x07; // Timer Starten Prescaler = 1024 |
76 | }
|
77 | |
78 | ISR(TCC0_OVF_vect) //Wird jede ms zuer Snazeigeaktualisierung ausgelöst |
79 | {
|
80 | TCC0.CTRLA=0x00; // Timer Stoppen |
81 | TCC0.CNTH=0x83; |
82 | TCC0.CNTL=0x00; |
83 | TCC0.CTRLA=0x01; // Timer Starten Prescaler = 1 |
84 | Ausgabe(Array); |
85 | }
|
86 | |
87 | void Uhr(uint8_t mode) |
88 | {
|
89 | if(mode==0) //Komplette Zeit |
90 | {
|
91 | static uint8_t sek1 = '0' , sek10 = '0' , min1 = '0' , min10 = '0' , std1 = '0' , std10 = '0'; |
92 | sek1++; |
93 | if(sek1==('9'+1)) |
94 | {
|
95 | sek1='0'; |
96 | sek10++; |
97 | if(sek10=='6') |
98 | {
|
99 | sek10='0'; |
100 | min1++; |
101 | if(min1==('9'+1)) |
102 | {
|
103 | min1='0';/* |
104 | min10++; --> Fehler
|
105 |
|
106 | if(min10=='6')
|
107 | {
|
108 | min10='0';
|
109 | std1++;
|
110 | if(std1==('9'+1))
|
111 | {
|
112 | std1='0';
|
113 | std10++;
|
114 | if(std10==('9'+1))
|
115 | {
|
116 | std10='0';
|
117 | }
|
118 | }
|
119 | if(std10=='2' && std1=='4')
|
120 | {
|
121 | std10='0';
|
122 | std1='0';
|
123 | }
|
124 | }*/
|
125 | |
126 | }
|
127 | }
|
128 | }/* |
129 | Array[9]=sek1;
|
130 | Array[8]=sek10;
|
131 | Array[6]=min1;
|
132 | Array[5]=min10;
|
133 | Array[4]=std1;
|
134 | Array[3]=std10;*/
|
135 | }
|
136 | }
|
137 | |
138 | void Ausgabe(uint16_t Array[]) //Rolliert das Display durch |
139 | {
|
140 | static uint8_t stelle = 0; |
141 | stelle++; |
142 | PORTC.OUTCLR=0x7f; |
143 | PORTB.OUTCLR=0xf3; |
144 | PORTA.OUTCLR=0x80; |
145 | switch (stelle-1) |
146 | {
|
147 | case 0: PORTE.OUTTGL = 0x80; |
148 | PORTD.OUTTGL = 0x02; break; |
149 | //Port E.7 = Ein = 1000 0000
|
150 | //Port G.1 = Aus = 0000 0010
|
151 | case 1: PORTE.OUTTGL = 0xC0; break; |
152 | //Port E.6 = Ein = 0100 0000
|
153 | //Port E.7 = Aus = 1000 0000
|
154 | case 2: PORTE.OUTTGL = 0x60; break; |
155 | //Port E.5 = Ein = 0010 0000
|
156 | //Port E.6 = Aus = 0100 0000
|
157 | case 3: PORTE.OUTTGL = 0x30;break; |
158 | |
159 | //Port E.4 = Ein = 0001 0000
|
160 | //Port E.5 = Aus = 0010 0000
|
161 | case 4: PORTE.OUTTGL = 0x10; |
162 | PORTD.OUTTGL = 0x80; break; |
163 | //Port D.7 = Ein = 1000 0000
|
164 | //Port E.4 = Aus = 0001 0000
|
165 | case 5: PORTD.OUTTGL = 0xC0; break; |
166 | //Port D.6 = Ein = 0100 0000
|
167 | //Port D.7 = Aus = 1000 0000
|
168 | case 6: PORTD.OUTTGL = 0x60; break; |
169 | //Port D.5 = Ein = 0010 0000
|
170 | //Port D.6 = Aus = 0100 0000
|
171 | case 7: PORTD.OUTTGL = 0x30; break; |
172 | //Port D.4 = Ein = 0001 0000
|
173 | //Port D.5 = Aus = 0010 0000
|
174 | case 8: PORTD.OUTTGL = 0x18; break; |
175 | //Port D.3 = Ein = 0000 1000
|
176 | //Port D.4 = Aus = 0001 0000
|
177 | case 9: PORTD.OUTTGL = 0x0C; break; |
178 | //Port D.2 = Ein = 0000 0100
|
179 | //Port D.3 = Aus = 0000 1000
|
180 | case 10: PORTD.OUTTGL = 0x06; |
181 | stelle = 0; break; |
182 | //Port D.1 = Ein = 0100 0010
|
183 | //Port D.2 = Aus = 1000 0100
|
184 | }
|
185 | switch(Array[stelle-1]) |
186 | {
|
187 | case 0x30: PORTC.OUTSET=0x70; |
188 | PORTB.OUTSET=0x03; |
189 | PORTA.OUTSET=0x80; |
190 | break; |
191 | case 0x31: PORTC.OUTSET=0x28; |
192 | PORTB.OUTSET=0x02; |
193 | break; |
194 | case 0x32: PORTC.OUTSET=0x61; |
195 | PORTB.OUTSET=0x81; |
196 | PORTA.OUTSET=0x80; |
197 | break; |
198 | case 0x33: PORTC.OUTSET=0x61; |
199 | PORTB.OUTSET=0x02; |
200 | PORTA.OUTSET=0x80; |
201 | break; |
202 | case 0x34: PORTC.OUTSET=0x15; |
203 | PORTB.OUTSET=0xA0; |
204 | break; |
205 | case 0x35: PORTC.OUTSET=0x51; |
206 | PORTB.OUTSET=0x82; |
207 | PORTA.OUTSET=0x80; |
208 | break; |
209 | case 0x36: PORTC.OUTSET=0x51; |
210 | PORTB.OUTSET=0x83; |
211 | PORTA.OUTSET=0x80; |
212 | break; |
213 | case 0x37: PORTC.OUTSET=0x49; |
214 | PORTB.OUTSET=0x90; |
215 | break; |
216 | case 0x38: PORTC.OUTSET=0x71; |
217 | PORTB.OUTSET=0x83; |
218 | PORTA.OUTSET=0x80; |
219 | break; |
220 | case 0x39: PORTC.OUTSET=0x71; |
221 | PORTB.OUTSET=0x82; |
222 | PORTA.OUTSET=0x80; |
223 | break; |
224 | }
|
225 | }
|
Matze schrieb: > case 10: PORTD.OUTTGL = 0x06; > stelle = 0; break; > //Port D.1 = Ein = 0100 0010 > //Port D.2 = Aus = 1000 0100 > } > switch(Array[stelle-1]) Array[stelle-1] ist außerhalb des zugewiesenen Bereiches, wenn Du vorher stelle=0 setzt.
Route 66 schrieb: > Array[stelle-1] ist außerhalb des zugewiesenen Bereiches, wenn Du vorher > stelle=0 setzt. Danke, das wars.
Habe inzwichen eine neue DCF77-Empfangsantenne aus einem 20cm Ferritstab mit 0,3mm Kupferlackdraht gewickelt, sie hat 8,5mh. Wenn ich das Ursprüngliche DCF77-Modul mit dieser Antenne verwende, habe ich (ohne Uhr) immer Empfang, ganz egal wie die Antenne gedreht wird. Es funktioniert sogar Vertikal. Kommt jedoch die Uhr ins Spiel, so muss der Empfänger 1m von ihr entfernt sein. Habe nun folgende Lösungsansätze: 1. Geschirmte Spule verwenden. 2. 55Khz Schaltfrequenz, dadurch sollte allgemein weniger abgestrahlt werden und die sollten weniger beeinträchtigt werden. 3. Snubber-Netzwerke. Gibt es noch weitere Möglichkeiten?
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.