Forum: Mikrocontroller und Digitale Elektronik Pulsgenerator auf ATtiny24A


von Sebastian (Gast)


Lesenswert?

Ich möchte einen Pulsgenerator auf einem ATtiny24A programmieren. Er 
sollte alle 100ms einem Puls von 5us  Länge aussenden. Ist das überhaupt 
möglich und wenn ja wie?

von Thomas W. (diddl)


Lesenswert?

Klar geht das mit Verwendung eines Timer.

Das Problem bei diesen Tiny ist eigentlich nur, dass die keinen Quarz 
haben und daher die Genauigkeit nicht sehr hoch ist. Und es ist noch 
dazu temperaturabhängig.

von Thomas W. (diddl)


Lesenswert?

Wobei, es langt hier auch ein auch 6 Zeiler.


for(;;)
{
  SetLow(PulsPin);
  delay_ms(100);
  SetHigh(PulsPin);
  delay_us(5);
}

von Sebastian (Gast)


Lesenswert?

Danke vielmals aber leider verstehe ich deinen Lösungsvorschlag noch 
nicht ganz. Könntest du es bitte etwas ausführlicher beschreiben?

von Thomas E. (thomase)


Lesenswert?

Thomas W. schrieb:
> Das Problem bei diesen Tiny ist eigentlich nur, dass die keinen Quarz
> haben

Kein Controller hat einen eingebauten Quarz. Und auch an einen Tiny24 
kann man einen Quarz anschließen. Also, wo ist dein Problem?

von Sebastian (Gast)


Lesenswert?

Thomas W. schrieb:
> for(;;)
> {
>   SetLow(PulsPin);
>   delay_ms(100);
>   SetHigh(PulsPin);
>   delay_us(5);
> }


?????

von Thomas E. (thomase)


Lesenswert?

Sebastian schrieb:
> Könntest du es bitte etwas ausführlicher beschreiben?

Vergiss das. Das erfült ja noch nicht mal die Anforderung.

Guck dir im Tutorial das Kapitel Timer an.

von M. K. (sylaina)


Lesenswert?

Falls ein 4 us Puls auch OK ist würde ich das wohl so machen:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/sleep.h>
4
5
int main(void) {
6
    // init uC
7
    // clock prescaler auf 16 macht mit internem RC 500 kHz
8
    CLKPR = (1 << CLKPCE);
9
    CLKPR |= (1 << CLKPS2);
10
    // pwm config
11
    // pulsweite: 1/500 kHz * OCR1A = 4 us
12
    OCR1A = 2;
13
    // PWM Top: 1/500 kHz * IRC1 = 100 ms
14
    IRC1 = 50000;
15
    // Fast PWM Mode, non-invert, bis IRC1 zaehlen
16
    TCCR1A |= (1 << WGM11)|(1 << COM1A1);
17
    TCCR1B |= (1 << WGM13)|(1 << WGM12)|(1 << CS10);
18
    // sleepmode einstellen
19
    set_sleep_mode(SLEEP_MODE_IDLE);
20
    // interrupts on
21
    sei();
22
    for(;;) {
23
        // uC schlafen legen
24
        sleep_mode();
25
    }
26
}
Hab aber nicht geprüft ob's fehlerfrei ist.

von Peter D. (peda)


Lesenswert?

Thomas E. schrieb:
> Vergiss das. Das erfült ja noch nicht mal die Anforderung.

Alle genannten Anforderungen sind erfüllt.
Und Toleranzen wurden keine angegeben.

von Thomas E. (thomase)


Lesenswert?

Peter D. schrieb:
> Und Toleranzen wurden keine angegeben.
Hier wird nicht geschachert.

von Sebastian (Gast)


Lesenswert?

danke

von Peter D. (peda)


Lesenswert?

Thomas E. schrieb:
> Hier wird nicht geschachert.

Eben.
Z.B. wenn ich 230V brauche, dann könnens auch 207V oder 253V sein.
Wenn ich es genauer haben will, dann muß ich es extra angeben.

Für den internen RC-Oszillator ist ein Delay genau genug.

von Thomas W. (diddl)


Lesenswert?

Thomas E. schrieb:
> Kein Controller hat einen eingebauten Quarz. Und auch an einen Tiny24
> kann man einen Quarz anschließen.

Na klar kann man einen Quarz anschliessen.
Aber die Dinger haben ja teilweise nur 6 Pins ...

von Peter D. (peda)


Lesenswert?

Thomas W. schrieb:
> Aber die Dinger haben ja teilweise nur 6 Pins ...

ATtiny24: 14 Pins, davon max 12 IOs.

von Thomas W. (diddl)


Lesenswert?

Ja ich seh grad, der hat eh 14 Beinchen.  :-)

Da macht ein Quarz möglicherweise schon Sinn.

von Thomas E. (thomase)


Lesenswert?

Thomas W. schrieb:
> Da macht ein Quarz möglicherweise schon Sinn.

Und dann dauern die 100ms auch 100ms. Und nicht wie bei Danneggers, wo 
das Brot mit 207V getoastet wird.

von m.n. (Gast)


Lesenswert?

http://mino-elektronik.de/Generator/takte_impulse.htm#bsp2

Die Schaltung ist zwar für einen ATtiny4313, der sich aber durch einen 
ATtiny24 ersetzen läßt. Einfach die RS232-Schnittstelle weglassen und 
die Zeiten als Konstante vorgeben.

#define DEF_PERIODE     100000    // 100 ms
#define DEF_PULSWEITE   5         // 5 µs

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.