Forum: Mikrocontroller und Digitale Elektronik ATtiny 84 Hilfe mit Quarzoszillator


von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo Programmierer,

ich habe mir eine 7-Segment Uhr mit einem µC aufgebaut und mit C
programmiert. Soweit funktioniert das auch alles. Aber leider ist der
interne Quarz zu ungenau.
Deshalb möchte ich an den T0 Eingang einen Quarzoszillator anschließen
der nur dem internen Timer den Takt von 32,786kHz vorgibt. Der Prozessor
an sich soll mit 10MHz laufen da ich noch multiplexe.
Verwendete Komponenten:
- ATtiny 84
- Quarzoszillator 32,786kHz
- AVR Studio 6.1
- AVR ISP mkII Main uni / programmer

Nun zu den Fragen:
Was muss ich beim anschließen beachten?
Welche Fuse Bits muss ich umstellen oder muss ich das in diesem Fall
nicht?
Erkennt der Timer den Takt automatisch?
Muss ich Code programmieren der diese Funktion ermöglicht?

Kann jemand helfen!

Danke Gruß Chris

von Uwe S. (de0508)


Lesenswert?

Hallo Chris,

hier bist Du auf dem Holzweg:

Es gibt keinen internen Quarz.

Ein atTiny hat, wie die atMega auch, einen RC Oszillator der bei 8MHz 
'wackelt' und mindestens einen 1:8 Vorteiler erhält.
Im Auslieferungsstadium ist der Vorteiler aktiviert und der µC läuft 
dadurch mit 1MHz Takt.

Falls Du so einen 32KHz Oszillator findest, kannst Du dich hier

http://www.engbedded.com/fusecalc/

über die möglichen Einstellungen des atTiny84 informieren.

Und nein, DU bist der Brain und musst dein Programm schreiben - 
automatisch geht da nichts.

: Bearbeitet durch User
von Uwe S. (de0508)


Lesenswert?

Hallo Chris,

schön wäre es dein Schaltplan und das Programm hier zu sehen.
Ich habe so den Verdacht, dass die Pins Dir nicht ausreichen.

7 Segmente 1 DP + 4 Multiplexleitungen.
Die 7-1 Segmente kann man nicht einsparen, aber die 4 Multiplexleitungen 
ließen sich aus 2 Bit kodieren.

So eine Uhr will auch bedient werden, vielleicht mit 2 Tastern ?

von Max H. (hartl192)


Lesenswert?

Uwe S. schrieb:
> Die 7-1 Segmente kann man nicht einsparen, aber die 4 Multiplexleitungen
> ließen sich aus 2 Bit kodieren.
Mit Schieberegister?

von Cyblord -. (cyblord)


Lesenswert?

Max H. schrieb:
> Uwe S. schrieb:
>> Die 7-1 Segmente kann man nicht einsparen, aber die 4 Multiplexleitungen
>> ließen sich aus 2 Bit kodieren.
> Mit Schieberegister?

Mit Logik! 2 Bits = 4 Zustände.

von Max H. (hartl192)


Lesenswert?

cyblord ---- schrieb:
> Mit Logik! 2 Bits = 4 Zustände
Das SR wäre für die 7-Segmente

Uwe S. schrieb im Beitrag #3598830:
> ja ist schon klar
Vllt. hat der TO sie ja bereits eingebaut.

Bei 14 Pins -> 11 IOs bleiben, wenn er für die Multiplexleitungen nicht 
in 2 bit codiert hat, ja keine IOs für die Bedienung und den geplanten 
Quarz mehr übrig: 11-7-4=0


Doppelpost: Beitrag "Timer mit Quarzoszillator"

: Bearbeitet durch User
von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

Danke erstmal für das Interesse.
Ich habe nur 2, 7-S.Anzeigen. Ich zeige zuerst für 2 Sekunden die 
Stunden (0-24) an danach für 2 Sekunden die Minuten(0-60).
Also 4 interne Variablen + eine Millisekundenvariable die gezählt wird.
Des Weitern sind 2 Taster dran (Uhrzeit zeigen und stellen), das wars.
2 Pins noch für die jeweiligen Anoden der 2 Anzeigen.
Macht dann 11 Pins also ist noch einer frei. In dem Fall der 
PA3/ADC3/T0/PCINT3 den ich dann für die Takeinspeisung am Timer 0 nutzen 
möchte.
Grund ist das das normale Verfahren (Quarz+2 Kondensatoren) an XTAL1 & 
XTAL2
2 Pins verbraucht und zudem den Takt vom Chip mit ändert. Auch wiel es 
nicht 100% sicher ist das der Quarz anschwingt.
Deshalb lieber Quarzoszillator.
Schaltplan kann ich auch malen falls es weiter hilft!?

GRuß Chris

von Max H. (hartl192)


Lesenswert?

Chris Webber schrieb:
> Macht dann 11 Pins also ist noch einer frei.
Den Reset würde ich nicht wegfusen, wenn du keinen HV-Programmer hast.

Du könntest einen fertige Quarzoszillator kaufen oder eine 
Pierce-Schaltung mit einen 74HC aufbauen.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

ja ich möchte einen fertigen Oszillator einbauen der mit einem Pin einen
Takt generiert.
OK stimmt Reset wege machen bedeutet Probleme...naja den lass ich einen 
Schalter weg und setelle die Uhr nur mit dem PC was wenn sie erstmal 
genau geht nicht oft wäre :-)

>> 2 Pins 4 Anzeigen? Geht denke ich mal nicht...
Dann müsste ich an je 2 Anzeigen die Anode brücken, also doppelte 
Leistung und sie wären immer zusammen an!
00= beide Pins kein Massezugang
01= nur 1 Pin gegen Masse
10= nur der andere Pin gegen Masse
11= beide Pins haben Massezugang
<< oder liege ich falsch? :-)

GRuß Chris

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

Chris Webber schrieb:
> 00= beide Pins kein Massezugang
> 01= nur 1 Pin gegen Masse
> 10= nur der andere Pin gegen Masse
> 11= beide Pins haben Massezugang

Ich würd es so machen (für 7-Seg mit gemeinsamer Kathode):
00 -> 7-Seg_1 Kathode auf Masse, der Rest auf Plus
01 -> 7-Seg_2 Kathode auf Masse, der Rest auf Plus
10 -> 7-Seg_3 Kathode auf Masse, der Rest auf Plus
11 -> 7-Seg_4 Kathode auf Masse, der Rest auf Plus

von Peter D. (peda)


Lesenswert?

Chris Webber schrieb:
> Macht dann 11 Pins also ist noch einer frei.

Kannst Du das mal aufdröseln?
Bei mir ergibt 2 * 7S schon 14 Pins oder gemultiplext 8 Pins.

Man könnte aber einen 74HC595 je Digit nehmen, dann sinds nur 3 Pins.

von Max H. (hartl192)


Lesenswert?

Nachtrag:
Ein mit einem 74HC138 könnte man mit 3+(7+1) 8 7-Seg multiplexen. +1 = 
Dezimalpunkt.

Peter Dannegger schrieb:
> Chris Webber schrieb:
>> Macht dann 11 Pins also ist noch einer frei.
>
> Kannst Du das mal aufdröseln?
Vermutlich so:
7 + 2 für die gemultiplexten 7-Seg
2 Taster


Mit Charlieplexing wären mit 9 Pins bis zu 8 7-Seg (mit DP) möglich:
http://www.maximintegrated.com/images/appnotes/1880/DI217Fig02.gif

: Bearbeitet durch User
von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Peter Dannegger schrieb:
> Chris Webber schrieb:
>> Macht dann 11 Pins also ist noch einer frei.
>
> Kannst Du das mal aufdröseln?
> Bei mir ergibt 2 * 7S schon 14 Pins oder gemultiplext 8 Pins.
>
> Man könnte aber einen 74HC595 je Digit nehmen, dann sinds nur 3 Pins.

7 Segmentanzeige = 7 Elemente = 7 Pins der dp (Punkt) brauche ich nicht.
Der ATtiny 84 hat 14 Pins, ohne +VCC und Masse sind das dann 12!
9 Pins für beide Anzeigen da multiplexen, sind also noch 3 übrig.
Aber den Reset will ich eventuell nicht weg machen also 2 Pins für 
Schalter, Quarz usw.

Gruß :-)

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

Chris Webber schrieb:
> 9 Pins für beide Anzeigen da multiplexen
Mit Charlieplexing geht's mit 8 Pins, es bleiben noch 3 + Reset übrig.

: Bearbeitet durch User
von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Max H. schrieb:
> Chris Webber schrieb:
>> 9 Pins für beide Anzeigen da multiplexen
> Mit Charlieplexing geht's mit 8 Pins, es bleiben noch 3 + Reset übrig.

Das ist eine gut Idee aber ich will das ganze so klein wie möglich 
halten da die Uhr wenn sie mal fertig ist am Arm sein wird.
Gut ich mach das ganze später mit SMD Bauteilen. Es ist die erste Übung 
für mein späters Projekt.
>> Die Nixie Armbanduhr die Steve Wozniak trägt << geil das Ding :-)

von Max H. (hartl192)


Lesenswert?

Chris Webber schrieb:
> Das ist eine gut Idee aber ich will das ganze so klein wie möglich
Charlieplexing sollte die Schaltung eigentlich nicht nennenswert 
vergrößern. Wenn die 2 IOs + Reset zu wenig sind, kannst du es so machen 
oder einen größeren µC nehmen...

von Peter D. (peda)


Lesenswert?

Chris Webber schrieb:
> da die Uhr wenn sie mal fertig ist am Arm sein wird.

Da würd ich erstmal am Stromsparkonzept arbeiten.
Der ATtiny saugt Dir ruckzuck die Batterie leer.
Ein ATmega48 mit Uhrenquarz ist erheblich sparsamer.

von Peter D. (peda)


Lesenswert?

Max H. schrieb:
> Mit Charlieplexing ...

Nicht jeder mag schwankende Helligkeit, je nach leuchtender 
Segmentanzahl.
Und nicht jeder möchte MCs über die maximalen Betriebswerte belasten.

von Max H. (hartl192)


Lesenswert?

Peter Dannegger schrieb:
> Nicht jeder mag schwankende Helligkeit, je nach leuchtender
> Segmentanzahl.
Wie kommst du darauf?

> Und nicht jeder möchte MCs über die maximalen Betriebswerte belasten.
Wenn so viel Strom durch die LEDs fließt, wird er die Batterie oft 
wechseln müssen. Bei den Pins, die ab die gemeinsame Anode/Kathode 
schalten könnte man noch einen Buffer (z.B. 2 Transistor oder MCP1416) 
dazwischen schalten.

Und wenn er auch ohne Charlieplexing genug freie Pins hat, kann er 
natürlich drauf verzichten.

: Bearbeitet durch User
von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

Danke erstmal.
Das sind durchaus alles wichtige Dinge (Stromverbrauch, charliplexing 
usw.)
die ich später bearbeiten möchte. Vielleicht nehme ich dann auch einen 
anderen Chip mal sehen.
Aber um auf meine ursprüngliche Frage zurück zu kommen:

Was muss ich beim anschließen eines Oszillators beachten?
Welche Fuse Bits muss ich umstellen oder muss ich das in diesem Fall
nicht?
Erkennt der Timer den Takt automatisch?
Muss ich Code programmieren der diese Funktion ermöglicht?

Gruß und Danke schonmal für euer Interesse an meiner Intention.

Chris :-)

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Chris Webber schrieb:
> Muss ich Code programmieren der diese Funktion ermöglicht?

Na klar, ein MC muß immer programmiert werden.
Ohne Programm führt er nur ein 0xFFFF (NOP) nach dem anderen aus und 
sämtliche Peripherie (Timer usw.) ist inaktiv.

: Bearbeitet durch User
von Chris (Gast)


Lesenswert?

ich meinet zusätzlicher code....nomalereweise macht man das über fuse 
bits deshalb die frage...

von Peter D. (peda)


Lesenswert?

Chris schrieb:
> nomalereweise macht man das über fuse
> bits deshalb die frage...

Hab ich noch nie gehört, daß Peripherie über Fuses initialisiert werden 
muß. Wäre auch schön blöd, dann könnte man zur Laufzeit ja nichts mehr 
umschalten.

Schau Dir einfach mal die Fuses im Datenblatt an, soviel sinds ja nicht 
(max 3 Byte).
Und dann schau Dir die Timer an und deren Register.

von Chris W. (Firma: H.) (vbweber)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mal den Schaltplan gemacht. An der blauen Leitung
kann der Oszillator angeklemmt werden.

@Peter: das ist ja eines der Probleme, dass ich mit dem Datenblatt nicht 
zurecht komme. Deshalb frag ich ja ob schon jemand erfahrung damit hat 
und weiß welche Fuse Bits ich verändern muss und was im Progamm dazu 
muss bzw. ob es eine Befehl gibt der den Timer ein externes Signal zum 
Takten verwenden lässt statt den internen Taktgeber. So ähnlich wie der 
Ladebefehl für den Prozessortakt?! :-)

Gruß

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Chris Webber schrieb:

> @Peter: das ist ja eines der Probleme, dass ich mit dem Datenblatt nicht
> zurecht komme.

Das musst du lernen. Welchen Absatz verstehst du nicht?

Der Timer muss natürlich konfiguriert werden. z.B. dass er durch einen 
externen Takt getrieben werden soll und den Prescaler. Das macht man im 
Programm in den entsprechenden Registern die im Datenblatt im Abschnitt 
für den Timer stehen.
An den Fuses musst du da nichts machen.

von (Gast) (Gast)


Lesenswert?

Chris Webber schrieb:
> eine Befehl gibt der den Timer ein externes Signal zum
> Takten verwenden lässt
Einen Befehl sicher nicht, du wirst aber wahrscheinlich etwas in ein 
Register schreiben müssen.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Chris Webber schrieb:
> @Peter: das ist ja eines der Probleme, dass ich mit dem Datenblatt nicht
> zurecht komme.

Die AVR-Datenblätter sind mit die besten.
Die Timertakteinstellung steht z.B. schön in der Table 11-9.
Zum Programmieren gehört Datenblatt lesen einfach dazu.

In Deiner Schaltung bringt der Quarz aber nur einen genaueren Zähltakt. 
Der Stromverbrauch bleibt und wäre mir viel zu hoch.

von Stefan F. (Gast)


Lesenswert?

Es soll doch möglichst klein werden, also erscheint mir der Einsatz 
eines 2, IC's für den Oszillator sinnlos.

Du kannst den 32kHz Quarz direkt an den ATtiny anschließen und damit 
sowohl CPU als auch Timer takten. 32kHz sind für so eine simple Uhr mehr 
als genug. Das ist auch für die Stromaufnahme vorteilhaft.

Du kannst mehrere Taster an einen Eingang anschließen, wenn du sie mit 
der LED-Matrix kombinierst:
1
zehner o--------+---|<|---[===]---o Segment a
2
                |
3
                +---|<|---[===]---o Segment b
4
                |
5
               ...
6
                +---|<|---[===]---o Segment g
7
                |       ____
8
                +--------  -------o Taster
Den zweite Taster schließt du an die Leitung für "einer" und "Taster" 
an.

Oder anderer Vorschlag: Schließe die Taster an einen analogen Eingang 
an:
1
              zum ADC
2
                |   1k     ____
3
Vcc o---[===]---+---[===]---  ----| GND
4
         10k    |   2k     ____
5
                +---[===]---  ----| GND
6
                |   3k     ____
7
                +---[===]---  ----| GND
8
                |   4k     ____
9
                +---[===]---  ----| GND
10
                |   5k     ____
11
                +---[===]---  ----| GND

von Chris W. (Firma: H.) (vbweber)


Angehängte Dateien:

Lesenswert?

Hallo :-),

ok ich konkretisiere mein Frage.

Bisher sieht mein Timer so aus:

TCCR0A |=(1<<WGM01); CTC Modus aktivieren
TCCR0B |=(1<<CS01);  Prescaler 8
OCR0A = 125-1;       Vergleicswert
TIMSK0 = (1<<OCIE0A);Interupsfunktion einschalten
sei();

Nun weiß ich das der externe Takt an T0 nicht mit Prescaler vorgeteilt 
werden kann. Zudem muss er 2.5mal kleiner sein als der CPU Takt
(10MHz & 32,768kHz)was soweit passt.

Welches Register ist nun für den externen Takt?

Anbei ein auszug aus allen Registern des Chips.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

@Peter D.: Danke dir. Ich bin wohl blind. Diesen Abschnitt hatte ich 
nicht gefunden, oh man :-( Das heist wohl:

TCCR0A |=(1<<WGM01); CTC Modus aktivieren

TCCR0B |=((1<<CS00)&&(1<<CS01)&&(1<<CS02));  externer Takt

OCR0A = 125-1;       Vergleichswert
TIMSK0 = (1<<OCIE0A);Interupsfunktion einschalten
sei();

@Stefan: Danke dir. Ich denke die Analogvariante wäre optimal:-)


@all: Ok 10000000Hz verbrauchen schon etwas Strom. Aber ich habe die 
Vermutung, dass die Segmente bei 32kHz leicht flackern werden?!
Wenn das mit 32kHz funktioniert, werde ich es so machen...trotzdem ist 
es gut zu wissen wie man einen externen Takt im Timer verarbeiten kann.
Ich werde daher beides mal machen und den Stromverbrauch messen.
Was ich vielleicht vergessen habe zu erwähnen ist, dass ich noch 
Anfänger mit AVR's bin :-)

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

Chris Webber schrieb:
> Ich denke die Analogvariante wäre optimal:-)
Wenn du den gesamten µC mit 32kHz betreibst, kannst du den eingebauten 
Oszillator mit externem Quarz verwenden. Den dadurch verbrauchten Pin 
könntest du durch Charlieplexing wieder gewinnen.
> Aber ich habe die
> Vermutung, dass die Segmente bei 32kHz leicht flackern werden?!
Das denke ich nicht. Wenn du die Anzeige mit 50Hz betreibst, flackert 
nichts.
Dann hättest du 10ms für jede Ziffer. Das sind 327 Zyklen bei 
2^15=32.768Hz.

von Stefan F. (Gast)


Lesenswert?

> Ich denke die Analogvariante wäre optimal

Mit etwas Nachdenken findest Du sicher auch eine Beschaltung mit weniger 
Widerständen.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

euer Ideen sind gut. Danke euch erstmal.

Aber wenn ich den Oszillator mit einem Pin an CLKI (PB0/XTAL1) hänge 
würde das doch auch funktionieren.
Dann wird nur 1 Pin verbraucht und die Frequenz vom Chip ist gleich der 
des Oszillators.
Dann muss ich aber die Fuse Bits ändern!?
Blöde Sache den wenn ich was falsch mache kann ich möglicherweis nicht 
mehr auf den Chip zugreifen also zerschossen....

von Max H. (hartl192)


Lesenswert?

Chris Webber schrieb:
> Dann wird nur 1 Pin verbraucht
und ein zusätzlicher IC. Wenn ich mich richtig erinnere sollte die 
Schaltung mal so klein wie möglich werden.

> also zerschossen....
Das ist der Flasche begriff, in dem Fall würde man verfused sagen. Der 
Chip ist dann nicht kaputt, mit einem HV Programmer kann man ihn retten.

: Bearbeitet durch User
von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

ja sollte klein sein...ich dachte ein oszillator reicht aber man 
benötigt noch einen uhrenchip.
Weist du wo ich etws über die fuse Bits nachlesen kann?
Dann versuche ich zuerst 1Quarz mit 2 Kondensatoren an Xtal1 und Xtal2.

GRuß

von Max H. (hartl192)


Lesenswert?

Chris Webber schrieb:
> aber man benötigt noch einen uhrenchip.
Das kann der µC auch machen.

> Weist du wo ich etws über die fuse Bits nachlesen kann?
Wissen nicht (mache nur PIC), ich würde sagen, mit an Sicherheit 
grenzender Wahrscheinlichkeit im Datenblatt des ATtiny 84.

von Chris (Gast)


Lesenswert?

Wenn ich einen Oszillator mit seinem Ausgangspin an CLKI (PB0/XTAL1) 
hänge
würde das nun als Takquell funktionieren oder nicht?

von Uwe S. (de0508)


Lesenswert?

Hallo  Chris,

warum schreibst Du den andauernd von 10MHz Takt ?

Den sehe ich in deiner Schaltung nicht.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

die 10MHz sind intern im ATtiny84 eingestellt. Die Frequenz gebe ich 
nicht von außen rein. Der Chip hat einen internen Quarzoszillator.

Ich wollte nur wissen ob ich einen Quarzoszillator welcher genauer 
arbeitet
von außen dran hängen kann an  CLKI (PB0/XTAL1)?

:-) Gruß

von Uwe S. (de0508)


Lesenswert?

Hallo

Chris Webber schrieb:
> 10MHz sind intern im ATtiny84

Wie das, ich arbeite schon lange mit den atMega und den atTiny, aber das 
ist mir neu !

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

die 10MHz sind intern im ATtiny84 eingestellt.

#define F_CPU  1000000UL     // Prozessortakt festlegen

Sagt dir die Codezeile was?!

Eine Quarzoszillator an CLKI (PB0/XTAL1)wird immerhin hier im 
AVR-Tutorial vorgestellt sogar mit Vor- und Nachteilen....

Aber dann nicht weiter darauf eingegangen :-(

Daher die Frage wie ich dir Fuse Bits einstellen muss?

:-) Gruß

von Cyblord -. (cyblord)


Lesenswert?

Chris Webber schrieb:
> Hallo,
>
> die 10MHz sind intern im ATtiny84 eingestellt.
>
> #define F_CPU  1000000UL     // Prozessortakt festlegen
>
> Sagt dir die Codezeile was?!

Der interne RC-Oszi im Tiny84 läuft mit 8 MHz. Per Fuse auf 1 MHz 
teilbr. 10 MHz geht niht.
Deine Codezeile sagt mir nur, dass du dem Compiler eine falsche 
Taktfrequenz vorgibst und daher alle deine Zeiten im Programm nicht 
stimmen.

Die tatsächliche Frequenz wird per Fuses vorgegeben oder per externen 
Oszi. Nicht im Code.

gruß cyblord

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

ah wusste ich nicht... hatte ich aus einem tutorial... erfunden habe ich 
die zeile ja nicht...Frage mich nur wieso dann alles so wunderbar 
klappt?

//---8 Bit Timer CTC Modus aktivieren---------------------------------
TCCR0A |= (1<<WGM01);    // im TCCR0A Register Bit für CTC Modus setzen
TCCR0B |= (1<<CS01);    // im TCCR0B Register das entsprechende Bit für 
Vorteiler 8 setzen
OCR0A = 125-1;        // Überlaufwert festlegen im Register OCR0A max. 
Wert 255 Bit., entsprechend berechnen für die gewollte Zeit
              // 1.000.000Hz/8=125.000,  125.000Hz/125=1.000Hz,  T=1/f = 
1/1000Hz =0,001 Sekunden
              // Beim erreichen von 125 wird 
ISR(TIM0_COMPA_vect)ausgeführt, und somit die Variable "millisekunden" 
um 1 erhöt, nach 1000 Ausführungen ist 1 Sekunde vergangen!

TIMSK0 = (1<<OCIE0A);    // Interupsfunktion einschalten
sei();

von Peter D. (peda)


Lesenswert?

Nimm einfach nen ATmega48 mit 32kHz Quarz an T2 im Power-Save Mode, dann 
braucht er nur 1µA.

Und er ist gleich groß, wie der ATtiny84 (4*4mm² im 28M1 Package).

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Chris Webber schrieb:
> ah wusste ich nicht... hatte ich aus einem tutorial... erfunden habe ich
> die zeile ja nicht...

Die Zeile ist auch ok. Aber sie sagt dem Compiler nur, mit welchem Takt 
der Controller faktisch arbeitet. Sie legt diesen Takt aber nicht fest.

Also wäre das erste, dass du rausfindest wie schnell dein Controller 
wirklich arbeitet. Mit dem internen RC-Oszi wird das 8 MHz, oder bei 
gesetzter CKDIV8 Fuse, 1 MHz sein. Und das trägst du in diese Zeile 
korrekt ein. Das wäre mal der erste Schritt. Und bitte lies endlich mal 
das Datenblatt. Da steht das alles drin. Dann musst du nicht raten was 
du da überhaupt machst und unreflektiert Zeilen aus dem Netz kopieren. 
Das bringt nichts.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Chris Webber schrieb:
> rage mich nur wieso dann alles so wunderbar
> klappt?

Weil du in deiner Timerprogrammierung ja vom richtigen Wert ausgehst, 
nämlich den 1000000 Hz = 1 MHz. Also klappt alles. Du solltest eben nur 
nicht dem Irrtum unterliegen, das der Tiny mit 10MHz läuft, sondern mit 
1 MHz. Falls das mal wichtig werden sollte, ist ein Maschinenzyklus also 
1µs und nicht 0,1µs.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

:-) ha ja sehe ich, oh man wie dumm kann man sein.....habe ich 1MHz mit 
10MHz
verwechselt...

Aber auch nur weil im Datenblatt 2,7V-5,5V = 0-10MHz steht. Habe 
übersehen das da steht "active mode= 1MHz system clock" oh man...

von Cyblord -. (cyblord)


Lesenswert?

Chris Webber schrieb:
> :-) ha ja sehe ich, oh man wie dumm kann man sein.....habe ich 1MHz mit
> 10MHz
> verwechselt...
>
> Aber auch nur weil im Datenblatt 2,7V-5,5V = 0-10MHz steht. Habe
> übersehen das da steht "active mode= 1MHz system clock" oh man...

Du verstehst da was falsch...

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.