Forum: Mikrocontroller und Digitale Elektronik AVR Uhr wird von INT0 interrupt gestoppt


von Florian (Gast)


Lesenswert?

Hallo,
Ich wollte über eine Uhr mit bauen,welche die Zeit auf einem LCD 
anzeigt.

Ich habe dafür den Timer so eingestellt, dass er jede Sekunde einen 
Interrupt auslöst.
Dann werden die Variablen für die Zeit nach oben gezählt und 
anschließend aus gegeben.

Über den INT0 möchte ich später die beleuchtung des Displays für eine 
bestimmte Zeit anschalten können.

Das funktioniert auch alles, nur leider wird der Interrupt immer wieder 
auf gerufen, solange der Taster gedrückt bleibt. Dadurch läuft dann die 
Uhr nicht mehr weiter.

Eigentlich sollte der Interrupt ja nur auslösen, wenn der Pegel am Pin 
sich verändert. Daher gehe ich davon aus, dass der Taster prellt?

Ich habe deshalb versucht, den das ganze durch ein _delay_ms(20) direkt 
nach dem aufwachen zu verhindern.
Das behebt das Problem aber nicht, wenn der Taster trotzdem länger 
gedrückt wird.

Nach dem drücken des Tasters noch länger zu warten macht ja auch keinen 
Sinn, dann kann ich mir den sleep mode auch gleich sparen.....

Hat jemand eine Idee, wie ich das Problem lösen kann?

Verwendet wird ein ATMEGA32(Intern 1Mhz) auf dem Stk500.

Danke im Voraus!

Schöne Grüße
Florian
1
#include <avr/io.h>
2
#include <avr/sleep.h>
3
#include <avr/interrupt.h>
4
#include <util/delay.h>
5
#include "lcd-routines.h"
6
7
static uint16_t s_0 = 0;
8
static uint16_t s_1 = 5;
9
static uint16_t m_0 = 9;
10
static uint16_t m_1 = 5;
11
static uint16_t h_0 = 3;
12
static uint16_t h_1 = 2;
13
static uint16_t d_0 = 0;
14
static uint16_t d_1 = 0;
15
16
uint8_t light_on = 0;
17
uint16_t light_on_time;
18
19
void reset_clock() {
20
21
  s_0 = 0;
22
  s_1 = 0;
23
  m_0 = 0;
24
  m_1 = 0;
25
  h_0 = 0;
26
  h_1 = 0;
27
  d_0 = 0;
28
  d_1 = 0;
29
}
30
31
int main(void) {
32
33
  TCCR1B |= (1 << WGM12) | (1 << CS11) | (1 << CS10);
34
  TIMSK |= (1 << OCIE1A);
35
  OCR1A = 15625;
36
37
  MCUCR &= ~(1 << ISC01) &~(1 << ISC00);
38
  // Interrupts freigeben
39
  GICR |= (1 << INT0); // externen Interrupt freigeben
40
41
  sei();
42
  DDRB = 0xff;
43
  PORTB = 0xff;
44
  lcd_init();
45
  while (1) {
46
47
    set_sleep_mode(SLEEP_MODE_IDLE);
48
    sleep_mode();
49
    _delay_ms(20); // entprellen
50
    light_on_time++;
51
    if (light_on) {
52
53
      if(light_on_time > 2){
54
        light_on = 0;
55
        PORTB = 0xFF;
56
      }
57
    }
58
  }
59
  return 0;
60
}
61
62
ISR( TIMER1_COMPA_vect)
63
{
64
  s_0++;
65
  if (s_0 >= 10) {
66
    s_0 = 0;
67
    s_1++;
68
    if (s_1 >= 6) {
69
      m_0++;
70
      s_1 = 0;
71
      if (m_0 >= 10) {
72
        m_1++;
73
        m_0 = 0;
74
        if (m_1 >= 6) {
75
          h_0++;
76
          m_1 = 0;
77
          if (h_0 >= 10) {
78
79
            h_1++;
80
            h_0 = 0;
81
          }
82
        }
83
      }
84
    }
85
  }
86
  if (h_1 == 2 && h_0 == 4)
87
    reset_clock();
88
89
  lcd_clear();
90
  lcd_string("    ");
91
  lcd_data(h_1 + 48);
92
  lcd_data(h_0 + 48);
93
  lcd_string(":");
94
  lcd_data(m_1 + 48);
95
  lcd_data(m_0 + 48);
96
  lcd_string(":");
97
  lcd_data(s_1 + 48);
98
  lcd_data(s_0 + 48);
99
  lcd_string("    ");
100
  lcd_setcursor(0, 2);
101
102
103
}
104
105
ISR(INT0_vect)
106
{
107
light_on = 1;
108
  light_on_time = 0;
109
  PORTB = 0b11111110;
110
111
}

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> Das funktioniert auch alles, nur leider wird der Interrupt immer wieder
> auf gerufen, solange der Taster gedrückt bleibt. Dadurch läuft dann die
> Uhr nicht mehr weiter.
>
> Eigentlich sollte der Interrupt ja nur auslösen, wenn der Pegel am Pin
> sich verändert.

Nö.
1
  MCUCR &= ~(1 << ISC01) &~(1 << ISC00);

das ist genau das was du programmiert hast: Interrupts solange LOW-Level 
am Pin anliegt.

von Ingo (Gast)


Lesenswert?

Warum zerlegst du deine Uhrzeit in einer und Zehner und weist den dann 
sogar noch n uint16 zu! Erklär ma! Also man kanns auch umständlich 
machen...

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Ohne mir jetzt den ganzen Code angesehen zu haben:

Florian schrieb:
> MCUCR &= ~(1 << ISC01) &~(1 << ISC00);

MCUCR ist nach einem Reset komplett auf "0".

0 & 0 ergibt 0

Somit steht in ISC01 und ISC00 auch der Wert "0". Das wiederum heißt: 
"The low level of INT0 generates an interrupt request."

von Florian (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> das ist genau das was du programmiert hast: Interrupts solange LOW-Level
> am Pin anliegt.

Oh.. ok habe ich übersehen.
mit   MCUCR |= (1<<ISC01); klappt es :)

Danke!

Ingo schrieb:
> Warum zerlegst du deine Uhrzeit in einer und Zehner und weist den dann
> sogar noch n uint16 zu! Erklär ma! Also man kanns auch umständlich
> machen...

Ich zerlege die Zeit, um die Anzeige auf dem LCD zu ermöglichen, dadurch 
muss ich nur die jeweilige Zahl+48 anzeigen lassen.
Falls es da eine einfachere Methode gibt, nur her damit ;)
Da lasse ich mich gerne eines besseren beleheren.

uint16_t ist natürlich absolut überflüssig, das hatte keinen bestimmten 
Grund. Da reicht ein int8_t auch.



Ich hätte noche eine Frage:

Wie kann man denn das Display dimmen?
Sprich:
Int0 -> Display auf volle Helligkeit
nach 5 Sekunden -> Display auf halbe Helligkeit -> nach 5 Sekunden -> 
Display aus.

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> Ich zerlege die Zeit, um die Anzeige auf dem LCD zu ermöglichen, dadurch
> muss ich nur die jeweilige Zahl+48 anzeigen lassen.
> Falls es da eine einfachere Methode gibt, nur her damit ;)
> Da lasse ich mich gerne eines besseren beleheren.

Des einen Freud ist des anderen Leid.
Auf der einen Seite ist das numerische Bearbeiten der Zeitwerte 
einfacher, wenn man nicht nach Einern und Zehner trennt
1
  Sekunde++;
2
  if( Sekunde == 60 ) {
3
    Sekunde = 0;
4
    Minute++;
5
    if( Minute == 60 ) {
6
      Minute = 0;
7
      Stunde++;
8
      if( Stunde == 24 )
9
        Stunde = 0;
10
    }
11
  }

Insbesondere wenn es dann irgendwann mal darum geht, mit der Zeit dann 
auch was zu machen, wie zb Weckzeit oder damit zu rechnen, ist das schon 
mal eine Vereinfachung.

Auf der anderen Seite muss man dann eben zu Anzeigezwecken die komplette 
Zahl wieder in Zehner und Einer zerlegen.
1
void lcd_zahl( uint8_t zahl )
2
{
3
  uint8_t zehner = zahl / 10;
4
  uint8_t einer = zahl % 10;
5
6
  lcd_data( zehner + '0' );
7
  lcd_data( einer + '0' );
8
}

> Grund. Da reicht ein int8_t auch.

uint8_t.
u
unsigned

> Wie kann man denn das Display dimmen?

helligkeitsanschluss an einen PWM Anschluss vom µC hängen und einen 
Timer für PWM aufsetzen.

von Karl H. (kbuchegg)


Lesenswert?

Im übrigen gehört die LCD ANzeige aus der ISR raus.
Denn der Timer und damit die Zeit, muss auch dann weiterlaufen, wenn das 
LCD was anderes anzeigen soll. Daher muss Zeitweiterschaltung und 
Anzeige voneinander getrennt werden.

von Florian (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Im übrigen gehört die LCD ANzeige aus der ISR raus.
> Denn der Timer und damit die Zeit, muss auch dann weiterlaufen, wenn das
> LCD was anderes anzeigen soll. Daher muss Zeitweiterschaltung und
> Anzeige voneinander getrennt werden.

Soll ich den Anzeige Code also auch in die while(1) schleife 
verschieben?
Ich dachte, dass es nicht zum Problem wird, wenn das in der ISR abläuft, 
da diese ja nur jede Sekunde aufgerufen wird und das Schreiben auf das 
Display im ms Bereich abläuft(weit weniger als 1 Sekunde dauert).

Karl Heinz Buchegger schrieb:
> Insbesondere wenn es dann irgendwann mal darum geht, mit der Zeit dann
> auch was zu machen, wie zb Weckzeit oder damit zu rechnen, ist das schon
> mal eine Vereinfachung.

Ja das stimmt. Werde das mal so umbauen :)

Mit nur einer Variable wird das nicht klappen oder?

Idee:
Variable jede Sekunde nach oben Zählen und dann für die Anzeige wieder 
zerlegen. Aber das dürfte schon daran scheitern, dass der Wert zu groß 
wird.
1s*60*60*24 = 86400s/d und ein uint16_t geht ja nur bis 65535.

Wenn man auf die Sekunden Anzeige verzichten kann sollte es allerdings 
möglich sein oder? 60min*24 = 1440min/d

Kann jemand abschätzen wie genau eine Uhr sein kann, wenn man den uC nur 
mit dem Internen Oszillator betreibt und nicht mit einem Quarz?
Ist die Uhr genauer, wenn ich jede Sekunde einen Interrupt habe oder 
wenn der Interrupt nur jede Minute ausgelöst wird?

Für das Auge wird wohl die Minute genauer sein, da man Abweichungen im 
Sekunden Bereich dann nicht sofort sieht. Aber wie ist es wirklich?
Der Stromverbrauch sollte sich aber dadurch drastisch reduzieren lassen, 
da der Controller dann wesentlich mehr Zeit im sleep mode verbringt.


Danke für die Antworten :)

von katastrophenheinz (Gast)


Lesenswert?

>Variable jede Sekunde nach oben Zählen und dann für die Anzeige wieder
>zerlegen. Aber das dürfte schon daran scheitern, dass der Wert zu groß
>wird.
>1s*60*60*24 = 86400s/d und ein uint16_t geht ja nur bis 65535.
Wieso das? Karl Heinz hat doch oben schon skizziert, wie es gehen 
könnte.

>Kann jemand abschätzen wie genau eine Uhr sein kann, wenn man den uC nur
>mit dem Internen Oszillator betreibt und nicht mit einem Quarz?
Interner Oszillator wesentlich ungenauer als ext. Quarz, aber auch der 
führt noch zu einigen Sekunden Abweichungen pro Tag. guckst du hier:
Beitrag "Genauigkeit eines Quarzoszillators"

>Ist die Uhr genauer, wenn ich jede Sekunde einen Interrupt habe oder
>wenn der Interrupt nur jede Minute ausgelöst wird?
Abweichung ist relativ, d.h. unabhängig von Sekunde oder Minute oder 
Tag, immer beispielsweise 1 Promill.
Auf den Energieverbrauch hat Interrupt pro Sekunde vs. Interrupt pro 
Minute kaum Auswirkungen, denn der Interrupt ist -wenn du ihn denn kurz 
gemacht hast- in einigen µs durch. Da kannst du deutlich mehr holen, 
wenn du einen tieferen Sleep-Mode als Idle wählst, z.b. In deinem Fall 
Power-Save. Das wiederum setzt voraus, daß du Timer2 im Async-Mode mit 
einem Uhrenquarz betreibst. Die dazu verwendeten 32.768kHz-Uhrenquarze 
sind zudem etwas genauer als Standard-Quarze. Aber auch hiermit kommst 
du für einen genaue Anzeige nicht um eine externe Zeitbasis drumrum. 
Standard: DCF77-Empfänger. Gibt es auch fertig als Modul zu kaufen beim 
Elektrohöker deiner Wahl.

Gruss, Heinz

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:
>
> Für das Auge wird wohl die Minute genauer sein, da man Abweichungen im
> Sekunden Bereich dann nicht sofort sieht. Aber wie ist es wirklich?
> Der Stromverbrauch sollte sich aber dadurch drastisch reduzieren lassen,
> da der Controller dann wesentlich mehr Zeit im sleep mode verbringt.

Drastisch ist übertrieben.

Und irgendwann ist dann auch ein Punkt erreicht, an dem zwar der µC so 
gut wie keinen Strom mehr verbraucht, die Lebensdauer deiner 
Stromversorgung aber von der Selbstentladung der Akkus dominiert wird.

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:
> Karl Heinz Buchegger schrieb:
>> Im übrigen gehört die LCD ANzeige aus der ISR raus.
>> Denn der Timer und damit die Zeit, muss auch dann weiterlaufen, wenn das
>> LCD was anderes anzeigen soll. Daher muss Zeitweiterschaltung und
>> Anzeige voneinander getrennt werden.
>
> Soll ich den Anzeige Code also auch in die while(1) schleife
> verschieben?
> Ich dachte, dass es nicht zum Problem wird, wenn das in der ISR abläuft,
> da diese ja nur jede Sekunde aufgerufen wird und das Schreiben auf das
> Display im ms Bereich abläuft(weit weniger als 1 Sekunde dauert).

Solange du an deinem Programm nichts mehr änderst oder hinzufügst, ist 
das auch ok.
Aber mal eine kurze Zwischenfrage: Wie stellst du eigentlich die Uhr 
ein? Könnte es wohl sein, dass du dann ein Problem kriegst, wenn sowohl 
im Einstellcode als auch in der ISR auf das LCD zugegriffen wird? Was 
wird wohl passieren, wenn du in der Hauptschleife einen String ausgibst, 
der von einem ISR Aufruf unterbrochen wird, der dann seinerseits wieder 
etwas aufs LCD schreibt? (Und nebenbei bemerkt dann auch noch die 
Anzeige löscht)

von Karl H. (kbuchegg)


Lesenswert?

> 1s*60*60*24 = 86400s/d und ein uint16_t geht ja nur bis 65535.

und wie hoch geht ein uint32_t ?

> Kann jemand abschätzen wie genau eine Uhr sein kann, wenn man
> den uC nur mit dem Internen Oszillator betreibt und nicht mit
> einem Quarz?

Der intene Oszillator ist temperaturabhängig.
Das ist zwar ein Quarz auch, aber wesentlich weniger.

Quarze nimmt man deshalb, weil ihre Temperaturstabilität besser ist.

Natürlich kann man jeden Oszillator (egal welcher) auf das 1/100-tel 
Herz genau ausmessen und das im Programm berücksichtigen. Nur was hilft 
dir das, wenn der Oszillator um bis zu 50Hz (Hausnummer) schneller wird, 
nur weil die Heizperiode im Winter anfängt und deine Frau/Freundin es 
gerne kuschelig warm hat?

Such mal im Wiki nach dem Artikel
AVR - Die genaue Sekunde / RTC
PeDa hat da beschrieben, wie man eine genau gehende Uhr mit einem QUarz 
macht, indem man die exakte Quarzfrequenz aus der Gangabweichung 
ermittelt und im Programm berücksichtigt.

von Peter D. (peda)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Auf der anderen Seite muss man dann eben zu Anzeigezwecken die komplette
> Zahl wieder in Zehner und Einer zerlegen.

Man darf aber auch itoa() oder sprintf() benutzen.
Auch bei 1MHz ist das für den AVR nur ein Klacks.

von Florian (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Solange du an deinem Programm nichts mehr änderst oder hinzufügst, ist
> das auch ok.
> Aber mal eine kurze Zwischenfrage: Wie stellst du eigentlich die Uhr
> ein? Könnte es wohl sein, dass du dann ein Problem kriegst, wenn sowohl
> im Einstellcode als auch in der ISR auf das LCD zugegriffen wird? Was
> wird wohl passieren, wenn du in der Hauptschleife einen String ausgibst,
> der von einem ISR Aufruf unterbrochen wird, der dann seinerseits wieder
> etwas aufs LCD schreibt? (Und nebenbei bemerkt dann auch noch die
> Anzeige löscht)

Das stimmt, wäre wirklich sinnvoller das dann an einer anderen stelle 
aus zugeben. (vor dem aktivieren des sleep modes?)

katastrophenheinz schrieb:
> Standard: DCF77-Empfänger. Gibt es auch fertig als Modul zu kaufen beim
> Elektrohöker deiner Wahl.

Da wäre  dann auch eine Datumsangabe mit dabei oder?
Das wäre dann vermutlich die einfachste Lösung.
Wie sieht es denn mit dem Empfang dieser Teile aus? haben die an "jeder" 
Stelle Empfang? Oder muss die Uhr dann möglichst am Fenster Platziert 
werden o.ä?
Muss der Empfänger außerhalb eines Gehäuses angebracht werden, oder kann 
ich ihn auch mit ins Gehäuse einbauen? (Plastik Gehäuse)

Karl Heinz Buchegger schrieb:
> Such mal im Wiki nach dem Artikel
> AVR - Die genaue Sekunde / RTC
> PeDa hat da beschrieben, wie man eine genau gehende Uhr mit einem QUarz
> macht, indem man die exakte Quarzfrequenz aus der Gangabweichung
> ermittelt und im Programm berücksichtigt.

Danke für den Link, werde ich mir mal ansehen :)

Peter Dannegger schrieb:
> Karl Heinz Buchegger schrieb:
>> Auf der anderen Seite muss man dann eben zu Anzeigezwecken die komplette
>> Zahl wieder in Zehner und Einer zerlegen.
>
> Man darf aber auch itoa() oder sprintf() benutzen.
> Auch bei 1MHz ist das für den AVR nur ein Klacks.

Danke für den Tipp, habe beides bisher nicht benutzt, werde ich mir auch 
ansehen.

Zur Not kann die Frequenz ja auch erhöht werden. Das sollte außer einem 
höheren Stromverbrauch ja keinen Nachteil bringen oder?

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> Danke für den Tipp, habe beides bisher nicht benutzt, werde ich mir auch 
ansehen.
1
  sprintf( Buffer, "%02d:%02d - %02d", Stunden, Minuten, Sekunden );
2
3
  lcd_setcursor(0, 2);
4
  lcd_string( Buffer );


> Zur Not kann die Frequenz ja auch erhöht werden.

Vergiss es.
Selbst bei 1Mhz ist dein µC so schnell, dass eine derartige Ausgabe für 
ihn ein Klacks ist. 1Mhz - das sind über den Daumen 800-TAUSEND 
Operationen in der Sekunde. Was denkst du was es für eine Rolle spielt, 
ob eine Ausgabe da jetzt 400 oder 500 Operationen benötigt?
Dein Hauptproblem ist die zeitliche Konstanz der Taktfrequenz unter 
allen denkbaren Umständen. Das ist DAS Kriterium für eine Uhr. Alles 
andere sind Nebenschauplätze.

von katastrophenheinz (Gast)


Lesenswert?

>Da wäre  dann auch eine Datumsangabe mit dabei oder?
Ja, und noch mehr.

>Das wäre dann vermutlich die einfachste Lösung.
Kommt drauf an, bei den einfachen DCF77-Modulen musst du aus dem 
demodulierten Signal die Nutzinformation selbst zusammenbasteln. Es gibt 
aber tonnenweise Beispielcode hier im Forum. Die komplexeren Module 
können das von sich aus, aber die gehen dann schon in Richtung komplette 
Funkuhr.

>Wie sieht es denn mit dem Empfang dieser Teile aus? haben die an "jeder"
>Stelle Empfang? Oder muss die Uhr dann möglichst am Fenster Platziert
>werden o.ä?
Wenn du nicht gerade im Stahlbetonbunker wohnst, dann sollte das gehen.
Störender sind die Felder, die dein Home-Equipment ausstrahlt. Also 
vielleicht nicht direkt neben das Fernost-Schaltnetzteil stellen.

>Muss der Empfänger außerhalb eines Gehäuses angebracht werden, oder kann
>ich ihn auch mit ins Gehäuse einbauen? (Plastik Gehäuse)
Plastik kein Problem, solange kein Störsender mit drinsteckt, s.oben.

Gruss, Heinz

von Florian (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Dein Hauptproblem ist die zeitliche Konstanz der Taktfrequenz unter
> allen denkbaren Umständen. Das ist DAS Kriterium für eine Uhr. Alles
> andere sind Nebenschauplätze.

Ich werde es erst einmal mit dem Internen timer laufen lassen, und dann 
bei der nächsten gelegenheit einen Uhrenquarz mit bestellen.
Dass sollte ja dann keine größere Umstellung sein oder?
(von timer1 auf 2 wechseln und dort Prescaler etc anpassen)

katastrophenheinz schrieb:
> Da wäre  dann auch eine Datumsangabe mit dabei oder?
> Ja, und noch mehr.
> Muss ich mal nachlesen, was da alles noch drin steckt :)

>>Das wäre dann vermutlich die einfachste Lösung.
> Kommt drauf an, bei den einfachen DCF77-Modulen musst du aus dem
> demodulierten Signal die Nutzinformation selbst zusammenbasteln. Es gibt
> aber tonnenweise Beispielcode hier im Forum. Die komplexeren Module
> können das von sich aus, aber die gehen dann schon in Richtung komplette
> Funkuhr.
>
Wie kann ich denn zwischen den einfachen und komplexen unterscheiden?
Das komplexe demoudliert das Signal von alleine? Wie kommen dann die 
daten auf meinen uC?


>>Wie sieht es denn mit dem Empfang dieser Teile aus? haben die an "jeder"
>>Stelle Empfang? Oder muss die Uhr dann möglichst am Fenster Platziert
>>werden o.ä?
> Wenn du nicht gerade im Stahlbetonbunker wohnst, dann sollte das gehen.
Das ist schonmal gut :D

> Störender sind die Felder, die dein Home-Equipment ausstrahlt. Also
> vielleicht nicht direkt neben das Fernost-Schaltnetzteil stellen.
>
Wird beachtet ;)


Ich denke, ich werde das ganze vorerst mal mit einem Uhrenqaurz 
aufbauen, später dann evtl mal mit einem DCFF77 Modul.
Allerdings ist die Lösung mit Quarz deutlich günstiger(ca 1€) im 
Gegensatz zum DCFF77 Modul(10€ aufwärts).

Das Datum, der Wochentag und ob gerade ein Schaltjahr ist, das 
Umschalten zwischen Sommer und Winter Zeit würe sich über das DCF77 sehr 
einfach lösen lassen.
Mit einem Quarz sollte das doch aber auch möglich sein, sofern die Uhr 
einmal eignestellt ist oder?
Wird zwar vom Programmieraufwand wesentlich größer, aber spart bei jeder 
Zukünfitgen Uhr 10 € :P


Außerdem ist es eine gute Übung ;)


Ich werde jetzt erst einmal versuchen, die Uhr mit Alarmfunktion und die 
Datumsanzeige zu erstellen, später soll dann noch ein Temperatursensor 
dazu kommen.


Oder unterschätze ich den Aufwand, der nötig sein wird um die Uhr mit 
Datumsanzeige zu Programmieren und es wäre sinnvoller ein DCF77 Modul zu 
verwenden?




Danke für eure Antworten!
Ihr habt mir wirklich super weiter geholfen.

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> Ich werde es erst einmal mit dem Internen timer laufen lassen, und dann
> bei der nächsten gelegenheit einen Uhrenquarz mit bestellen.

Wozu?
Die genaue Frequenz musst du auch bei einem Uhrenquarz feststellen. Der 
schwingt auch nicht aus dem Stand heraus auf exakt 32768.0000000000 hZ, 
sondern muss mit Kondensatoren gezogen (also abgeglichen) werden, bzw. 
man muss die exakte Frequenz aus der Abweichung errechnen und per 
Programm berücksichtigen.

> Dass sollte ja dann keine größere Umstellung sein oder?
> (von timer1 auf 2 wechseln und dort Prescaler etc anpassen)

Das du dich da mal nicht täuscht. An einem Uhrenquarz am Timer 2 sind 
Leute schon verzweifelt. :-)

von katastrophenheinz (Gast)


Lesenswert?

>Dass sollte ja dann keine größere Umstellung sein oder?
Wie Karl Heinz schon sagt: im Asynchron-Modus musst du einige 
Besonderheiten beim Zugriff beachten, ist aber kein Hexenwerk, sondern 
steht alles im Manual.
Hinsichtlich Genauigkeit bringt der Uhrenquarz an Timer2 nur wenig, 
diese Konstellation bringt aber deutliche Vorteile hinsichtlich 
Energieverbrauch, weil du statt IDLE den POWER-SAVE Sleep-Modus nehmen 
kannst. Idle (3V3/1Mhz) = 250µA; Power Save (3V3) = 10µA lt. Datenblatt

>Wie kann ich denn zwischen den einfachen und komplexen unterscheiden?
>Das komplexe demoudliert das Signal von alleine? Wie kommen dann die
>daten auf meinen uC?
Die einfachen haben einen Ausgang, an dem das demodulierte Funksingal 
ausgegeben wird ( kurzer oder langer Puls ), es ist an dir aus den 
Pulsen und der aktuellen Sekunde die Nutzdaten ( Datum, Uhrzeit, etc ) 
zusammenzubasteln. Glücklicherweise haben das bereits Heerscharen von 
Programmierern vor dir getan und du kannst auf vorhandenen Quellcode 
zugreifen.
Die komplexeren Module machen diese Auswertung von sich aus und haben 
ein Interface( z.B. i2c, Seriell ), über das du die einzelnen 
Datumskomponenten direkt abfragen kannst.

>Oder unterschätze ich den Aufwand, der nötig sein wird um die Uhr mit
>Datumsanzeige zu Programmieren und es wäre sinnvoller ein DCF77 Modul zu
>verwenden?
Versuchs erstmal ohne DCF77-Modul, guck wie weit du durch Anpassungen 
mit der Genauigkeit kommst. Wenn für deinen Anspruch zu ungenau, dann 
DCF77-Modul dazu.
Wenn Energieverbrauch ein Thema, dann Uhrenquarz an Timer2 und 
Power-Save Sleepmode, sonst belass es bei dem Standard Quarz und 
Idle-Sleepmode. Und ein neuerer AVR-Typ mit P hinter der Typbezeichnung 
bringt nochmal was wg. Energieverbrauch

Gruss, Heinz

von Florian (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Florian schrieb:
>
>> Ich werde es erst einmal mit dem Internen timer laufen lassen, und dann
>> bei der nächsten gelegenheit einen Uhrenquarz mit bestellen.
>
> Wozu?
> Die genaue Frequenz musst du auch bei einem Uhrenquarz feststellen. Der
> schwingt auch nicht aus dem Stand heraus auf exakt 32768.0000000000 hZ,
> sondern muss mit Kondensatoren gezogen (also abgeglichen) werden, bzw.
> man muss die exakte Frequenz aus der Abweichung errechnen und per
> Programm berücksichtigen.
>
Um die Uhr über lange Zeit möglichst genau zu machen. Der Uhrenquarz 
schwankt doch weniger in der Frequenz, wenn die Temperatur sich ändert.
Außerdem kann man dann einen tieferen Schlaf modus nutzen, da der 
Interne Oszillator ja nich dauernd laufen muss.
Und schaden kann es ja auf keinen Fall ;)

>> Dass sollte ja dann keine größere Umstellung sein oder?
>> (von timer1 auf 2 wechseln und dort Prescaler etc anpassen)
>
> Das du dich da mal nicht täuscht. An einem Uhrenquarz am Timer 2 sind
> Leute schon verzweifelt. :-)

Na hoffentlich gehöre ich nicht dazu :P

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> Um die Uhr über lange Zeit möglichst genau zu machen. Der Uhrenquarz
> schwankt doch weniger in der Frequenz, wenn die Temperatur sich ändert.

Darauf würde ich nicht wetten.
Ein Uhrenquarz jat den Charme, dass er mit seinen 32768Hz eine 2-er 
POtenz ist und als solcher wunderbar in diskret aufgebaute Teilerketten 
eingesetzt werden kann.
Ok, vielleicht ist er ein wenig unempfindlicher, was die temperatur 
angeht. Davon versteh ich nicht viel. Meine letzte Uhr hängt an der 50Hz 
Netzfrequenz, dann interessiert mich das alles herzlich wenig, weil sich 
die Stromlieferanten um die genaue Frequenz kümmern und nachführen :-)

> Außerdem kann man dann einen tieferen Schlaf modus nutzen, da der
> Interne Oszillator ja nich dauernd laufen muss.
> Und schaden kann es ja auf keinen Fall ;)

das ist ein Argument.
Aber schon angesprochen: es ist letzten Endes ziemlich uninteressant, 
wenn dein µC theoretisch 10 Jahre lang aus der Batterie/Akku laufen 
könnte, sich der Akku aber nach 2 Jahren selbst bis auf 0 entladen hat. 
:-)


> Na hoffentlich gehöre ich nicht dazu :P

Na, ja.
Wenn du dir sorgen um die programmtechnische Datumsweiterschaltung 
machst :-)

von Florian (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Florian schrieb:
>
>> Um die Uhr über lange Zeit möglichst genau zu machen. Der Uhrenquarz
>> schwankt doch weniger in der Frequenz, wenn die Temperatur sich ändert.
>
> Darauf würde ich nicht wetten.
> Ein Uhrenquarz jat den Charme, dass er mit seinen 32768Hz eine 2-er
> POtenz ist und als solcher wunderbar in diskret aufgebaute Teilerketten
> eingesetzt werden kann.
> Ok, vielleicht ist er ein wenig unempfindlicher, was die temperatur
> angeht. Davon versteh ich nicht viel. Meine letzte Uhr hängt an der 50Hz
> Netzfrequenz, dann interessiert mich das alles herzlich wenig, weil sich
> die Stromlieferanten um die genaue Frequenz kümmern und nachführen :-)
>
Ich werde es erst einmal mit dem Internen Oszillator aufbauen, wird mir 
das zu ungenau muss halt was anderes her :D

Das mit der Netzfrequenz läuft wie ab?
230V über einen Trafo auf 5V und dann die 50Hz als externen Timer 
nutzen?

Hat natürlich den Vorteil, dass man das Problem mit der Stromversorgung 
Automatisch mit löst. Und um Sleep modes braucht man sich auch keinen 
Kopf machen.

>> Außerdem kann man dann einen tieferen Schlaf modus nutzen, da der
>> Interne Oszillator ja nich dauernd laufen muss.
>> Und schaden kann es ja auf keinen Fall ;)
>
> das ist ein Argument.
> Aber schon angesprochen: es ist letzten Endes ziemlich uninteressant,
> wenn dein µC theoretisch 10 Jahre lang aus der Batterie/Akku laufen
> könnte, sich der Akku aber nach 2 Jahren selbst bis auf 0 entladen hat.
> :-)
>
Ja das stimmt natürlich auch wieder :D
Man macht sich immer viel zu viele Gedanken ;)

>> Na hoffentlich gehöre ich nicht dazu :P
>
> Na, ja.
> Wenn du dir sorgen um die programmtechnische Datumsweiterschaltung
> machst :-)

Die Datumsweiterschaltung ist nicht das Problem ;) immer wenn die Uhr 
bei 00:00:00 an kommt, den tag +1 ;)
Komplizierter wird das Ganze dann mit dem Schaltjahr ;) oder wenn man 
beispielsweise angezeigt haben möchte, wann Ostern ist. Das ist ja 
abhängig vom Mond? oder so :D auf jeden Fall verschiebt es sich jedes 
Jahr :D
Darum mache ich mir eher Sorgen :D

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> Komplizierter wird das Ganze dann mit dem Schaltjahr ;)

ist eine einfache Abfrage

> oder wenn man
> beispielsweise angezeigt haben möchte, wann Ostern ist.

Dafür hat C.F. Gauss eine berühmte Berechnungsmethode gefunden.
http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel

von Wolfgang H. (frickelkram)


Lesenswert?

Florian schrieb:
> Karl Heinz Buchegger schrieb:
>> Florian schrieb:
>>
>>> Um die Uhr über lange Zeit möglichst genau zu machen. Der Uhrenquarz
...
> Die Datumsweiterschaltung ist nicht das Problem ;) immer wenn die Uhr
> bei 00:00:00 an kommt, den tag +1 ;)
> Komplizierter wird das Ganze dann mit dem Schaltjahr ;) oder wenn man
> beispielsweise angezeigt haben möchte, wann Ostern ist. Das ist ja
> abhängig vom Mond? oder so :D auf jeden Fall verschiebt es sich jedes
> Jahr :D
> Darum mache ich mir eher Sorgen :D

wie sieht es dann mit Normalzeit/Sommerzeit Umschaltung aus? Das macht 
Dir der DCF77 auch ...

von Thomas E. (thomase)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Florian schrieb:
>
>> Komplizierter wird das Ganze dann mit dem Schaltjahr ;)
>
> ist eine einfache Abfrage
>
>> oder wenn man
>> beispielsweise angezeigt haben möchte, wann Ostern ist.
>
> Dafür hat C.F. Gauss eine berühmte Berechnungsmethode gefunden.
> http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel


Ist auch nur ein Vierzeiler.
1
        int Jahr = 2013;
2
        int Monat = 3;
3
        int Ostern;
4
5
        Ostern = (21 + ((19 * (Jahr % 19) + (15 + (3 * (Jahr / 100) + 3) / 4 - (8 * (Jahr / 100) + 13) / 25)) % 30) - ((((19 * (Jahr % 19) + (15 + (3 * (Jahr / 100) + 3) / 4 - (8 * (Jahr / 100) + 13) / 25)) % 30) + (Jahr % 19) / 11) / 29)) + (7 - ((21 + ((19 * (Jahr % 19) + (15 + (3 * (Jahr / 100) + 3) / 4 - (8 * (Jahr / 100) + 13) / 25)) % 30) - ((((19 * (Jahr % 19) + (15 + (3 * (Jahr / 100) + 3) / 4 - (8 * (Jahr / 100) + 13) / 25)) % 30) + (Jahr % 19) / 11) / 29)) - (7 - (Jahr + Jahr / 4 + (2 - (3 * (Jahr / 100) + 3) / 4)) % 7)) % 7);
6
        if (Ostern > 31)
7
        {
8
          Ostern -= 31;
9
          Monat = 4;
10
        }

mfg.

von Florian (Gast)


Lesenswert?

Thomas Eckmann schrieb:
>> Dafür hat C.F. Gauss eine berühmte Berechnungsmethode gefunden.
>> http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel
>
> Ist auch nur ein Vierzeiler.

Na dann ist das doch gar nichtso wild, wie ich dachte....
Danke :)

Wolfgang Heinemann schrieb:
> wie sieht es dann mit Normalzeit/Sommerzeit Umschaltung aus? Das macht
> Dir der DCF77 auch ...

Deswegen überlege ich ja, ob es sich wirklich lohnt das alles selbst zu 
programmieren, oder eben den DCF77 zu verwenden.
Ich werde mal sehen, wie weit ich mit dem Programm komme, falls es zu 
umfangreich wird, kann ich ja immer noch auf den DCF77 zurück greifen.
Dann habe ich zumindest den Code für eine Uhr und ein paar andere Sachen 
auf dem Rechner. Das kann man ja immer brauchen ;)


Hat jemand sonst noch Ideen, was man in so einem Projekt unterbringen 
kann?
Bisher schwebt mir folgendes vor:
- Uhrzeit
- Datum
- Temperatur
- Bestimmte Tage(Ostern, Weihnachten, evtl Geburtstage)

Das ganze soll dann auf einem lcd ausgegeben werden.
ob 2x16 oder 4x20 weiß ich noch nicht, das wird letztenendes vom Umfang 
abhängen. Das ganze soll dann in etwas so aussehen:
 ----------------
|07:58:30    25°C|
|DO.12.Sep 2013  |
|Ostern o.ä.     |
|Geburstage o.ä  |
 ----------------
Bein einem 2*16 Display, muss man dann per knopfdruck zwischen den 
Zeilen 1-2 und 3-4 umschalten. Dadurch wäre dann auch noch mehr Platz 
für andere Dinge wie ....?
Habe mir das Vorgestellt, wie eine Art Menü. Man drückt eine Taste, nach 
dem aufwachen wird abgefragt, ob diese gedrückt ist und wenn ja, dann 
wird weiter geschaltet (Uhrzeit+Datum)->(Feiertage+Geburtsage)->(weitere 
Funktionen)->(etc)

von Wolfgang H. (frickelkram)


Lesenswert?

Hi Florian,

Florian schrieb:
> Thomas Eckmann schrieb:
...
> Hat jemand sonst noch Ideen, was man in so einem Projekt unterbringen
> kann?

da Du die Hintergrundbeleuchtung dimmen möchtest, vermute ich mal das 
die Uhr im Schlafzimmer, neben dem Bett stehen soll.
Dann baue doch noch eine Erkennung der REM-Schlafphasen ein. Dann kannst 
Du einen Wecker programmieren der Dich "sanft" aus dem Schlaf holt ...

von Florian (Gast)


Lesenswert?

Wolfgang Heinemann schrieb:
> da Du die Hintergrundbeleuchtung dimmen möchtest, vermute ich mal das
> die Uhr im Schlafzimmer, neben dem Bett stehen soll.
> Dann baue doch noch eine Erkennung der REM-Schlafphasen ein. Dann kannst
> Du einen Wecker programmieren der Dich "sanft" aus dem Schlaf holt ...

Die Idee finde ich gut, danke dafür. :)
Habe mir das gerade mal bei Wikipedia an gesehen, Sensoren, die die 
Gehirnaktivität messen, bekommt man wohl nicht ohne weiteres. ;)
Die zweite Methode über einen Bewegungssensor wäre vermutlich nicht 
schlecht. Allerdings habe ich nicht unbedingt Lust mit einem Armband zu 
schlafen, dass dann am Wecker hängt und unter Verwendung von 
Standardbauformen, wird das auch nicht sonderlich komfortabel werden :D

Hat jemand so etwas schon mal gemacht?
Kann man den Sensor auch am Bett anbringen und so Bewegungen messen?
Da sehe ich allerdings ein weiteres Problem, wenn man nicht alleine 
schläft, erkennt der Sensor nicht, von wem die Bewegung kommt und weckt 
einen dann in der Tiefschlafphase, weil jemand anderes sich gerade 
bewegt hat.

von Wolfgang H. (frickelkram)


Lesenswert?

Hi Florian,

Florian schrieb:
> Wolfgang Heinemann schrieb:
...
> Hat jemand so etwas schon mal gemacht?

ich habe schon mehrere Artikel im Internet gesehen, weis aber nicht mehr 
wo. Suche doch mal nach "DIY REM"

> Kann man den Sensor auch am Bett anbringen und so Bewegungen messen?

Eine Lösung hatte einen Sensor in das Kopfkissen gebaut. Das schien mir 
Praktikabel. Eine andere Lösung basierte auf einer Brille. In der Brille 
war eine LED und ein Lichsensor. Durch die Augenlider hindurch wurden 
damit die Augenbewegungen gemessen ...

> Da sehe ich allerdings ein weiteres Problem, wenn man nicht alleine
> schläft, erkennt der Sensor nicht, von wem die Bewegung kommt und weckt
> einen dann in der Tiefschlafphase, weil jemand anderes sich gerade
> bewegt hat.

Das mag sein ... bietet aber viel Raum für Experimente ;-)

Wenn Du schon die Beleuchtung dimmen möchtest, dann spendiere auch noch 
einen LDR, damit das automatisch geht. Ein IR-Abstandssensor (oder PIR) 
könnte Bewegungen erfassen und Du könntest mit einem "Wink" die 
Beleuchtung ein schalten ... kein Tastensuchen im Dunkeln.
Ein Temperatursensor könnte Dir beim Aufstehen die Außentemperatur 
verraten.
Die Farbe der Hintergrundbeleuchtung könntest Du mit RGB-Leds ändern und 
damit eine schöne ambiente Beleuchtung bauen.
MP3-Player, und Internetradio sind vielleicht auch nett ...

Ach, baue doch einfach direkt ein Android Gerät auf, dann kannst Du auch 
Apps drauf laden ;-)

von katastrophenheinz (Gast)


Lesenswert?

Hi,
bring doch erstmal den Umfang aus FeatureRelease V1.0 zum fliegen. D.h. 
Uhrzeit auf Quarzbasis ausreichend genau. Wenn das dann fliegt hast du 
auch Anhaltspunkte, wieviel Aufwand du in die hier mal eben kurz 
entworfenen FeatureReleases V2.0 bis VEsoterik.0 stecken musst.

>Habe mir das Vorgestellt, wie eine Art Menü. Man drückt eine Taste, nach
>dem aufwachen wird abgefragt, ob diese gedrückt ist und wenn ja, dann
>wird weiter geschaltet (Uhrzeit+Datum)->(Feiertage+Geburtsage)->(weitere
>Funktionen)->(etc)
Schon mal über einen Dreh/Drücksteller nachgedacht? Damit kannst du dann 
z.B. deine variablen Daten einfach und intuitiv eingeben ( Geburtstage 
o.ä. ), oder aauch durch mehr als 4 anzuzeigende Zeilen scrollen. Aber 
auch der fällt definitiv erst ins Release V2.0.

Gruss, Heinz

von Florian (Gast)


Lesenswert?

Wolfgang Heinemann schrieb:
> Eine Lösung hatte einen Sensor in das Kopfkissen gebaut. Das schien mir
> Praktikabel. Eine andere Lösung basierte auf einer Brille. In der Brille
> war eine LED und ein Lichsensor. Durch die Augenlider hindurch wurden
> damit die Augenbewegungen gemessen ...

Eine Brille ist auch nicht besser :D
Aber die Kopfkiseen Methode sollte ok sein.

Wolfgang Heinemann schrieb:
> Wenn Du schon die Beleuchtung dimmen möchtest, dann spendiere auch noch
> einen LDR, damit das automatisch geht.

Ich möchte die LED ja nicht in abhängigkeit vom Umgebungslicht dimmen, 
sondern, wenn die Display beleuchtung an ist, soll diese nach z.b. 3s 
nur noch halb so stark leuchten, und nach 5s Komplett aus schalten.

>Ein IR-Abstandssensor (oder PIR)
> könnte Bewegungen erfassen und Du könntest mit einem "Wink" die
> Beleuchtung ein schalten ... kein Tastensuchen im Dunkeln.

Das ist eine geniale Idee :) nur diese Teile sind doc ziemlich 
empfindlich oder? Die Beleuchtung soll ja nur angehen, wenn meine Hand 
über ihm ist und nicht, wenn sich irgendwo im Raum etwas bewegt oder 
wenn man sich nachts im Bett dreht?

> Ein Temperatursensor könnte Dir beim Aufstehen die Außentemperatur
> verraten.

Auch eine gute Idee :) nur dann muss ein Kabel aus dem Fenster gehängt 
werden. das macht den Wecker dann nicht sonderlich felxibel/portabel


> Die Farbe der Hintergrundbeleuchtung könntest Du mit RGB-Leds ändern und
> damit eine schöne ambiente Beleuchtung bauen.

Die LEDs für die Hintergrundbeleuchtung sind ja schon am Display 
eingebaut.
Oder meinst du zusätzlich für den Wecker? Also Nachttisch z.b.?

> MP3-Player, und Internetradio sind vielleicht auch nett ...
>
> Ach, baue doch einfach direkt ein Android Gerät auf, dann kannst Du auch
> Apps drauf laden ;-)

:D Ja wäre schon nett ;) aber kann man das mit einem AVR überhaupt 
machen?

katastrophenheinz schrieb:
> bring doch erstmal den Umfang aus FeatureRelease V1.0 zum fliegen. D.h.
> Uhrzeit auf Quarzbasis ausreichend genau

Wird gemacht :)

katastrophenheinz schrieb:
> Schon mal über einen Dreh/Drücksteller nachgedacht? Damit kannst du dann
> z.B. deine variablen Daten einfach und intuitiv eingeben ( Geburtstage
> o.ä. ), oder aauch durch mehr als 4 anzuzeigende Zeilen scrollen. Aber
> auch der fällt definitiv erst ins Release V2.0.


Ja habe ich.
Das sollte ja keine großen Änderungen im Programm machen oder?
Soweit ich das Verstanden habe, gibt der Drehsteller bei jedem Einrasten 
einen Puls aus. Je nachdem ob links oder rechts gedreht wird, an einem 
anderen. Also müsste man diese nur an die Pins anschließen, die bisher 
die Taster zum umschalten der Menüpunkte besetzen?


Noch eine allgemeine Frage:

Ist es sinnvoller die Pins active low oder high zu betreiben?


Nochmal vielen Dank für die guten Ideen und Hilfestellungen bei meinen 
Problemchen :)

von Wolfgang H. (frickelkram)


Lesenswert?

Hi Florian,

Florian schrieb:
> Wolfgang Heinemann schrieb:
>> Eine Lösung hatte einen Sensor in das Kopfkissen gebaut. Das schien mir
...
>>Ein IR-Abstandssensor (oder PIR)
>> könnte Bewegungen erfassen und Du könntest mit einem "Wink" die
>> Beleuchtung ein schalten ... kein Tastensuchen im Dunkeln.
>
> Das ist eine geniale Idee :) nur diese Teile sind doc ziemlich
> empfindlich oder? Die Beleuchtung soll ja nur angehen, wenn meine Hand
> über ihm ist und nicht, wenn sich irgendwo im Raum etwas bewegt oder
> wenn man sich nachts im Bett dreht?

Empfindlich werden die Teile durch die Linse, die auf dem PIR-Element 
steckt. Über geeignete Linsen kann man den Arbeitsbereich einschränken. 
Wenn man die Linse ganz weg lässt funktioniert der PIR nur auf wenige 
cm. Dazu kann man noch die Richtung bestimmen in dem man den Sensor 
hinter einem Loch montierst.

Als es noch keine Smartphones gab wurde eine Freisprecheinrichtung für 
Ericsson Handys hergestellt. Bei dieser Freisprecheinrichtung genügte 
ein Wink vor dem, in die Halterung, eingesetzten Handy um einen Anruf 
anzunehmen. So war sicher gestellt das das Handy während der Fahrt nicht 
angefasst werden musste um einen Anruf entgegen zu nehmen. Das Gerät 
enthielt einen PIR-Sensor ohne Linse hinter einem kleinen Loch im 
Gehäuse montiert.

>> Ein Temperatursensor könnte Dir beim Aufstehen die Außentemperatur
...
> Nochmal vielen Dank für die guten Ideen und Hilfestellungen bei meinen
> Problemchen :)

Aber katastrophenheinz hat schon recht, fang erst mal klein an. 
Hauptsache es läuft schon mal etwas, das ist gut für die Motivation :-)

von Florian (Gast)


Lesenswert?

> Empfindlich werden die Teile durch die Linse, die auf dem PIR-Element
> steckt. Über geeignete Linsen kann man den Arbeitsbereich einschränken.
> Wenn man die Linse ganz weg lässt funktioniert der PIR nur auf wenige
> cm. Dazu kann man noch die Richtung bestimmen in dem man den Sensor
> hinter einem Loch montierst.
>
Das ist super, dann muss so ein Teil auf jeden Fall mit rein ;)
Das kommt gleich zusammen mit dem Uhrenqaurz auf meine Liste für die 
nächste Bestellung.

Wenn wir gerade bei bestellen sind, was wäre denn ein geeigneter 
Temperatursensor für dieses Projekt?
Ich hätte da an etwas wie TSIC206 gedacht. Dürfte genauer sein als einen 
Temperaturabhängigen Widerstand zu benutzen oder?

> Als es noch keine Smartphones gab wurde eine Freisprecheinrichtung für
> Ericsson Handys hergestellt. Bei dieser Freisprecheinrichtung genügte
> ein Wink vor dem, in die Halterung, eingesetzten Handy um einen Anruf
> anzunehmen. So war sicher gestellt das das Handy während der Fahrt nicht
> angefasst werden musste um einen Anruf entgegen zu nehmen. Das Gerät
> enthielt einen PIR-Sensor ohne Linse hinter einem kleinen Loch im
> Gehäuse montiert.
>
Interesant :) Danke für die Info.



>>> Ein Temperatursensor könnte Dir beim Aufstehen die Außentemperatur
> ...
>> Nochmal vielen Dank für die guten Ideen und Hilfestellungen bei meinen
>> Problemchen :)
>
> Aber katastrophenheinz hat schon recht, fang erst mal klein an.
> Hauptsache es läuft schon mal etwas, das ist gut für die Motivation :-)

Naja also die Uhr läuft ;) und eine Datumsanzeige habe ich auch schon :)

Jetzt muss dann erstmal sichergestellt werden, dass die Uhr auch genau 
ist und dann müssen ein Paar Temperatursensoren her ;)

Wie ist es denn mit Gehäußen, was verwendet man da am besten, damit das 
ganze dann am Ende auch gut aussieht?
Kann man mit einfachen Mitteln schöne Gehäuse bauen?
Habe leider weder einen 3D Drucker, noch eine Fräse in meiner Wohung :P

von Wolfgang H. (frickelkram)


Lesenswert?

Florian schrieb:
>> Empfindlich werden die Teile durch die Linse, die auf dem PIR-Element
>> steckt. Über geeignete Linsen kann man den Arbeitsbereich einschränken.
>> Wenn man die Linse ganz weg lässt funktioniert der PIR nur auf wenige
>> cm. Dazu kann man noch die Richtung bestimmen in dem man den Sensor
>> hinter einem Loch montierst.
>>
> Das ist super, dann muss so ein Teil auf jeden Fall mit rein ;)

besorge Dir einen fix und fertig aufgebauten mit Digitalausgang und 
montierter Linse. Nur den PIR zu kaufen und den Verstärker dann selbst 
zu bauen ist etwas mühselig.

> Das kommt gleich zusammen mit dem Uhrenqaurz auf meine Liste für die
...
> Wie ist es denn mit Gehäußen, was verwendet man da am besten, damit das
> ganze dann am Ende auch gut aussieht?
> Kann man mit einfachen Mitteln schöne Gehäuse bauen?
> Habe leider weder einen 3D Drucker, noch eine Fräse in meiner Wohung :P

Wenn Du einen PIR in das Gehäuse einbauen möchtest solltest Du darauf 
achten das es lichtdicht ist und zwar im UV Bereich, also kein dünnes, 
durchscheinendes Kunststoffgehäuse.
Ansonsten ist das natürlich hochgradig Geschmackssache.

von katastrophenheinz (Gast)


Lesenswert?

>Wenn wir gerade bei bestellen sind, was wäre denn ein geeigneter
>Temperatursensor für dieses Projekt?
Ich würde einen 18B20 nehmen: OneWire-Interface, kostet nicht die Welt, 
ausreichend genau, umfangreicher Beispielcode vorhanden

>Kann man mit einfachen Mitteln schöne Gehäuse bauen?
Um diese Frage werden hier regelmäßig blutige Glaubenskriege geführt.
Schönheit liegt im Auge des Betrachters. Stell ein Bild deiner Kiste mit 
request for comments hier ein. Ein unterhaltsames Wochenende ist 
garantiert - allerdings auf deine Kosten ;-).

>Je nachdem ob links oder rechts gedreht wird, an einem
>anderen. Also müsste man diese nur an die Pins anschließen, die bisher
>die Taster zum umschalten der Menüpunkte besetzen?
Nee, nicht wirklich. Such mal hier im Forum nach Drehencoder. Egal ob 
Beispielcode, Funktionsweise, Unterschiede, du findest Erklärungen für 
alles.

>nur dann muss ein Kabel aus dem Fenster gehängt
>werden. das macht den Wecker dann nicht sonderlich flexibel/portabel
Stichwort Funkstrecke. Ein Feature für ReleaseUmfang 5.0

>Ist es sinnvoller die Pins active low oder high zu betreiben?
Wie meinst du das? Active High oder Low bestimmt der 
Schnittstellenpartner. Wenn im Datenblatt von dem "Active Low" 
drinsteht, dann ist das so, ohne daß du da was dran drehen kannst.

Gruss, Heinz

von Florian (Gast)


Lesenswert?

Wolfgang Heinemann schrieb:
> besorge Dir einen fix und fertig aufgebauten mit Digitalausgang und
> montierter Linse. Nur den PIR zu kaufen und den Verstärker dann selbst
> zu bauen ist etwas mühselig.

okay, danke.

katastrophenheinz schrieb:
>>Wenn wir gerade bei bestellen sind, was wäre denn ein geeigneter
>>Temperatursensor für dieses Projekt?
> Ich würde einen 18B20 nehmen: OneWire-Interface, kostet nicht die Welt,
> ausreichend genau, umfangreicher Beispielcode vorhanden
>
Gut werde ich mir ansehen :)

>>Kann man mit einfachen Mitteln schöne Gehäuse bauen?
> Um diese Frage werden hier regelmäßig blutige Glaubenskriege geführt.
> Schönheit liegt im Auge des Betrachters. Stell ein Bild deiner Kiste mit
> request for comments hier ein. Ein unterhaltsames Wochenende ist
> garantiert - allerdings auf deine Kosten ;-).
>
:D mal sehen ;) erst mal muss die Kiste ja laufen ;)


>>nur dann muss ein Kabel aus dem Fenster gehängt
>>werden. das macht den Wecker dann nicht sonderlich flexibel/portabel
> Stichwort Funkstrecke. Ein Feature für ReleaseUmfang 5.0
>
>>Ist es sinnvoller die Pins active low oder high zu betreiben?
> Wie meinst du das? Active High oder Low bestimmt der
> Schnittstellenpartner. Wenn im Datenblatt von dem "Active Low"
> drinsteht, dann ist das so, ohne daß du da was dran drehen kannst.
>
Ich meinte damit ob ich die Pins meines uC besser mit einem Pull up oder 
Pull down Widerstand versehe. Um dann in der Software abzufragen ob der 
Pin low oder high ist, damit eine bestimmte aktion ausgelöst wird?

Gruß Florian

von Florian (Gast)


Lesenswert?

Ich habe die Uhr übrigens heute Nacht laufen lassen, nach 7h geht sie um 
2,41 Minuten vor. Das erscheint mir ein wenig viel oder?
Werde nochmal die Einstellung des Timers überprüfen, evtl. habe ich da 
ja einen Zahlendreher.

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:
> Ich habe die Uhr übrigens heute Nacht laufen lassen, nach 7h geht sie um
> 2,41 Minuten vor. Das erscheint mir ein wenig viel oder?
> Werde nochmal die Einstellung des Timers überprüfen, evtl. habe ich da
> ja einen Zahlendreher.

Solange du keinen Quarz drann hast, sondern den internen Oszillator 
benutzt, ist das alles Makulatur.
Was denkst du eigentlich, warum wir uns den Mund fusselig geredet haben, 
dass du einen Quarz brauchst.

von katastrophenheinz (Gast)


Lesenswert?

>Ich meinte damit ob ich die Pins meines uC besser mit einem Pull up oder
>Pull down Widerstand versehe. Um dann in der Software abzufragen ob der
>Pin low oder high ist, damit eine bestimmte aktion ausgelöst wird?
Für Input-Pins kann optional ein interner PullUp aktiviert werden.
Solange keine explizite Festlegung dagegenspricht (z.B. bei i2c ) würde 
ich den nehmen. Reduziert Bastelzeit.

>Das erscheint mir ein wenig viel oder?
Wer hätte das gedacht?!? Reality meets Theory.
a) wie hoch ist die Abweichung in Prozent?
b) Riskier mal einen Blick ins Atmel-Manual, was du for free downloaden 
kannst. Da gibts neben anderen spannenden Sachen ziemlich weit hinten 
auch Diagramme, z.B. "RC Oscillator Frequency vs. VCC" bzw. "vs Temp"
c) Ermittle, ob deine Abweichung im Rahmen der Spec. liegt
d) ggf. Fehlerabstellung, um dann festzustellen:
e) Nimm endlich den verdammten externen Quarz.

Gruss, Heinz

von Florian (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Solange du keinen Quarz drann hast, sondern den internen Oszillator
> benutzt, ist das alles Makulatur.
> Was denkst du eigentlich, warum wir uns den Mund fusselig geredet haben,
> dass du einen Quarz brauchst.

Ihr braucht euch nicht den Mund fusselig reden, ich habe das schon 
kapiert.
Deshalb habe ich ja gesagt, dass ich mir einen Uhrenquarz besorgen 
werde.
Da ich aber momentan keinen Quarz hier habe, bleibt mir ja nur der 
interne Oszillator.
Allerdings hätte ich nicht erwartet, dass dieser so ungenau ist.

Ist es im allgemeinen ratsam immer einen externen Quarz zu benutzen?
oder reicht der interne aus, wenn man nicht gerade eine Uhr bauen will?

von katastrophenheinz (Gast)


Lesenswert?

>Da ich aber momentan keinen Quarz hier habe, ...
Hast du doch! Nämlich den vom STK500. Kann man als clock source 
konfigurieren.

von Florian (Gast)


Lesenswert?

katastrophenheinz schrieb:
>>Da ich aber momentan keinen Quarz hier habe, ...
> Hast du doch! Nämlich den vom STK500. Kann man als clock source
> konfigurieren.

Oh. okay.... habe das gerade versucht... klappt leider nicht.

Ich habe außerdem gerade festestellt, dass jegliches ändern der Freuqenz 
in den Fusebits trotzdem zu einer richtigen Anzeige auf dem LCD führen?
Also ich stelle 8 MHz ein, lcd funktioniert genauso bei 1,2,4 MHz sogar 
wenn er ich die Fusebits auf ext. clock setze Funktioniert es?
Das kann doch eigenltich nicht sein?
Benutze das Avr plugin für eclipse.

Irgendwie Verstehe ich das gerade überhaupt nicht, kann mir jemand 
helfen?

von Florian (Gast)


Lesenswert?

Florian schrieb:
> katastrophenheinz schrieb:
>>>Da ich aber momentan keinen Quarz hier habe, ...
>> Hast du doch! Nämlich den vom STK500. Kann man als clock source
>> konfigurieren.
>
> Oh. okay.... habe das gerade versucht... klappt leider nicht.
>
> Ich habe außerdem gerade festestellt, dass jegliches ändern der Freuqenz
> in den Fusebits trotzdem zu einer richtigen Anzeige auf dem LCD führen?
> Also ich stelle 8 MHz ein, lcd funktioniert genauso bei 1,2,4 MHz sogar
> wenn er ich die Fusebits auf ext. clock setze Funktioniert es?
> Das kann doch eigenltich nicht sein?
> Benutze das Avr plugin für eclipse.
>
> Irgendwie Verstehe ich das gerade überhaupt nicht, kann mir jemand
> helfen?

Hat sich erledigt, habe das Problem gefunden.

Ich weiß nur leider nicht mit welcher Freqeunz der uC dann läuft?
Habe gelesen, dass man diese über AVR Studio einstellen kann?
Geht das über Eclipse&Avr Plgin auch? Habe kein AVR Studio.

von katastrophenheinz (Gast)


Lesenswert?

>Habe gelesen, dass man diese über AVR Studio einstellen kann?
Ja kann man. Mögliche Werte sind 3686400/n, n=1,2,3,...
Nutzt dir aber nichts, weil du den aktuell eingestellten Wert nicht 
kennst.

>Habe kein AVR Studio.
Kannst du dir für lau runterladen. Wo ist das Problem? Und wenn du es 
nur dafür nutzt, die Target clock auf einen definierten Wert 
einzustellen. Dafür reicht auch AVR Studio 4.

Das STK500 hat einen mit "Crystal" beschrifteten Sockel, Quarze gibt es 
beim old fashioned "Radio- und Fernsehtechniker" um die Ecke oder im 
Internetz zum bestellen. Notfalls nimm irgendein Stück digitalen 
Elektronikschrott und löte einen Quarz aus. Kann doch so schwer nicht 
sein.

Gruss, Heinz

von Florian (Gast)


Lesenswert?

katastrophenheinz schrieb:
>>Habe gelesen, dass man diese über AVR Studio einstellen kann?
> Ja kann man. Mögliche Werte sind 3686400/n, n=1,2,3,...
> Nutzt dir aber nichts, weil du den aktuell eingestellten Wert nicht
> kennst.

Gut, danke.
>
>>Habe kein AVR Studio.
> Kannst du dir für lau runterladen. Wo ist das Problem? Und wenn du es
> nur dafür nutzt, die Target clock auf einen definierten Wert
> einzustellen. Dafür reicht auch AVR Studio 4.
>
Avr Studio läuft nur auf Windows, ich habe aber Linux.

> Das STK500 hat einen mit "Crystal" beschrifteten Sockel, Quarze gibt es
> beim old fashioned "Radio- und Fernsehtechniker" um die Ecke oder im
> Internetz zum bestellen. Notfalls nimm irgendein Stück digitalen
> Elektronikschrott und löte einen Quarz aus. Kann doch so schwer nicht
> sein.

Das weis ich, und davon werde ich mir bei der nächsten Gelegenheit auch 
welche holen.
Aber momentan habe ich leider keinen zur Hand.
Werde jetzt noch einmal versuchen, den uc über die Clock des stk500 
laufen zu lassen.
> Gruss, Heinz

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.