Forum: Mikrocontroller und Digitale Elektronik ATTiny85 als Oszillator (8.192 MHz XTAL, output 2.048 MHz)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ernst H. (eamsel)


Lesenswert?

Hallo Schwarmwissen,

so langsam verzweifele ich an der KI bei diversen Suchmaschinen. Da 
kommt nur noch Unsinn heraus. Und man merkt täglich, dass man alt wird 
und die Zeiten der PDP11/40 (VAX, Z80, 6802, ...) vorbei sind.

Mein Problem: Ich benötige für ein (FPGA-)Projekt einen externen 2.048 
MHz Takt. Dazu habe ich einen AT85 (fuse EF,DF,FF) mit einem 8.192 MHz 
Quarz zum Laufen gebracht.

Jetzt benötige ich einen exakten 2.048 Takt auf PB0, PB1 oder PB2. Da 
sollte ja eigentlich eine Interrupt-Routine mit OCR0x genügen.

Kann mir einer aus dem Schwarmwissen einen Tipp geben?

Bitte kein RTFM. Danke.

Ernst

von S. L. (sldt)


Lesenswert?

1
.include    "tn85def.inc"
2
3
    sbi     DDRB,0                      ; OC0A
4
    ldi     r16,(1<<WGM01)+(1<<COM0A0)  ; CTC, toggle OC0A
5
    out     TCCR0A,r16
6
    ldi     r16,2 -1
7
    out     OCR0A,r16
8
    ldi     r16,(1<<CS00)               ; /1
9
    out     TCCR0B,r16
10
    rjmp    pc

von Rick (rick)


Lesenswert?

Ernst H. schrieb:
> Ich benötige für ein (FPGA-)Projekt einen externen 2.048 MHz Takt.
I.d.R. hat man beim FPGA (viel) mehr Freiheiten seinen Takt zu 
gestalten.

Um was für ein FPGA handelt es sich denn?
Hast du Zugriff auf das FPGA-Design?
Wenn ja, welche Taktquellen stehen im bzw. am FPGA zur Verfügung?

Beitrag #7902620 wurde vom Autor gelöscht.
Beitrag #7902622 wurde vom Autor gelöscht.
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ernst H. schrieb:
> Da sollte ja eigentlich eine Interrupt-Routine mit OCR0x genügen.

Du willst jeden zweiten CPU-Takt einen Ausgangspegel umschalten und 
denkst, dass man dazu eine längliche ISR benutzen kann?

Entweder nimmst du einen Waveform-Ausgang des Timers (wie gezeigt 
wurde). Alternativ produziert die Folge
1
1: sbi x,POUTB
2
   cbi x,POUTB
3
   rjmp 1b

gerade so dein 1:4, aber nicht mit 50 % Tastverhältnis.

: Bearbeitet durch Moderator
von Wastl (hartundweichware)


Lesenswert?

Ernst H. schrieb:
> so langsam verzweifele ich an der KI bei diversen Suchmaschinen.

Da sieht man mal wieder dass man mit Brain-Anwendung oft viel
weiter kommt als mit Belästigung diverser KI-Maschinen. Noch
dazu bei so einfachen Problemstellungen.

Bei dir braucht es allerdings noch etwas Nachhilfe bei den
Grundlagen zur Mikrocontroller-Programmierung. Da hilft auch
keine KI. Vor den Erfolg haben die Götter der Schweiss gesetzt.

von S. L. (sldt)


Lesenswert?

> Alternativ produziert die Folge ...

Der vorausgesetzte ATtiny85 gehört zur AVRe-Klasse, folglich benötigt 
sbi bzw. cbi 2 Takte, die gezeigte Folge erzeugt 1:6.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

ok

von Jens M. (schuchkleisser)


Lesenswert?

Warum nimmt man statt 8MHz Quarz plus programmiertem Controller nicht 
sofort einen 2MHz Oszillator? Offensichtlich sind für den Controller 
keine weiteren Aufgaben geplant außer der Erzeugung des Takts.
Ein entsprechender Oszillator dürfte ähnlich im Stromverbrauch sein 
(wenn nicht geringer) und benötigt m.E. definitiv weniger Platz.
Oder ist das so ein "Einzelstück, ich hab aber jede Menge 8er Quarze und 
Attinys in der Lade liegen, die kommen dann endlich mal weg"-Ding?
Ich meine außerdem, das diverse PICs einen Quarz/4-Hardwareausgang 
haben, d.h. das ginge sogar ohne großes Programm ;) Bin mir aber nicht 
sicher ob das mit einem Quarz geht und nicht einen Oszi erfordert.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

S. L. schrieb:
> Der vorausgesetzte ATtiny85 gehört zur AVRe-Klasse, folglich benötigt
> sbi bzw. cbi 2 Takte, die gezeigte Folge erzeugt 1:6.

Dann eben so. Siehe pin toggle function im Datenblatt.
1
    ldi r16,0x7
2
    out DDRB, r16
3
loop:
4
    out PINB, r16
5
    out PINB, r16
6
    rjmp loop

von Carsten-Peter C. (carsten-p)


Lesenswert?

Moin,
vielleicht kannst du den Timer 0 in Mode 7 also Fast PWM laufen lassen. 
Im Register OCR0A müsste dann der Wert 4 stehen. Im Register OCA0B der 
Wert 2. Am Ausgang OCR0B – PB1 müsste dann ein Signal ganz ohne INT 
entstehen. Das habe ich jedoch nicht getestet.
Gruß
 Carsten

von Bernd N. (_bn_)


Lesenswert?

Ernst H. schrieb:
> Jetzt benötige ich einen exakten 2.048 Takt auf PB0, PB1 oder PB2. Da
> sollte ja eigentlich eine Interrupt-Routine mit OCR0x genügen.
1
#include <avr/io.h>
2
3
void setup_timer0_toggle_2048mhz() {
4
    // Set PB0 (OC0A) as output
5
    DDRB |= (1 << PB0);
6
7
    // Timer0 in CTC-Modus (Clear Timer on Compare Match)
8
    TCCR0A = (1 << COM0A0) | (1 << WGM01); // Toggle OC0A on Compare Match, CTC mode
9
    TCCR0B = (1 << CS00);  // Prescaler = 1 → volle Taktfrequenz: 8.192 MHz
10
11
    OCR0A = 1; // Toggle alle 2 Takte → 8.192 MHz / 4 = 2.048 MHz Rechteck
12
}
13
14
int main(void) {
15
    setup_timer0_toggle_2048mhz();
16
17
    while (1) {
18
    }
19
}
Kanns leider mangels HW nicht testen.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Carsten-Peter C. schrieb:

> vielleicht kannst du den Timer 0 in Mode 7 also Fast PWM laufen lassen.
> Im Register OCR0A müsste dann der Wert 4 stehen. Im Register OCA0B der
> Wert 2. Am Ausgang OCR0B – PB1 müsste dann ein Signal ganz ohne INT
> entstehen. Das habe ich jedoch nicht getestet.

Fast richtig. Die korrekten Werte sind:
OCR0A=3
OCR0B=1

Dann paßt das.

von Cartman E. (cartmaneric)


Lesenswert?

Ernst H. schrieb:
> Hallo Schwarmwissen,
>
> so langsam verzweifele ich an der KI bei diversen Suchmaschinen. Da
> kommt nur noch Unsinn heraus. Und man merkt täglich, dass man alt wird
> und die Zeiten der PDP11/40 (VAX, Z80, 6802, ...) vorbei sind.

Offenbar sind auch deine Synapsen dort zurückgeblieben.

> Mein Problem: Ich benötige für ein (FPGA-)Projekt einen externen 2.048
> MHz Takt. Dazu habe ich einen AT85 (fuse EF,DF,FF) mit einem 8.192 MHz
> Quarz zum Laufen gebracht.
>
> Jetzt benötige ich einen exakten 2.048 Takt auf PB0, PB1 oder PB2. Da
> sollte ja eigentlich eine Interrupt-Routine mit OCR0x genügen.

Ein 74xy74, als Muster eines Dual-D-Flipflops, kann das auch.
Das braucht dann natürlich noch einen 8192 kHz Taktgenerator.

Wobei jedes FPGA das ich kenne, dass auch mit ein wenig VHDL/Verilog
aus seinem primären Takt ableiten, und auf einem Pin ausgeben könnte.

von Ernst H. (eamsel)


Lesenswert?

Hallo zusammen,

Danke für die vielen Antworten.

vorab: ja, es ist ein "Einzelstück", zufällig hatte ich in meiner 
Bastelkiste mehrere Attiny 85,84 und 2313. Neben mehreren 16 MHz 
Oszillatoren hatte ich noch einige 16, 8 und 8.192 MHz Quarze. Ich 
benötige aber für mein Projekt nicht 2.000, sondern 2.048 MHz (2**11!). 
Also fiel meine Wahl auf den vorhandenen 8.192 MHz Quarz. Zur Zeit (auch 
aus der Bastelkiste) habe ich zum ersten Test einen Altera Cyclone ii 
EP2C5T144 Mini-Board. Mit dem 50 MHz Oszillator kann ich jedoch mit PLL 
keine 2.048.000 Hz erzeugen.

In einem anderen Thread werde ich mal mein Projekt vorstellen. Es geht 
ganz grob um "Geschichte der Computer", also um den "Nachbau" eines 
Rechners mit FPGA.

Neben diversen Assemblern programmiere ich u.A. auch in C, C++, Haskell, 
Clash, Perl, Verilog (aber nicht VHDL), Step-7, Rockwell ControlLogix, 
...

Manchmal hat man bei den einfachsten Problemen Aussetzer. Die meisten 
Probleme fangen an mit: "Mal >SCHNELL< ... (z.B. einen 2.048 MHz 
Quarzoszillator aufbauen)".

Ernst

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Brauchst du die 2.048Mhz als Taktsignal fuer irgendwas ausserhalb des 
FPGAs oder wuerde nicht auch ein entsprechendes CLK_Enable Signal 
innerhalb des FPGAs reichen, was halt alle 24..25 Taktzyklen (vom 
vorhandenen 50MHz Takt ausgehend) mal fuer einen Takt auf High geht, so 
dass sich im Mittel 2.048MHz ergeben?

Hier mal n Link, wie jemand aus 50MHz 4.43361875MHz generiert hat, und 
damit wohl zufriedener war, als ich erwartet hatte:

Beitrag "Re: krumme Frequenzen aus 50Mhz erzeugen"

Gruss
WK

: Bearbeitet durch User
von Soul E. (soul_eye)


Lesenswert?

Kann man an so einem FPGA nicht einfach zwei Pins als Inverter 
konfigurieren und da den Quarz und zwei Kondensatoren anschließen? 
Synchron durch vier dividieren ist dann ja kein Problem mehr.

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Ernst H. schrieb:
> Manchmal hat man bei den einfachsten Problemen Aussetzer. Die meisten
> Probleme fangen an mit: "Mal >SCHNELL< ... (z.B. einen 2.048 MHz
> Quarzoszillator aufbauen)".

Die 2,048 MHz gibt es auch als fertiges Bauteil mit 4 Pins, kostet 50 
Cent und da kann man sich dann die ganze Akrobatik mit den verstaubten 
Teilen aus der in diesem Forum berühmten „Bastelkiste” sparen – 
heutzutage würde man dann auch zu der SMD-Variante mit 3.3V greifen, 
z.B. als SMD7050 oder SMD5032. Bei solchen Geschichten fragt man sich 
natürlich auch, wie es denn überhaupt mit dem erwähnten FPGA-Projekt 
klappen soll, wenn jemand bei so einer Oszillator- oder ATTINY-Lappalie 
die sogenannte „KI” oder ein Forum bemühen muss – in beiden Fällen wirft 
das kein gutes Licht auf die Sache, aber das nur so nebenbei. Dass man 
den Takt einfach durch zwei D-Flipflop eines FPGAs durch vier teilen 
oder generell intern zu vielen brauchbaren Frequenzen aufbereiten kann 
(Stichwort PLL oder DCMs bei vergleichbaren Xilinx-Produkten), sollte 
einem „Entwickler” in diesem Zusammenhang eigentlich auch schon klar 
sein – wenn er das nicht weiß oder kennt, sollte er sich unbedingt 
zeitnah damit auseinandersetzen, denn dieses Thema wird einen immer 
wieder einholen. Bei einem zusätzlichen, externen Takt schafft man sich 
ferner in der Regel auch ein neues Problem, denn am Ende des Tages muss 
es womöglich mit den 50 MHz des FPGAs irgendwie synchronisiert werden, 
aber wer weiß schon, was das für ein Rechner im FPGA sein soll – ist ja 
bis dato alles streng geheim. Vor dem „Bau” eines „Rechners” im FPGA 
empfehle ich jedem den „Bau” von deutlich einfacheren Dingen in einem 
FPGA, wie beispielsweise Blink- oder Lauflicht etc, oder das ganze gar 
erstmal mit einem CPLD, die deutlich einfacher handzuhaben und zu 
begreifen sind, zu üben.

: Bearbeitet durch User
von Ernst H. (eamsel)


Lesenswert?

@Gregor J.
Jawoll! Blinklichter! Oder Lauflichter!

Es ist kein geheimes Projekt (s.u.)

Ich war zu faul aufzustehen und 3 m entfernt die ausgedruckte Version 
vom Manual des AT85 zu holen. Also habe ich den "Gockel" angefragt, auf 
welchem Pin der CKOUT (bzw. CLKO) liegt. Antwort mit KI: PB2. Falsch, 
nichts ging. (liegt an PB4, wo auch XTAL2 liegt). Also mal zu später 
Stunde die Freunde im Forum fragen.

@all
Zum Projekt: Ich habe vor ca. 15 Jahren angefangen, den Apollo Guidance 
Computer (AGC) zu simulieren. Damit meine ich nicht das Verhalten zu 
emulieren, sondern die Hardware zu simulieren. Der/die Schaltpläne sind 
veröffentlicht. Der AGC besteht aus fast 6000 NOR-Gattern. Um an jeder 
Stelle die Signale "messen" zu können, habe ich in Perl eine 
Simulationsumgebung und eine Sprache nebst Compiler entwickelt, um den 
kompletten AGC zu simulieren. Allerdings war die Laufzeit der 
Perl-Simulation 1000-10000 mal länger als in Echtzeit. Die Schaltung 
habe ich in monatelanger Arbeit in meiner neuen Sprache beschrieben.

Und siehe da, er läuft an und ich kann an allen möglichen Stellen das 
Verhalten und die Signale messen und plotten. Dann ca. 10 Jahre Pause, 
Zeit für Ehefrau, andere Projekte, ...

Jetzt möchte ich mein Modell in Hardeware abbilden.Die 50 MHz nutze ich, 
um einen 10 ms "propagation delay" für die Chips zu erzeugen. Asynchron! 
dazu wird ein 2.048 MHz Takt benötigt, der den Systemtakt des AGC 
darstellt. Durch diverse Teiler wird da ein Sekundentakt ermittelt, der 
u.A. die Missionszeit (seit Start) anzeigt.

Endergebnis soll eventuell eine Vorlesung "Geschichte der technischen 
Informatik" sein.

Viele Grüße, Ernst

p.s. Ich weiß, es gibt in C++ eine sehr gute Emulation des AGC, dies ist 
aber keine Simulation auf Hardwareebene. Es gibt auch mehrere 
FPGA-Projekte zum AGC, aber ich möchte mein eigenes haben.

von Peter D. (peda)


Lesenswert?


von Rick (rick)


Lesenswert?

Ernst H. schrieb:
> dazu wird ein 2.048 MHz Takt benötigt, der den Systemtakt des AGC
> darstellt.

Dafür reicht die von WK verlinke Variante dicke aus.
Beitrag "Re: ATTiny85 als Oszillator (8.192 MHz XTAL, output 2.048 MHz)"

von Axel S. (a-za-z0-9)


Lesenswert?

Ernst H. schrieb:
> Ich war zu faul aufzustehen und 3 m entfernt die ausgedruckte Version
> vom Manual des AT85 zu holen. Also habe ich den "Gockel" angefragt, auf
> welchem Pin der CKOUT (bzw. CLKO) liegt. Antwort mit KI: PB2

Tja, reingefallen. KI als Suchassistent ist mal so richtig Scheiße. Wenn 
man sich die rohen Google-Treffer anschaut, kommt man schnell dahinter, 
daß es widersprüchliche Antworten gibt. Wenn man der "KI" glaubt, 
bekommt man zwar eine Antwort, hat aber keinerlei Anhalt ob die auch 
richtig ist.

Was heutzutage als KI - insbesondere als KI Suchassistenz - verkauft 
wird, ist krude Statistik über die Suchergebnisse. Wenn 99% das falsche 
sagen und nur 1% richtig liegt, dann kriegt man die falsche Antwort. Und 
mit der Tendenz, hemmunglos voneinander abzuschreiben, verbreiten sich 
falsche Antworten mindestens so schnell wie richtige. Und die "KI" 
befeuert das noch.

> Also mal zu später Stunde die Freunde im Forum fragen.

Anstatt aufzustehen? Oder mal das Datenblatt als PDF anzusehen? Ich 
meine dafür gibt es doch Datenblätter. Wie kommt man da überhaupt 
darauf, Google zu fragen?

von Obelix X. (obelix)


Lesenswert?

http://nmp24.de/?Digitaltechnik:Frequenzteiler

Kann man die Frequenzteiler nicht im FPGA umsetzen?

: Bearbeitet durch User
von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Axel S. schrieb:
> Anstatt aufzustehen? Oder mal das Datenblatt als PDF anzusehen? Ich
> meine dafür gibt es doch Datenblätter. Wie kommt man da überhaupt
> darauf, Google zu fragen?

Der Grund dafür könnte durchaus die berühmte Datenblattphobie sein oder 
'ich lasse einfach mal die anderen es für mich erledigen', denn 
schließlich gibt es genügend pathologisch konkurrierende Jungens mit 
Helfersyndrom hier, die das machen werden, was ja am Ende tatsächlich 
auch geschah. Dass man nicht mal in der Lage ist, einen bestimmten Pin 
eines ATTINY85 zuzuordnen oder generell zu finden, wo es im Grunde 
genommen insgesamt nur acht bzw. sechs relevante davon und eine 
explizite Zeichnung im Datenblatt von diesen gibt, und lächerliche fünf 
Zeilen C-Code in der IDE mithilfe des Datenblatts zu verfassen, 
offenbart eigentlich den mentalen Zustand oder Trip, auf dem man gerade 
unterwegs ist. Ausgedruckt war das Datenblatt ja schon, aber am besten 
erstmal schön an die Seite tun und bloß nicht reinschauen, denn es 
könnte ja wehtun – lieber stundenlang überall außerhalb der Wohnräume 
fragen, statt einfach mal in das Ausgedruckte zu schauen oder mit der 
Maus auf die PDF-Doku zu klicken.

___________
Obelix X. schrieb:
> Kann man die Frequenzteiler nicht im FPGA umsetzen?

Es kommt immer auf das Konzept an, aber normalerweise versucht man schon 
die Ressourcen eines FPGAs so zu nutzen, dass man außenrum kaum etwas 
derartiges braucht, denn meistens ist ja alles notwendige im Silizium 
schon vorhanden und man muss nur in der Lage sein, den Inhalt nutzen zu 
können – hier stößt man aber auf das gleiche Problem, denn man muss auch 
in diesem Kontext Datenblätter studieren und in Falle eines FPGAs sogar 
deutlich mehr blättern, lesen und verstehen lernen; ein ATTINY85 ist im 
Vergleich dazu nur eine kleine Babykacke. Und wenn man sich dann gar 
nicht oder nicht genügend mit FPGAs auskennt, macht man halt komische 
bzw. unsinnige Dinge, wo dann von hinten durchs Auge etwas angeschlossen 
und auf merkwürdige Weise betrieben wird. Im besten Fall benötigt man 
nur einen externen, hochfrequenten Oszillator für den FPGA und lässt 
sich die gewünschten Frequenzen intern bereitstellen, um alles andere, 
selbstentworfene, was auch im FPGA sitzt, damit zu betreiben. 
Bestenfalls kommuniziert man dann mit der Außenwelt (LCD, Taster etc.) 
nur noch über die selbstdefinierten IOs, denn auch so etwas wie die 
Pull-UPs, Pull-Downs oder Spannungspegel sind in der Regel inclusive und 
einstellbar.

___________
Ernst H. schrieb:
> Endergebnis soll eventuell eine Vorlesung "Geschichte der technischen
> Informatik" sein.

Ja nee ist klar, sagt ja auch der richtige, der nicht einmal den CLKO 
beim ATTINY85 finden konnte – träumen ist aber nach wie vor erlaubt und 
übrigens: wenn Du Dich weiter so „intensiv” wie bisher mit Deinen 
Datenblättern beschäftigst, könnte es auch auf eine Vorlesung „Warum ich 
es mit dem AGC in einem FPGA als eigene Kreation nicht geschafft habe” 
hinauslaufen – aus wissenschaftlicher Sicht ist es bestimmt mindestens 
genauso interessant.

von Bauform B. (bauformb)


Lesenswert?

Jens M. schrieb:
> Warum nimmt man statt 8MHz Quarz plus programmiertem Controller nicht
> sofort einen 2MHz Oszillator?
> Ein entsprechender Oszillator dürfte ähnlich im Stromverbrauch sein
> (wenn nicht geringer) und benötigt m.E. definitiv weniger Platz.

Wenn es vor allem klein sein soll: RV-3032-C7, 3.2x1.5x0.8mm plus 1 
Abblock-C. Der erzeugt aus dem internen Uhrenquarz bis zu 67MHz, 
programmierbar in 8kHz-Schritten. Funktioniert mit 1.8 bis 5V und 
braucht bei 3.3V, 2MHz und 10pF Last weniger als 100uA. Muss einmalig 
per I2C programmiert werden.

von Nemopuk (nemopuk)


Lesenswert?

Ernst H. schrieb:
> Ich war zu faul aufzustehen und 3 m entfernt die
> ausgedruckte Version vom Manual des AT85 zu holen.

Warum druckt man so etwas aus? Mir wäre die Volltext-Suche dabei zu 
langsam.

von Ernst H. (eamsel)


Lesenswert?

Das Einzigste, was einige der Foristen hier können, ist Andere 
zusammenzuscheißen(sic) und für saudumm erklären. Trotzdem danke an 
alle, die etwas sinnvolles beigetragen haben.

: Bearbeitet durch User
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.