Forum: Mikrocontroller und Digitale Elektronik Taktquelle ändern


von Ralf (Gast)


Lesenswert?

Hi!

Gibt es die Möglichkeit die Fuse Bits des laufenden MCs zu verändern, 
daß dieser bspw. zunächst durch einen Quarz getaktet wird und dann durch 
den internen Oszillator z.B. durch einen Interrupt?! Hoffe die Frage ist 
nicht allzu blöd...

von Uwe .. (uwegw)


Lesenswert?

Ist blöd, weil du nicht verrätst, um welchen µC es geht.

von Ralf (Gast)


Lesenswert?

at90can128 von atmel

von Zacc (Gast)


Lesenswert?

Nein, das geht mit den AVR nicht.  Die MSP430 koennen das. Die AVR 
koennen vom Hauptoszillator auf einen 32kHz schalten, das war's

von Mehmet K. (mkmk)


Lesenswert?

"Die AVR koennen vom Hauptoszillator auf einen 32kHz schalten, das 
war's"

Meiner Meinung nach: nicht mal das. Der 32kHz speisst nur den 
Timer/Counter2, ohne die Möglichkeit, den CPUclk, IOclk etc. damit zu 
fahren.
Zumindest beim Atmega32 ist es so.

von Ralf (Gast)


Lesenswert?

Ok, danke...das hilft mir dann schon mal...oder auch nicht

von Uwe .. (uwegw)


Lesenswert?

Neuere AVRs können die Taktrate über nen Prescaler im Betrieb 
umschalten, die Taktquelle selbst aber nicht.

Mal ne andere Frage: wozu soll das gut sein? Stromsparen? Zieht denn ein 
Quarz so viel mehr als der intern RC?

von Zacc (Gast)


Lesenswert?

Die Leute von Atmel sind offenbar ueberzeut dass die jeztigen 
Moeglichkeiten reichen. Man nimmt entweder einen Quarz wenn man 
kommunizieren will, oder den RC wenn nicht. Der RC eines PIC ist 
genuegend genau fuer serielle Kommunikation, beim AVR ist das nicht der 
Fall. Und dann schaltet man den Prozessor ab wenn man ihn nicht braucht. 
Dazu gibt es eine ganze Palette von sleepstates. Wenn man noch besser 
werden will, nimmt man den 32KHz mode um lange Zeit zu schlafen. Bei den 
sleepstates muss man jeweils beachten, dass das Aufwachen nicht 
unbedingt sofort geschieht. Das Anschwingen des Quarzen kann man zB in 
den Fusebits einstellen, das kann bis 16k Zyklen dauern plus 65ms delay.

von Ralf (Gast)


Lesenswert?

Nun ich will mit dem Mikrocontroller Widerstände messen und das bei 
Temperaturen zwischen -40 und 125°C Der AT90CAN hält diese Temperaturen 
aus...ein Quarz leider nicht. Deshalb muss der interne Oszillator 
herhalten. Um aber die Messdaten nach den Messungen via UART zum PC zu 
schicken brauche ich (soweit ich das hier in dem Forum gelesen hab) 
einen möglichst genauen Takt und den kriegt man mit dem RC nich hin

@Zacc:

meinst du die PICs könnten das oder geht die Kommunikation bei diesen 
Temperaturen auch flöten...dann würde ich nen PIC 
nehmen...vorrausgesetzt da gibt es auch welche die 125° abkönnen...

von spess53 (Gast)


Lesenswert?

Hi

Du könntest evtl. eine externe Taktquelle benutzen.Wenn die thermisch
abgeschirmt ist, erübrigt sich die Umschaltung.

MfG Spess

von Netbird (Gast)


Lesenswert?

Hier im Forum wird ständig verbreitet, dass serielle Kommunikation mit 
dem internen Taktgeber nicht klappt.

Das stimmt nach meinen Erfahrungen nicht allgemein: Ich habe mehrere 
Mega8 und Mega16 mit internem Takt 1MHz und der Baudrate 2400 im 
Einsatz, es gab noch nie Probleme! Ganz banal programmiert mit Bascom 
...

Solltest Du also keine (zu) hohe Taktfrequenz und Baudrate haben: Kein 
Problem oder zumindest probieren, dann weiß man's ...

von Gast (Gast)


Lesenswert?

165°C Temperaturdifferenz und RC Oszillator ist allg. eine sehr 
schlechte Idee.
Auch ein Pic hat in so einem Fall arge Probleme mit der 
Frequenzstabilität.
Am einfachsten wäre ein RC Oszi und RS232 mit RTS/CTS und X-Modem 
Protokoll.

von Uwe .. (uwegw)


Lesenswert?

Gast wrote:
> 165°C Temperaturdifferenz und RC Oszillator ist allg. eine sehr
> schlechte Idee.
Kommt drauf an, wie genau die Frequenz während der Messung sein muss. 
Wenn die Schaltung vor dem Auslesen wieder auf Zimmertemperatur gebracht 
wird, ändert sich zumindestens fürs Auslesen nichts. Mit niedriger 
Baudrate kann es klappen, vor allem, wenn man den internen RC noch mal 
nachkalibirert.

Andere Idee: Die Daten über irgendeine synchrone Schnittstelle ausgeben, 
evtl nen zweiten AVR als Schnittstellenwandler dazwischen.

von Currywurst (Gast)


Lesenswert?

Es gibt Quarze für den Erweiterten Temperaturbereich zu kaufen.
Normale Quarze haben jenseits ihrer nominalen Temperatur zwar nicht mehr 
ihre Nennfrequenz, funktionieren aber immer noch genauer als ein 
Interner RC Oszillator. Quarze hören erst beim überschreiten der 
Curie-Temperatur auf zu Schwingen. Diese liegt mit über 500 Grad 
jenseits von Gut und Böse.

von A.K. (Gast)


Lesenswert?

> Hier im Forum wird ständig verbreitet, dass serielle Kommunikation
> mit dem internen Taktgeber nicht klappt.

Wenn du das ein klein wenig umformulierst, wirds richtig: "Hier im Forum 
wird ständig verbreitet, dass serielle Kommunikation mit dem internen 
Taktgeber nicht zuverlässig klappt.

Ich mach das auch mal mit interem Osz, sofern nur darum geht, in der 
Entwicklungsphase den Debug-Output seriell zu übertragen. Man sollte 
indes davon Abstand nehmen, produktiv so zu arbeiten.

von Johannes M. (johnny-m)


Lesenswert?

@Netbird:
> Das stimmt nach meinen Erfahrungen nicht allgemein:
Richtig, allgemein kann es funktionieren, wenn der µC in einem sehr 
engen Temperaturbereich betrieben wird und der interne Oszillator 
entsprechend kalibriert ist. Für den vom OP angegebenen 
Temperaturbereich kann man allerdings mit 100%iger Sicherheit sagen, 
dass es ohne viel Zusatzaufwand definitiv nicht funktioniert. Schau Dir 
mal im Datenblatt die Frequenz-Temperatur-Diagramme an. Dann wirst Du 
schnell feststellen, dass das so nichts wird.

Wie weiter oben bereits erwähnt gibt es in dem Temperaturbereich bereits 
mit Quarzen erhebliche Probleme. In so einem Fall braucht man einen 
RC-Oszillator gar nicht zu erwähnen. Die einzige mit vertretbarem 
Aufwand realisierbare Möglichkeit wäre eine Temperaturkompensation über 
das OSCCAL-Register des µC anhand der erwähnten Diagramme im Datenblatt. 
Dazu müsste die Temperatur des µC gemessen und der OSCCAL-Wert 
entsprechend angeglichen werden.

@Uwe:
> Mit niedriger Baudrate kann es klappen
Der Fehler ist relativ und hat nichts mit der Baudrate zu tun, solange 
sich die betrachteten Baudraten bei der aktuellen CPU-Frequenz mit 
gleicher Genauigkeit einstellen lassen! Wenn Es mit 9600 Baud nicht 
klappt, dann auch nicht mit 2400 Baud oder so.

von A.K. (Gast)


Lesenswert?

> Der Fehler ist relativ und hat nichts mit der Baudrate zu tun

Bischen schon. Wenn man die begrenzten Fähigkeiten der 
Transceiver-Bausteine (z.B. MAX232, worst case: Optokoppler) mit in 
Rechnung stellt, kann es bei hohen Bitraten enger werden.

von Zacc (Gast)


Lesenswert?

Ich wuerde mal die These aufstellen, dass irgend ein Quarz ueber diesen 
Temperaturbereich immer noch genauer ist als der RC. Schwingen tut der 
Quarz sicher von -70 bis +180Grad. Wenn sich bei -80Grad das CO2 
abzulagern beginnt wird die Frequenz sinken.

von Joerg W. (joergwolfram)


Lesenswert?

Anderer Vorschlag:
Der Host sendet zur Initialisierung der Messung z.B. 0xff an den 
Controller. Dieser misst die LOW Zeit für das Startbit am RX Pin und 
erhält daraus die Zeitkonstante für die serielle Übertragung. Damit wäre 
auch eine automatische Baudratenanpassung möglich. Bei 8 Takten je 
Messzyklus und U2X=1 kann der erhaltene Wert im X-Register direkt nach 
UBBR geschrieben werden.

Messung:
1
getbr:   clr   XL
2
         clr   XH
3
getbr1:  sbic  rxpin
4
         rjmp  getbr1
5
getbr2:  adiw  XL,1       ;2
6
         sbic  rxpin      ;2
7
         rjmp  getbr3
8
         nop              ;1
9
         nop              ;1
10
         rjmp  getbr2     ;2
11
getbr3:  out   UBBRL,XL
12
         out   UBBRH,XH
13
         ret

Je niedriger die Baudrate ist, um so größer und damit auch umso genauer 
wird der gemessene Wert.

Gruß Jörg


von A.K. (Gast)


Lesenswert?

Es gibt wie schon skizziert 2 Fehlerquellen:
- Taktfrequenz: relativer Fehler
- Verzögerungszeiten des Transceivers, teilweise unterschiedlich je nach 
Flanke: absoluter Fehler.

Der Einfluss des absoluten Fehlers sinkt mit der Länge des gemessenen 
Zustands. Andersrum ausgedrückt: Wenn man nur die Länge vom Startbit 
misst, maximiert man den Einfluss des absoluten Fehlers.

von Ralf (Gast)


Lesenswert?

Danke erstmal für die vielen Antworten... Also das auslesen der Daten 
soll erstmal dann nach den Temperaturzyklen also bei Raumtemperatur 
geschehen. So wie ich das jetzt hier verstanden habe sollte das bei 
geringer Baudrate mit dem internen Oszillator gehen...

> Es gibt Quarze für den Erweiterten Temperaturbereich zu kaufen.

WO??? Hab bisher nur welche finden können von 0-70°C

von Zacc (Gast)


Lesenswert?

Zum Temperaturbereich des Quarzes. Vergiss den. Es betrifft nur die 
Frequenz. Erstens ist die reversibel mit der Temperatur und zweitens 
liest du ja eh bei RT.

von Johannes M. (johnny-m)


Lesenswert?

@Ralf:
Fällt mir grad noch auf: Du schreibst, dass Dein µC von -40 bis +125°C 
spezifiziert ist. Hast Du etwa die Automotive-Version des AT90CAN128? 
Nach einem Blick in dessen Datenblatt habe ich nämlich mit einigem 
Erstaunen festgestellt, dass der RC-Oszi im AT90CAN Automotive im 
Vergleich zu den in den "normalen" AVRs verbauten eine relativ geringe 
Temperaturdrift besitzt (keine 5 % Abweichung über den gesamten 
Betriebstemperaturbereich). Wenn man den vernünftig kalibriert, dann 
könnte es sogar mit asynchroner Übertragung klappen. Aber das müsste man 
ausprobieren und das ganze steht und fällt dann natürlich mit einer 
ebenfalls sehr temperaturstabilen Spannungsversorgung.

Ich habe allerdings generell den Eindruck, dass ATMEL bei den neueren 
AVRs qualitativ bessere Oszis einbaut als bei den älteren.

von Ralf (Gast)


Lesenswert?

Ja, ist die Automotive-Version! Ok, ich werd bei dem Board 
vorsichtshalber ein Quarz + 2 C's vorsehen...nimmt ja nicht viel Platz 
weg. Versuche es dann mal mit beiden Varianten...
Danke an alle!

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.