Forum: Mikrocontroller und Digitale Elektronik Anregungen / Fragen / Hinweise zu Wecker


von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Nosnibor (Gast)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

Kenne micht mit Mosfets nicht sehr aus, welche Typen würden in frage 
kommen?

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

Wie auch immer, diese Version wird nun angschafft.

Sehe keine Fehler mehr.

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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

von holger (Gast)


Lesenswert?

R9 wird hinter der Diode angeschlossen und nicht davor.

von Matze (Gast)


Lesenswert?

Das wars, danke.
Habs schlicht übersehen.

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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
von Georg G. (df2au)


Lesenswert?

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
von Matze (Gast)


Lesenswert?

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?

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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
}

von Route_66 H. (route_66)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

Route 66 schrieb:
> Array[stelle-1] ist außerhalb des zugewiesenen Bereiches, wenn Du vorher
> stelle=0 setzt.

Danke, das wars.

von Matze (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.