ATtiny Interner Oszilator Problem

OP #4070630
Lesenswert?

Hallo,
ich habe einen Attiny 13A an dem man ja kein externes Quarz anschließen 
kann. Ich habe also den internen benutzt doch die SoftUart funktioniert 
nicht. Ist er falsch eingestellt oder kann dieser ATtiny diese "große" 
Aufgabe nicht schaffen? Ich bin mit meinem Wissen am Ende und hoffe auf 
Antwort:

Code:
$regfile = "ATtiny13A.DAT"
$crystal = 9600000
$hwstack = 8
$swstack = 16
$framesize = 32
Open "comb.3:9600,8,n,1" For Output As #1
Open "comb.4:9600,8,n,1" For Input As #2
Dim Empfangen As String * 4
Config Portb.0 = Output
Config Portb.1 = Output
Do
Input #2 , Empfangen
If Empfangen = "up" Then
'Portb.1 = 0
'Portb.0 = 1
Print #1 , "Finishes"
End If
'If Empfangen = "down" Then
'Portb.0 = 0
'Portb.1 = 1
'End If
Loop


LG
#4070691
Lesenswert?

Das Bild gehört aber nicht zu einem Attiny13. Denn da gibt es kein 
JTAGEN. Sowas hat kein Tiny. Entscheidend ist die CKDIV8-Fuse. Da muss 
das Häkchen weg.

Man kann das auch per Software einstellen. Dabei muss ein bestimmtes 
Timing eingehalten werden. Für C gibt es dafür eine Headerdatei mit 
entsprechenden Makros. Ob es das in Bascom gibt, weiss ich nicht.

Steht unter "6.3 System Clock Prescaler" im Datenblatt.

Wie schon gesagt ich kenne mich mit Bascom nicht aus. Möglich, dass es 
an etwas anderem liegt. Aber ein falscher Takt ist der mit Abstand 
häufigste Fehler bei UART-Problemen.

mfg.
Gast #4070819
Lesenswert?

Toni Nachname schrieb:

> ich habe einen Attiny 13A an dem man ja kein externes Quarz anschließen
> kann. Ich habe also den internen benutzt

Nein, hast du nicht. Kannst du garnicht. Einfach deshalb, weil es keinen 
internen Quarz gibt. Intern gibt's nur einen (recht ungenauen) 
RC-Oszillator.

> doch die SoftUart funktioniert
> nicht. Ist er falsch eingestellt oder kann dieser ATtiny diese "große"
> Aufgabe nicht schaffen?

Natürlich kann er die schaffen. Dazu sind nur zwei Sachen nötig: Eine 
sinnvolle Konfiguration der Bitrate und eine sinnvolle Kalibrierung des 
Taktes des RC-Oszillators.
#4071083
Lesenswert?

Für UART besteht die Anforderung, dass die Taktfrequenz nicht mehr als 
etwa 2% vom Soll abweicht.

Mit dem internen RC-Oszillator des atiny13 kann es passieren, dass die 
Abweichung wegen Spannungsabweichung, Exemplarstreuung, früherer 
Programmierung der Frequenz-fuses usw. größer ist. Um 1% Genaugkeit zu 
erreichen muss man die Oszillatorfrequenz justieren, dazu sind die 
oscillator-calbration-fuses zu verstellen.


Natürlich kann es auch sein, dass der Takt um den Faktor 8 niedriger 
ist, denn im Auslieferungszustand ist noch die Teilung des 
9600kHz-Taktes eingeschaltet, damit der Chip gemütlich mit ca. 1,2 MHz 
werkelt.
OP #4071266
Lesenswert?

Hallo,
ich werde den kleinen dann mal Kalibrieren! Aber wie kann ich denn den 
internen RC Oszillator checken weil der tiny13A hat ja keinen CKOUT also 
kann ich das Signal nicht nach draußen leiten. Wenn jmd. einen Rat weiß 
bitte schreiben aber trotzdem schon mal DANKE:D

LG
#4071301
Lesenswert?

Toni Nachname schrieb:
> Aber wie kann ich denn den
> internen RC Oszillator checken weil der tiny13A hat ja keinen CKOUT also
> kann ich das Signal nicht nach draußen leiten.

Einen Timer laufen lassen, der ein PWM-Signal erzeugt, die Frequenz ist 
über die Auflösung, und den Vorteiler mit dem Systemtakt verbunden. Wenn 
die PWM-Ausgänge nicht nutzbar sind, den Timer beim Überlauf einen 
Interrupt auslösen lassen, und in diesem Interrupt einen Ausgangs-Pin 
toggeln.

Mit freundlichen Grüßen - Martin
Gast #4071370
Lesenswert?

Hi Toni...

Es gibt mehrere Möglichkeiten:

1.) Du kannst bei "Crystal" den Wert verändern. Das ändert nix am Takt, 
aber der Umrechnungsfaktor des Compilers für die Baudrate wird dadurch 
geändert. Wobei der Wert bei "Crystal" jener Wert ist, der nach dem 
System-Prescaler ansteht.

Den System-Prescaler kannst du z.B. unter Bascom so einstellen:

Clkpr = 128
Clkpr = 0

Die erste Zeile bleibt immer unverändert. Mit der 2. Zeile stellst du 
den Teilerfaktor entsprechend dem Datenblatt ein.
Im obigen Bsp. läuft er nun mit Teiler 1, also ein Attiny der per 
Fuse(clkdiv/8) auf 1MHz getaktet war, läuft nun mit 8MHz CPU-Takt, ohne 
die Fuse zu ändern.

2.) Du kannst statt
__Open "comb.3:9600,8,n,1" For Output As #1__ auch
__Open "comb.3:9423,8,n,1" For Output As #1___ schreiben, also einen 
krummen Wert für die Baudrate einsetzen. Das bewirkt dasselbe wie bei 
1.)
Der Umrechnungsfaktor wird an den krummen CPU-Takt angepasst, so dass de 
facto eine korrekte Baudrate an den Ausgängen anliegt.

3.) Du kanns über das OSCCAL-Register den Takt des RC-Oszillators 
kalibrieren.
Das ist die "sauberste" Methode, weil damit die Werte im Code und die 
Baudrate am Port nachher auch identisch sind.
Das Kalibrierern geht auch innerhalb des Codes in einer Subroutine und 
kann durch Einbeziehen einer externen Referenz automatisiert werden.


Gruss S.
#4071381
Lesenswert?

Table 6.1, Page 24

Table 6-1. Device Clocking Options Select
Device Clocking Option CKSEL[1:0](1)
External Clock (see page 24) 00
Calibrated Internal 4.8/9.6 MHz Oscillator (see page 25) 01, 10
Internal 128 kHz Oscillator (see page 26) 11

--- 9.6MHz --- - es ist ein Tiny13A.

Edit: Anhang ist passender, denke ich.
Angehängte Dateien:
#4071690
Lesenswert?

Toni Nachname schrieb:
> ich werde den kleinen dann mal Kalibrieren!

Lass dich nicht verrückt machen. Der Oszillator ist bei 3V/25°C auf
9,6MHz kalibriert. Unter normalen Betriebsbedingungen klappt es damit
bei 9600Bd auch mit dem UART. Zumal die 9,6MHz durch 9600 glatt teilbar 
sind und der systematische Fehler damit 0 ist.

Das musst du natürlich auch berücksichtigen, wenn du den Soft-UART von 
woanders übernommen hast. Die Einstellungen dort sind dann zumeist für 
8MHz. Der Tiny13 ist so ziemlich der einzige Controller, dessen interner 
Oszillator nicht mit 8MHz läuft.

Kontrolliere ob Bascom das hier:
1
Open "comb.3:9600,8,n,1" For Output As #1
auch berücksichtigt und richtig rechnet.


mfg.
#4071714
Lesenswert?

Thomas Eckmann schrieb:
> Lass dich nicht verrückt machen. Der Oszillator ist bei 3V/25°C auf
> 9,6MHz kalibriert. Unter normalen Betriebsbedingungen klappt es damit

Die harte unbarmherzige Realität jedoch lehrt einen dann doch recht 
schnell (und zwar genau dann wenn man mal eine Handvoll Platinen damit 
baut unter der Annahme daß das schon passt) daß es bei den Tinies 
offenbar übelste Streuungen gibt und Abweichungen von 10% und mehr 
durchaus keine Seltenheit sind.

Abhilfe schafft dann wirklich nur für jedes einzelne Exemplar selbst 
nochmal einen Kalibrierungswert zu ermitteln, im EEPROM abzulegen und 
beim Start in das OSCCAL-Register zu schreiben.

Bei einem privaten Einzelstück fällt der Zusatzaufwand jedoch nicht so 
sehr ins Gewicht, man muss aber damit rechnen daß das nötig werden 
könnte.
#4071770
Lesenswert?

Bernd K. schrieb:
> Die harte unbarmherzige Realität jedoch lehrt einen dann doch recht
> schnell (und zwar genau dann wenn man mal eine Handvoll Platinen damit
> baut unter der Annahme daß das schon passt) daß es bei den Tinies
> offenbar übelste Streuungen gibt und Abweichungen von 10% und mehr
> durchaus keine Seltenheit sind.

Ich weiss ja nicht, mit was für alten Gurken du rumhantierst. Aber die 
Exemplarstreuungen sind nichts Neues. Und genau deswegen werden sie vom 
Hersteller kalibriert ausgeliefert. Unter dieser Bedingung, 3V/25°C, 
müssen die Controller nicht nachkalibriert werden. Du bist hier nicht 
der einzige, der damit seine Erfahrungen hat.

Weicht man von diesen Normalbedingungen ab, ist eine Kalibrierung u.U. 
erforderlich.

mfg.
Gast #4072449
Lesenswert?

Thomas Eckmann schrieb:

> Ich weiss ja nicht, mit was für alten Gurken du rumhantierst. Aber die
> Exemplarstreuungen sind nichts Neues. Und genau deswegen werden sie vom
> Hersteller kalibriert ausgeliefert. Unter dieser Bedingung, 3V/25°C,
> müssen die Controller nicht nachkalibriert werden.

Krasser Blödsinn.

Zum einen sind die Kalibrierbedingungen unterschiedlich, für sehr viele 
Typen wird z.B. auf 5V kalibriert. Beim konkreten Tiny13A sind es 
allerdings wirklich 3V/25°.

Aber: für diese Kalibrierbedingungen verspricht die Werkskalibrierung 
nur, die Taktabweichung innerhalb von +-10% vom Sollwert zu halten. 
Siehe Tabelle 18-2 auf Seite 119 des Datenblatts.

Und das ist natürlich viel zu viel für UART. Bei 8N1 z.B. kann dann über 
ein Datenwort die Abweichung schon bis zu einer volle Bitlänge betragen.

Natürlich sorgt die Kurve der Normalverteilung dafür, daß für das Gros 
der Liefermenge die tatsächliche Abweichung weitaus geringer als 10% 
sein wird, aber man muß halt trotzdem immer damit rechnen, daß es 
einzelne Exemplare gibt, bei denen die erlaubten 10% tatsächlich fast 
vollständig ausgenutzt sind.

So ist das halt mit der Wahrscheinlichkeit.
Moderator Persönliche Seite #4072663
Lesenswert?

c-hater schrieb:
> Aber: für diese Kalibrierbedingungen verspricht die Werkskalibrierung
> nur, die Taktabweichung innerhalb von +-10% vom Sollwert zu halten.

Das ist doch nur, damit es keine Garantiefälle gibt. ;-)

In der Praxis habe ich noch keinen AVR erlebt, bei dem man (bei
Kalibrierbedingungen natürlich) nicht in der Lage wäre, RS-232 „aus
der Dose raus“ zu benutzen.  Und ich habe schon einige Exemplare davon
in den Fingern gehabt.

Für eine Produktentwicklung würde ich mich sicher auch nicht drauf
verlassen wollen, aber für eine Labor-Test-Schnittstelle (also nicht
kundenrelevant) wäre es selbst in einem Produkt OK.
#4072703
Lesenswert?

Jörg Wunsch schrieb:
> In der Praxis habe ich noch keinen AVR erlebt, bei dem man (bei
> Kalibrierbedingungen natürlich) nicht in der Lage wäre, RS-232 „aus
> der Dose raus“ zu benutzen.

? wie bitte

ich schon öfter

sei es weil der Gegenspieler mit 115k daherkommt und 8 MHz oder 16MHz 
nicht wirklich passen. Wer keinen krummen Quarz anschliessen will oder 
mag kann evtl. mit "Trimmung" arbeiten um so ein Gespann doch noch zum 
Laufen zu bewegen.
#4072717
Lesenswert?

Thomas Eckmann schrieb:
> Das passt nicht nur nicht wirklich, sondern überhaupt nicht. Ob mit oder
> ohne Quarz. Aber das liegt nicht am Controller.

und was soll mir der Unfug sagen?

Jörg Wunsch schrieb:
> In der Praxis habe ich noch keinen AVR erlebt, bei dem man (bei
> Kalibrierbedingungen natürlich) nicht in der Lage wäre, RS-232 „aus
> der Dose raus“ zu benutzen.

ich fand dem hier musste mal was hinzugefügt werden.

Es gibt AVR wo man nicht in der Lage ist aus der Dose RS232 zu benutzen!

nichts weiter.
Moderator Persönliche Seite #4072757
Lesenswert?

Joachim B. schrieb:

> und was soll mir der Unfug sagen?

Dass du Umgangsformen hast, die unter aller Kanone sind.

> Es gibt AVR wo man nicht in der Lage ist aus der Dose RS232 zu benutzen!

Klar, wenn der systematische Fehler einfach schon zu hoch ist, geht
es nicht – auch nicht mit einem Quarz.  Bis zu deinem Einwand hatten
wir uns jedoch nur über die Parameterstreuungen des internen Taktes
unterhalten, also über zufällige Fehler.
OP #4072772
Lesenswert?

Hallo,
ich habe jetzt zwei verschiedene ATTiny13A getestet aber bei beiden dass 
selbe ich bekomme nur irgendeinen Müll in der Konsole angezeigt. Das hab 
ich bis jetzt versucht: verschiedene interne Frequenzen(am Oszillator), 
verschiede Baudraten, verschiedene Terminals, verschiedene Usb <-> Uart 
Converter, verschiedene Progger aber bei allen das selbe Problem! Ich 
werde jetzt mal den kleinen von meinem Fertig Testboard runter nehmen 
und auf einem normalen Steckbrett testen. Wenn ihr noch einen Ratschlag 
habt sagt das ruhig.

LG
Moderator Persönliche Seite #4072777
Lesenswert?

Toni Nachname schrieb:
> ich bekomme nur irgendeinen Müll in der Konsole angezeigt

Hast du denn die Implementierung der Soft-UART mal verifiziert?

Wenn du schreibst, dass ein Timertakt ordentliche Werte liefert, die
Soft-UART jedoch Müll, dann kann es doch eigentlich nur ein Problem
mit der Software sein.

Hast du denn mal die UART-Bitzeiten mit dem Oszi gemessen?
#4072784
Lesenswert?

Toni Nachname schrieb:
> Wenn ihr noch einen Ratschlag habt sagt das ruhig.

Hör auf, im Nebel zu stochern, sondern geh systematisch vor. Dass dein 
interner Takt jetzt OK zu sein scheint, ist die eine Sache. Aber mit der 
Ausgabe auf ein Terminal und dem Resultat, dass irgenein Müll angezeigt 
wird, kommst du nicht weiter.

Lass deinen Controller kontinuierlich 0x55 ausgeben und guck dir das auf 
dem Oszi an. Bei 9600Bd ergibt das eine Frequenz, 1:1 Rechteck, von 
4,8KHz am UART-Ausgang. Nur wenn dem so ist, funktioniert auch deine 
Datenübertragung.

mfg.
#4072799
Lesenswert?

Jörg Wunsch schrieb:
> Dass du Umgangsformen hast, die unter aller Kanone sind.

das habe ich hier genauso empfunden:

Thomas Eckmann schrieb:
> Wenn du auf eine 28er Felge einen 26er Reifen ziehen willst und es nicht
> passt, ist doch auch nicht das Fahrrad schuld.

will er damit sagen das ich blöd bin?

Jörg Wunsch schrieb:
> Klar, wenn der systematische Fehler einfach schon zu hoch ist, geht
> es nicht – auch nicht mit einem Quarz.

Das ist mir klar und steht in keinem Widerspruch das nicht alles out of 
the Box funktioniert, nicht funktionieren kann.

Jörg Wunsch schrieb:
> Bis zu deinem Einwand hatten
> wir uns jedoch nur über die Parameterstreuungen des internen Taktes
> unterhalten, also über zufällige Fehler.

tut mir leid das es sich für mich im nachinein wie eine Ausrede anhört, 
dein Satz war einfach zu allgemein formuliert.

Jörg Wunsch schrieb:
> In der Praxis habe ich noch keinen AVR erlebt, bei dem man (bei
> Kalibrierbedingungen natürlich) nicht in der Lage wäre, RS-232 „aus
> der Dose raus“ zu benutzen.

trotzdem war das "Gespräch" nützlich weil man mit dem  internen + 
Kalibrierung evtl. den UART hinziehen kann das die Toleranz dann doch 
noch passt.
#4072811
Lesenswert?

Das erste Bild sieht ja noch brauchbar aus, aber die anderen Beiden sind 
ja fürchterlich! Was sind das da für 'halbe' Bits. Kann das sein daß da 
Hardware und Software nicht richtig funktioniert? Sind da 220kOhm 
Angstwiderstände in den Leitungen? :-) Oder beim Messen mit dem Oszi nur 
zu weit reingezoomt, und es fehlen die Messpunkte?

Mit freundlichen Grüßen - Martin
OP #4073270
Lesenswert?

Hallo Thomas,
er läuft jetzt mit 9,6 Mhz habe auch schon die neue Schaltung für den 
Kleinen fertig läuft auch da prima supi Danke. Mit dem Oszi bin ich 
Einsteiger und hab da noch nicht so viele Erfahrungen mit aber ich 
wollte euch die Bilder nicht verenthalten.

LG
#4074833
Lesenswert?

Jörg Wunsch schrieb:
> Für eine Produktentwicklung würde ich mich sicher auch nicht drauf
> verlassen wollen

Und genau bei sowas ist es mir mal um die Ohren geflogen. Zum Glück 
konnte ich es elegant per Software wieder gerade biegen, indem ich beim 
Einschalten für kurze Zeit auf ein genau definiertes Rechtecksignal von 
8 Bitlängen low und langer Pause dazwischen am RX gewartet habe (zu 
erzeugen mit einem PC-USB-Seriell-Adapter in der Produktion) um damit 
kurzerhand eine automatische Nachkalibrierung beim ersten Einschalten 
(oder bei Bedarf später jederzeit wieder) durchführen und im EEPROM 
speichern zu können ohne noch irgendwas an der Hardware ändern zu 
müssen.

Seitdem nur noch Quarz.

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