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?
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.
Wobei, es langt hier auch ein auch 6 Zeiler. for(;;) { SetLow(PulsPin); delay_ms(100); SetHigh(PulsPin); delay_us(5); }
Danke vielmals aber leider verstehe ich deinen Lösungsvorschlag noch nicht ganz. Könntest du es bitte etwas ausführlicher beschreiben?
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?
Thomas W. schrieb: > for(;;) > { > SetLow(PulsPin); > delay_ms(100); > SetHigh(PulsPin); > delay_us(5); > } ?????
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.
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.
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.
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.
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 ...
Thomas W. schrieb: > Aber die Dinger haben ja teilweise nur 6 Pins ... ATtiny24: 14 Pins, davon max 12 IOs.
Ja ich seh grad, der hat eh 14 Beinchen. :-) Da macht ein Quarz möglicherweise schon Sinn.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.