Taktquelle ändern

Gast #562445
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.
Gast #562834
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...
Gast #562838
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 ...
Gast #562844
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.
#562850
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.
Gast #562851
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.
Gast #562853
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.
#562857
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.
Gast #562861
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.
Gast #562882
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.
#562901
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

Gast #562926
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.
Gast #563046
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
#563109
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren