Das Lernpaket Mikrocontroller verwendet den internen
9,6-MHz-Oszillator des Tiny13, der laut Datenblatt eine Startgenauigkeit unter
10 % hat, aber per Kalibrierung genauer als 1% wird. Die Genauigkeit ist
wichtig für die serielle Datenübertragung. Wenn man davon ausgehet, dass bei
acht Datenbits, einem Startbit und einem Stopbit der gesamte Rahmen sich um maximal ein halbes
Bit verschieben darf ist eine Genauigkeit von 5 % nötig. Tatsächlich waren fast
alle untersuchten Controller genauer als 3%.
Jetzt aber sind in einer anderen Anwendung Controller aufgefallen, die Probleme mit der Startgenauigkeit des internen 4,8-MHz-Oszillators hatten. Um die Abweichungen genauer zu untersuchen wurde das Programm Takt.asm aus dem Lernpaket verwendet, das ein Zehntel der internen Taktfrequenz an B3 ausgibt. Das Hexfile wurde mit LPmikroISP.exe „nackt“, also ohne Bootloader und Nachkalibrierung geladen. Mit einem Frequenzzähler konnte ich dann die Taktfrequenz messen.
;Takt.asm Clock/10 an PB3
.include "tn13def.inc"
rjmp Anfang
Anfang:
sbi ddrb,3
sbi
portb,3 ;2
nop ;1
nop ;1
nop ;1
nop ;1
cbi
portb,3 ;2
rjmp loop10 ;2
;Summe 10 Takte
Ergebnisse Controller 1:
4,8 MHz > 452 kHz > Abweichung 6,2%
9,6 MHz > 954 kHz > Abweichung 0,6%
Ergebnisse Controller 2:
9,6 MHz > 934 kHz > Abweichung 1,0%
Die Messergebnisse zeigen erstens, dass die von Atmel versprochene Genauigkeit von 10% eingehalten wird und zweitens, dass der im Lernpaket verwendete 9,6-MHz-Oszillator genauer zu sein scheint. Allerdings sind nur zwei Controller nicht statistisch relevant, es kann also nicht völlig ausgeschlossen werden, dass auch der 9,6-MHz-Oszuillator einmal seine 10 % ausschöpft.
OscKorrektur:
;OSCCAL = EEPROM(63)
ldi EEadr,63
rcall RdEE
in
B, osccal
sub
B,A
cpi
B,5 ;Abweichung <5?
brlo
OscCopy
cpi
B,252 ;Abweichung >-5?
brsh
OscCopy
ret
OscCopy:
ldi
EEadr,63
rcall RdEE
out osccal,A
ret
Sicherer wäre ein Korrekturumfang von 10:
OscKorrektur:
;OSCCAL = EEPROM(63)
ldi EEadr,63
rcall RdEE
in
B, osccal
sub
B,A
cpi
B,10 ;Abweichung <10?
brlo
OscCopy
cpi
B,245 ;Abweichung >-10?
brsh
OscCopy
ret
OscCopy:
ldi
EEadr,63
rcall RdEE
out osccal,A
ret
22.2.10: Oszillator-Output beim ATmega168
Kürzlich ging es bei der Programmierung eines Mega8 nicht
mehr weiter, Speicher voll. Der Umstieg auf einen Mega168 ist problemlos, jetzt
habe ich 16 KB zur Verfügung. Beim Programmieren der Fuses fiel mir eine
Einstellung ins Auge, ich es beim Mega8 nicht gab: Clock output on PORTB0. Da
könnte man ja ganz ohne eine zusätzliche Software einen Blick auf die
Genauigkeit der diversen RC-Oszillatoren wagen. An B.0 wird dann einfach ein
Frequenzzähler angeschlossen. Gesagt getan, 11059 kHz, ach so ja der
angeschlossene Quarz. Dann der interne 8-MHz-RC-Oszillator und Vorteiler durch
acht: 1001 kHz und Schwankungen auf den Nachkommastellen. Der Oszillator hält
also eine Abweichung von nur 1 % ein. Dasselbe Experiment mit dem
128-kHz-Oszillator zeigt übrigens eine wesentlich schlechtere Genauigkeit.
15.2.10: Umbau einer Jalousie-Steuerung
Da hatte jemand seine ganze Wohnung mit automatischen Motorantrieben für die
Rolladen ausgestattet. Und jetzt klemmt es bei einer der Steuerungen ganz
fürchterlich. Alles vollautomatisch mit Mikrocontroller und komplizierter
Programmierung, Funk-Fernbedienung, ganz vielen Sensoren, eingebautem Akku mit
vollautomatische Ladschaltung und Steckernetzteil. Jetzt war der Akku schlapp,
irgendein Sensor defekt, alles nur Stress und Murks. Die ganze Scheiß-Automatik
gehört auf den Müll, was der Mensch braucht sind einfach nur zwei Tastschalter
für hoch und runter. Das sehe ich ein, denn die Kabel des Motors an den Akku
des Akkuschraubers halten, nur damit man mal in den Garten kommt, das ist
zumindest keine Lösung, die die Frau des Hauses überzeugt.
Also habe ich die Steuerplatine, den Akku und das Ladegerät mit in mein
Labor genommen. Mal sehen was man da machen kann. Der Mikrocontroller ist ein
Mega32, er steuert über ein paar Transistoren ein besonderes Relais. An der
Dicke der Leiterbahnen ist zu erkennen, wo die Schaltkontakte sitzen. Es gibt
anscheinend vier Kontaktanschlüsse für Rechts/Linkslauf/Stop und zwei
Relaisspulen mit ca. 100 Ohm. Irgendwann komme ich dahinter, dass es sich
praktisch um zwei Relais in einem Gehäuse handelt. Sehr gut, da kann man was
machen: Ich durchtrenne insgesamt vier Leitungen und verbinde zwei Tastschalter
direkt mit den Relais. Nur Widerstände von 20 Ohm habe ich zur Vorsicht noch in
die Leitungen gelegt. Man weiß ja nie genau ob man alles richtig verstanden
hat. Tatsächlich gibt es beim Testlauf ein kleines Rauchwölkchen. War wohl
irgend so ein kleiner SMD-Widerstand, den sowieso keiner mehr braucht.
Jedenfalls klappt die Umschaltung jetzt wie gewünscht.
Und dann noch der Akku: Schnelladen am Labornetzteil zeigt, dass er nicht
mehr die volle Kapazität hat. Und die Ladeschaltung schaltet den 6-V-Akku
offenbar schon bei ca. 6,5 V ab. Alles geht über einen Darlington-Transistor,
an dem noch ca. 1 V abfällt. Damit es auch für einen schlappen Akku noch passt
habe ich eine zusätzliche Erhaltungsladung eingebaut: Ein Widerstand von 39 Ohm
führt jetzt zusätzlich zum Netzteil. Das bringt ca. 25 mA Dauerstrom, wovon ein
Teil im pensionierten Mega32 versickert. Jedenfalls steigt die Ladespannung auf
7 V. Das müsste reichen, damit auch der alte Akku zweimal am Tage in Aktion
treten kann. In der Form habe ich alles wieder eingebaut. Die Lösung kam gut
an.
Alte und neue Radiotechnik ist und bleibt spannend. Gerne repariere ich ab
und zu mal ein Radio, besonders wenn es besondere Technik enthält und ich
vielleicht noch etwas lernen kann. An den typischen ganz einfachen
Weltempfängern interessiert mich immer, welches IC dort verbaut wurde. Letztens
kam mein Bruder mit einem Radio vorbei, das an krächzenden Geräuschen litt.
Innen fand ich ein interessantes Empfänger-IC, den KA22425D, ein universelles
Radio-IC mit geringer äußerer Beschaltung und internem Audioverstärker. Alle
Messungen wiesen darauf hin, dass der NF-Verstärker ab einer bestimmten
Aussteuerung Störungen in die HF-Stufen schickte. Ich versuchte die Verstärkung
zu reduzieren und HF-Reste zu dämpfen, aber alles brachte keinen
durchschlagenden Erfolg. Dann kam mein Bruder mit dem Hinweis, ihm sei wieder
eingefallen, was mit dem Radio los war. Es handelte sich um einen Fall von Überspannung
und stinkender Rauchwolke aus dem Netzteil, danach hat es nie wieder richtig
funktioniert. Alles klar, der Endverstärker hat eine Macke, die HF-Stufen
nicht, weil sie mit reduzierter Spannung laufen. Wenn ich die Vorgeschichte
gleich erfahren hätte, hätte ich wahrscheinlich die Reparatur gar nicht erst
versucht. Aber immerhin ist das Radio jetzt endgültig zum Basteln freigegeben.
Wenn ich den Endverstärker stilllege kann ich mit den HF-Stufen schön
experimentieren...