Show Posts
Pages: [1] 2 3 ... 229
1  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/
2  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?
3  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.
4  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.
5  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
6  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.
7  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.
8  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};


9  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/.
10  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
11  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
12  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() {
}
13  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.
14  International / Deutsch / Re: Eigenes Boardlayout on: February 23, 2014, 05:24:34 am
@Eisebaer: "besser" ist immer mit einer Wertung verbunden. D.h. man muss sich fragen "besser bezüglich was". Resonatoren sind billiger und brauchen weniger zusätzliche Bauteile. Deshalb werden die ja bei den neueren Arduinos verbaut. Andererseits sind Quarze nicht nur teurer sondern regelmäßig sehr viel frequenzstabiler als Resonatoren. D.h. wer mit dem Arduino Zeit messen will hat mit Resonatoren schon verloren bevor er anfängt. Deshalb hat mein Blinkenlighty http://www.amazon.de/gp/product/3645651306/?ie=UTF8&camp=1638&creative=6742&linkCode=ur2&site-redirect=de&tag=wwwblinkenlig-21  ja auch einen Quartz und keinen Resonator. Ich finde eine genaue Frequenz eben wichtiger als billigere Produktionskonsten. D.h. ich finde Resonatoren für meine Zwecke schlechter.

Was die Abblockkondensatoren und die Groundplane angeht. Die ganzen Details findet man in den Atmel Application Notes
AVR040: EMC Design Considerations http://www.atmel.com/Images/doc1619.pdf und Atmel AVR042: AVR Hardware Design
Considerations
 http://www.atmel.com/Images/Atmel-2521-AVR-Hardware-Design-Considerations_Application-Note_AVR042.pdf

Insbesondere:
AVR040 Abschnitt 4.6 Power Supply, Power Routing and Decoupling Capacitors
AVR040 Abschnitt 4.7 PCB Layout and Grounding
AVR042 Abschnitt 5.2 General about crystals and ceramic resonators

Beim Blinkenlighty habe ich das im Layout berücksichtigt. http://blog.blinkenlight.net/experiments/hardware/blinkenlighty-layout/. Du kannst genau sehen wie der Quarz so gut wie möglich abgeschirmt ist und wie die Kondensatoren plaziert sind.

Wenn Du kein Englisch magst, Abblockkondensatoren werden auch hier erklärt: http://rn-wissen.de/index.php/Abblockkondensator.
15  International / Deutsch / Re: Eigenes Boardlayout on: February 22, 2014, 10:20:38 am
@Schultewolter: ja, Eagle ist am Anfang hart. Aber sobald es klick gemacht hat wird Dir relativ schnell klar warum Eagle die bessere Wahl ist. Ich fand Eagle am Anfang auch schlimm, das Programm hat es aber echt in sich.

Was den Autorouter angeht: den benutzt man nur wenn man sehr niedrige Anforderungen hat oder wenn man einen sehr teuren Router hat.
Pages: [1] 2 3 ... 229