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...
"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.
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?
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.
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...
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 ...
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.
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.
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.
> 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.
@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.
> 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.
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.
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
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.
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
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.
@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.
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!