Labortagebuch Februar 2010

 Elektronik-Labor  Notizen  Projekte  Labortagebuch

22.2.10: RC-Oszillator beim Tiny13

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
 Loop10:
      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:

 4,8 MHz > 439 kHz > Abweichung 9,3%
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.

 Bei der genauen Untersuchung des Problems ist aber auch noch aufgefallen, dass die Nachkalibrierung in der Bootloader-Firmware des Lernpakets versagen kann, wenn die Startabweichung zu groß ist. Der Inhalt des OSCAL-Registers wird um maximal 5 korrigiert:

 
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.


9.2.2010: Radio-IC KA22425D



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...


 Elektronik-Labor  Notizen  Projekte  Labortagebuch