Show Posts
Pages: 1 ... 3 4 [5] 6 7 ... 233
61  International / Deutsch / Re: Jahreszahlformat - RTC Winterzeit-Sommerzeit on: May 06, 2014, 10:49:32 am
Warum nimmst Du nicht einfach ein DCF77 Modul anstelle einer RTC? Dann ist das Sommerzeit / Winterzeitproblem gelöst, denn DCF77 liefert ein Sommerzeit / Winterzeitflag mit. Falls Deine Wechselrichter die Module stören --> meine Library behebt sowas problemlos: http://blog.blinkenlight.net/experiments/dcf77/dcf77-library/
62  International / Deutsch / Re: Jahreszahlformat - RTC Winterzeit-Sommerzeit on: May 02, 2014, 06:20:27 am
Ich finde es schräg boolesche Ausdrücke auszuwerten um dann per IF zu entscheiden ob man true oder false zurückgibt. Ich würde deshalb statt sowas

Code:
{
  if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
  if (month>3 && month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
  if (month==3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7)))
    return true;
  else
    return false;
}

Eher sowas schreiben

Code:
{
  if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
  if (month>3 && month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
  return (month==3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7)));
}

oder ganz konsequent gleich

Code:
{
    return 
        (month>3 && month<10) || // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
        (month== 3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) ||
        (month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7));
}


63  International / Deutsch / Re: Probleme mit dem Zählen *gg* on: April 19, 2014, 12:40:23 am
Wenn der Taster auch der Resettaster sein darf hätte ich hier Beispielcode: http://blog.blinkenlight.net/experiments/counting-resets/wear-leveling/
64  International / Deutsch / Re: non-blocking function mit millis() on: April 19, 2014, 12:39:00 am
Du kannst Dir auch mal dieses Beispiel hier anschauen: http://blog.blinkenlight.net/experiments/basic-effects/lighthouses/ oder dieses: http://blog.blinkenlight.net/experiments/measurements/flexible-sweep/. Allerdings wäre mir ein Softwarebasierter Not Aus zu windig. Was ist wenn Deine Software einen Fehler hat? Was ist wenn der Controller aufgrund eines Versorgungsspannungstransienten in einen undefinierten Zustand kommt?
65  International / Deutsch / Re: Arduino Pins getaktet einlesen on: April 15, 2014, 02:30:47 pm
Ah, da hätte ich mal genauer lesen sollen. Also Blick ins Datenblatt wo die echte Grenze ist --> ADC braucht bzw 13.5 Zyklen. ADC Clock muesste bei ~600 kHz sein --> möglich allerdings nicht mit 10 Bit Auflösung.
66  International / Deutsch / Re: Arduino Pins getaktet einlesen on: April 15, 2014, 01:48:57 pm
@guntherb:  44.1 kHz geht  mit einem 644P http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/s2012/tcj26_ecs227/tcj26_ecs227/index.html. Der ADC ist aber auch nicht schneller als in einem Arduino --> mit analogRead geht das in der Tat nicht, mit einem Arduino aber schon.
67  International / Deutsch / Re: DCF77 Programm Problem on: April 01, 2014, 02:59:56 pm
Der Iteadduino hat aber keiner 328er drauf --> die Timer könnten Probleme machen. Die anderen beiden sollten OK sein. Oder natürlich ein Blinkenlighty smiley-wink
68  International / Deutsch / Re: DCF77 Programm Problem on: April 01, 2014, 01:09:00 pm
Nachtrag: für meinen Decoder brauchst Du allerdings einen "alten" Arduino, d.h. einen mit Quarz, der neue Uno hat nur einen billigen Resonator und das taugt nicht für sowas.
69  International / Deutsch / Re: DCF77 Programm Problem on: April 01, 2014, 01:07:23 pm
Die einfachen DCF77 Decoder haben alle schon bei sehr geringen Störungen riesige Probleme. Meiner http://blog.blinkenlight.net/experiments/dcf77/dcf77-library/ kommt selbst bei >10 Bitfehlern pro Minute noch nicht aus dem Tritt. Allerdings brauchst Du dafür einen halbwegs aktuellen Compiler. Arduino hat leider immer noch einen 5 Jahre alten Compiler paketiert und der damit erzeugte Code ist zu langsam smiley-sad Sobald Du aber einen neueren Compiler installierst geht das sehr gut.
70  International / Deutsch / Re: Serial.print mit zusätzlichen Steuerzeichen ??? on: April 01, 2014, 01:03:36 pm
Serial.print kann problemlos auch Steuerzeichen ausgeben. Speziell STX und ETX brauche ich auch (siehe hier: http://blog.blinkenlight.net/experiments/dcf77/meinberg-emulator/). Das geht problemlos.

Im schlimmsten Fall kannst Du einen String immer als 0 terminiertes char Array deklarieren. Dann kannst Du beliebige Sonderzeichen reinstopfen. Also so:

Code:
const char meinString[] = {'S', 'o', 0x02, 0x03, 0x00};


71  International / Deutsch / Re: und nochmal millis on: March 30, 2014, 02:31:22 pm
Sieht für mich irgendwie nach dem "Leuchtturmproblem" aus: http://blog.blinkenlight.net/experiments/basic-effects/lighthouses/.
72  Using Arduino / Programming Questions / Re: Generating 77.5 kHz on: March 27, 2014, 02:13:06 pm
I double checked the signed vs. unsigned issue. Of course it is a valid point but in my case not applicable.

Thanks to Magician for locating the real issue. I confused binary and logic or. Interestingly I messed this up only in parts of my code. Now it works exactly as it should smiley
73  Using Arduino / Programming Questions / Re: Generating 77.5 kHZ on: March 27, 2014, 06:31:03 am
Timer 1 is intended for later use. I already verified and confirmed that pin 3 is working as it should. There must be something wrong with my setup but I still have no idea what it might be.

 I added digitalWrite calls to toggle Pin 5 explicitly into the ISR. Then I had a look with my DSO. --> It is not stuck in the ISR.

-Udo
74  Using Arduino / Programming Questions / Generating 77.5 kHz on: March 26, 2014, 11:21:51 am
In order to better test my dcf77 library http://blog.blinkenlight.net/experiments/dcf77/dcf77-library/ under realistic conditions I want to implement a simple signal emulator. First step is to create a 77 500 Hz carrier. I tried with the code below. I already verified that the timing is correct (by adding digitalWrite + analysis with DSO). However I fail to get any signal on pin 3 (PD3, OC2B).

Obviously something with my timer2 configuration must be wrong. But what? Has anyone any hints for me?

Code:
// 16000000 / 77500 = 206 + 70/155 = 206 + 14/31
const uint8_t ticks_per_period = 206;
// fractional ticks
const uint8_t nominator = 14;
const uint8_t denominator = 31;

const uint8_t pwm_full_carrier      = ticks_per_period / 2;  // ~50  %   duty cycle
const uint8_t pwm_modulated_carrier = ticks_per_period / 8;  // ~12.5% duty cycle


ISR(TIMER2_COMPA_vect) {
    static uint8_t accumulated_fractional_ticks;

    accumulated_fractional_ticks += nominator;
    if (accumulated_fractional_ticks < denominator) {
        OCR2A = ticks_per_period - 1;
    } else {
        OCR2A = ticks_per_period;
        accumulated_fractional_ticks -= denominator;
    }
}

void setup_timer_0() {
    // disable timer 0 interrupts
    TIMSK0 = 0;
}

void setup_timer_1() {
    // disable timer1 interrupts
    TIMSK1 = 0;

    // do not toggle or change timer IO pins
    TCCR1A = 0;      

    // (16000000 / 256) - 1
    OCR1A = 62500 - 1;
    
    // Mode 4, CTC using OCR1A | set prescaler to 256
    TCCR1B = (1<<WGM12) | (1<<CS12);
}

void setup_timer_2() {
     // disable timer2 interrupts during setup
    TIMSK2 = 0;

    // enable OC2B pin for output (digital pin 3)
    DDRD |= 1<<3;

    // The fast Pulse Width Modulation or fast PWM mode (WGM22:0 = 3 or 7) provides a high fre-
    // quency PWM waveform generation option. The fast PWM differs from the other PWM option by
    // its single-slope operation. The counter counts from BOTTOM to TOP then restarts from BOT-
    // TOM. TOP is defined as 0xFF when WGM2:0 = 3, and OCR2A when MGM2:0 = 7. In non-
    // inverting Compare Output mode, the Output Compare (OC2x) is cleared on the compare match
    // between TCNT2 and OCR2x, and set at BOTTOM. In inverting Compare Output mode, the out-
    // put is set on compare match and cleared at BOTTOM.


    TCCR2A = 1<< WGM20 || 1<<WGM21 || // Fast PWM
             1<<COM2B1;               // Clear OC2B on Compare Match

    TCCR2B = 1<<CS20 || // no Prescaler      
             1<<WGM22;  // Fast PWM

    OCR2A = ticks_per_period - 1;  // period length

    OCR2B = pwm_full_carrier;  // duty cycle
    
    // enable match interrupts
    TIMSK2 = 1<<OCIE2A;
}

void setup() {
    setup_timer_0();
    setup_timer_1();
    setup_timer_2();
}

void modulate(const uint8_t duration) {
}

void loop() {
}
75  International / Deutsch / Re: Benutzung von millis() immer möglich ? on: March 03, 2014, 02:39:19 pm
Nein, millis() kann nicht immer verwendet werden.  Jede Bibliothek kann und wird das abschalten wenn es ihr in die Quere kommt. Ein Beispiel wäre etwa meine neue dcf77 Bibliothek: http://blog.blinkenlight.net/experiments/dcf77/dcf77-library/. Allerdings ist es üblich darauf hinzuweisen. Wenn ein Autor das trotzdem nicht tut hast Du eben Pech gehabt.

Und es ist nicht richtig, daß dies nur passiert wenn der Timer überschrieben wird. Meine Library stoppt ihn einfach nur weil es Jitter ins System bringt den ich nicht brauchen kann. Ein anderer (untypischer) Grund wäre um bei Speicherknappheit den Stack zu begrenzen. Es kann eben viele Gründe geben warum eine Library die Timer stoppen will.
Pages: 1 ... 3 4 [5] 6 7 ... 233