Hallo alle zusammen, Zuerst zu meinem Problem mit dem Tiny: Laut Datenblatt hat der Tiny ja nur 9,6 oder 4,8 Mhz Takt, ist es aber irgendwie möglich auf einen glatten Wert zu kommen für den Timer? Also das Problem ist, hätte es 1 Mhz, so könnte ich ja den Prescaler 8 nehmen: 1/(1000000 8 256) = 2,04 ms das wäre sehr gut (ich brauche das für eine (nicht atom genaue) Zeitmessung. Weil bei 4,8Mhz: 1/(4800000 8 256) = 0,43 ms und: 1 / (4800000 64 256) = 3,41ms so ähnlich sehen auch die Ergebnisse für 9,6 Mhz aus. (Oder gibt es da noch einen anderen Trick?) Die zweite Sache ist: Ich möchte den Tiny schlafen legen (power down) und per externem Interrupt aufwecken. Aber das Problem ist, ich kann nur + (Vcc) an einen Pin anlegen (wegen dem Layout, Transistor verstärktes positives Signal). Und ich habe bisher nur gesehen das ein Level Interrupt per GND durchgeführt wird. Deswegen dachte ich an ein Pin Change Interrupt, doch brauche ich da ein Pulldown widerstand? Oder reicht es aus wenn der Pin einen unbestimmten wert hat, und auf einmal "1" / "high" wird? DANKE schon mal!
@Fer T. (fer_t) >das wäre sehr gut (ich brauche das für eine (nicht atom genaue) >Zeitmessung. Dann nimmt man sowieso einen Quarz. Der RC-Oscillator ist eher ungenau. Man kann ihn aber leidlich kalibrieren, Stichwort OSCCAL Register, siehe Datenblatt. >Deswegen dachte ich an ein Pin Change Interrupt, Hat den der Attiny13? > doch brauche ich da ein >Pulldown widerstand? Wahrscheinlich. > Oder reicht es aus wenn der Pin einen unbestimmten >wert hat, und auf einmal "1" / "high" wird? Nein. MFG Falk
> (Oder gibt es da noch einen anderen Trick?)
mit einem CTC-Modus des Timers kann man noch viel machen.
Allerdings wie Falk schon sagte: die 4.8Mhz sind sowieso eher so
ungefähr.
Du kannst aber natürlich auch 2325 Timerinterrupts deines 0.43ms IRQ
abzählen, das als 1 Sekunde nehmen und dann den RC_Oszi mit dem OSCCAL
soweit hinziehen, bis du leidlich bei 1 Sekunde bist.
Kommt halt immer drauf an, wieviele Sekunden du abmessen willst.
Falk Brunner schrieb: >>Deswegen dachte ich an ein Pin Change Interrupt, > > Hat den der Attiny13? Aus dem Datenblatt: 0x0001 INT0 External Interrupt Request 0 0x0002PCINT0 Pin Change Interrupt Request 0 Also wahrscheinlich ja, nur stehen da keine Informationen dazu. Ich habe vergessen zu erwähnen, es geht nicht wirklich um eine genaue Zeitmessung, es soll nur für folgendes dienen: erste 10 Sekunden nach dem aufwachen: mache a Sekunden 10-15: mache b Sekunden 15-20: mache c geh wieder schlafen. Danke aber schon mal. MfG
Hast du das Datenblatt zum ATtiny13? Wenn nicht lade es von der ATMEL-Seite herunter (doc2535.pdf). Da sind die Interrupts beschrieben. Nimm INT0, den kann man für steigende wie für fallende Flanke definieren. Und mit einem Widerstand gegen GND sollte es funktionieren. Zum "schlafen legen": hier darfst du nur den "Idle"-Modus verwenden, sonst funktioniert der Interrupt nicht. MfG KF
BigByte64 schrieb: > Hast du das Datenblatt zum ATtiny13? Wenn nicht lade es von der > ATMEL-Seite herunter (doc2535.pdf). Da sind die Interrupts beschrieben. > Nimm INT0, den kann man für steigende wie für fallende Flanke > definieren. Und mit einem Widerstand gegen GND sollte es funktionieren. Danke für den Hinweis > Zum "schlafen legen": hier darfst du nur den "Idle"-Modus verwenden, > sonst funktioniert der Interrupt nicht. Sicher? Hab gerade mal nachgeguckt: 7.1 : INT0 Level Interrupt. Oder vertue ich mich da? > MfG > KF MfG, Fer
Hallo, heute ist wieder so ein Tag, an dem mein Hirn einfach nicht will... Und zwar bin ich gerade am überlegen zum Thema Charlieplexing: Wenn ich L4 "anmachen" will, muss ich ja P1 auf + und P2 Input und P3 auf - setzen, aber würde in dem Fall nicht auch L6 und L4 leuchten? Der Strom könnte ja auch dort langfließen, oder gilt hier das gesetz des kleinsten Widerstandes, weil er nur eine durchlaufen müsste und nicht zwei? Danke schon mal, ich weiß nicht aber heute ist nicht mein Tag... Bild siehe Anhang. PS: Noch mal wegen dem Interrupt und dem Pulldown: würde es gehen wenn ich einen 10k Ohm Widerstand nehme? Weil ich nur eine normale 3V Batterie habe, die lange halten soll, daher auch der sleep mode, bei 20k wären es noch 500uA (oder doch 5?) das ist mehr als der ganze Tiny braucht im sleep mode.
Fer schrieb: > Sicher? > Hab gerade mal nachgeguckt: 7.1 : INT0 Level Interrupt. > Oder vertue ich mich da? INT0 kennt drei Konfigurationsmöglichkeiten, den Interrupt auszulösen: 2 mal Level Change, also beim Übergan von 0 nach 1 oder von 1 nach 0. Und dann kennt er noch den Low Level Interrupt. Ist dies eingestellt, dann wird der Interrupt aufgerufen, wenn am Eingang 0 (0 V, GND) anliegt. In dieser Konfiguration wird der Interrupt aber immer wieder aufgerufen, so lange der Eingang auf 0 liegt. Das finde ich eher unpraktisch. Und wenn ich das richtig verstanden habe soll der Interrupt ja ausgelöst werden, wenn logisch 1 am Eingang anliegt. Also kommt der Low Level Interrupt hierfür nicht in Frage. Und in Kapitel 7.1, in der Tabelle der Sleep-Modes ist bei INT0 die Anmerkung, dass dieser nur im oben beschriebenen Low Level Mode die CPU auch aus "ADC Noise Reduction" und "Power-down" aufweckt. Da aber hier nur der Level Change, am besten beim Wechsel von 0 auf 1 in Frage kommt, kann man nur den Idle-Mode verwenden. > PS: Noch mal wegen dem Interrupt und dem Pulldown: würde es gehen wenn > ich einen 10k Ohm Widerstand nehme? > Weil ich nur eine normale 3V Batterie habe, die lange halten soll, daher > auch der sleep mode, bei 20k wären es noch 500uA (oder doch 5?) das ist > mehr als der ganze Tiny braucht im sleep mode. Die internen Pullup-Widerstände (die für diese Anwendung nicht in Frage kommen) haben einen Wert zwischen 20 und 50 K. Das macht bei 3 V einen Strom von 150 bis 60 µA. Ich denke mal, da kann man auch 100 K nehmen, einfach mal ausprobieren. Außerdem fließt dieser Strom nur, wenn der Eingang auf logisch 1 gelegt wird. Und das ist ja der Interrupt-Fall. Für mich bedeutet das, dass im "Normalfall" der Eingang auf logisch 0 liegt, dann fließt auch kein Strom. Und zum Thema "Charlieplexing": was ist das denn? Dazu fällt mir nur folgendes ein: wenn die Dioden Leuchtdioden sind, dann haben die einen Spannungsabfall von ca. 2 V. Bei 3 V Betriebsspannung leuchtet nur die Einzeldiode. Die in Reihe geschalteten leuchten nicht, da hier mindestens 4 V anliegen müssen. MfG KF
Ich habe gerade noch mal nach "Charlieplexing" gegoogled und bin auf folgenden Link gestoßen: http://en.wikipedia.org/wiki/Charlieplexing Das beschreibt genau dein Problem und meine vermutete Lösung, etwas weiter unten auf dieser Seite mit der Überschrift "Forward voltage". MfG KF
Danke, hat mit sehr geholfen, werde Morgen mal basteln. Ach ja theoretisch kann man das mit dem immer wieder ausüben des Interrupts blockieren, wenn man als erste "Tat" nach dem aufwachen folgendes macht:
1 | GIMSK &= ~(1 << INT0); |
(Wieder sperren). Werde mir aber noch mal alles in Ruhe angucken und mal gucken was ich am besten anwenden kann. MfG
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.