Modifikationen am Lernpaket Bascom 


von Ralf Beesner, DK5BU
Elektronik-Labor   Projekte   AVR 





An der Platine des Lernpakets Mikrocontroller-Technik mit Bascom gibt es zwei Dinge, die sich mit wenig Aufwand verbessern lassen, wenn man etwas Übung im Löten an SMD- Bauteilen hat:

•    Der RC- Oszillator ist für Uhren- oder Frequenzzähler-Anwendungen zu ungenau
•    Viele Terminalprogramme setzen die DTR- Leitung auf 0 und schicken die Platine damit in einen Dauer-Reset.


Nachrüsten eines Quarzes

An den Pins für den Quarz liegen statt eines Quarzes die Widerstände R4 und R5, sie sind die Vorwiderstände für die beiden mit „PB6“ und „PB7“ bezeichneten LEDs. Lötet man die beiden Vorwiderstände aus, kann man an die beiden Lötpads, die direkt an den Mikrocontroller geführt werden, einen Quarz anlöten (siehe Bild unten, grüner Kreis). Man könnte einen 8 MHz-Quarz verwenden. Um ihn zu aktivieren, muss man jedoch den Microcontroller mit einem ISP-Programmer neu flashen.



Minimalinvasiv ist es, einen 32 kHz- Uhrenquarz zu verwenden. Der Mikrocontroller läuft weiter mit dem Takt des internen RC-Oszillators, aber Timer 2 lässt sich mit einem Registerbefehl vom allgemeinen Takt abklemmen und auf einen Uhrenoszillator- Modus umschalten; der Uhrenquarz wird an die gleichen Pins angeschlossen wie ein Standardquarz.
Die Umschaltung erfolgt also erst innerhalb des Anwendungsprogramms; es ist kein Flashen von Fusebits erforderlich und Timer 2 kann wahlweise asynchron im Uhrenmodus oder synchron am Mikrocontrollertakt betrieben werden.  


DTR- Leitung schaltbar machen

Der Reset- Eingang wird durch einen internen Pullup- Widerstand auf Plus gehalten. Zusätzlich schaltet man meist noch einen externen Pullup von 10-47 kOhm parallel. Ein Reset wird ausgelöst, wenn der Eingang gegen Masse gezogen wird.

In der LP- Hardware liegt der Reset- Eingang über 4,7 kOhm (R2) an Masse, wird aber durch den DTR- Ausgang des USB-Chips FT232 auf Plus gehalten. Schaltet der DTR- Ausgang des FT232 auf Low, wird er nicht hochohmig, sondern zieht den Reset- Eingang hart auf Masse.
Man darf daher den Reset- Eingang nicht einfach fest auf Plus legen; dann fließt ein hoher Strom in den DTR- Eingang des FT232 und zerstört ihn möglicherweise. Ich habe daher die DTR- Leitung nahe des FT232 unterbrochen und dort den freigewordenen 1,5 kOhm- Widerstand R4 als Strombegrenzer eingefügt (siehe Bild oben, roter Kreis).

Der Reset- Eingang ist auf Pin 16 des linken unteren IC- Sockels (IC4) geführt. Direkt darunter auf Pin 15 liegen +5V. Eine kleine Drahtbrücke zwischen den Pins legt den Reset dauerhaft auf Plus (siehe Abb.;blauer Kreis), so kommt das DTR- Signal nicht mehr durch. Zum Programmieren des Mikrocontrollers muss man sie jeweils entfernen.


Praktische Durchführung

R4 und R5 lassen sich schonend auslöten, wenn man abwechselnd die beiden Enden des Widerstands mit dem Lötkolben erwärmt; nach drei oder vier Vorgängen ist der Widerstand insgesamt so aufgeheizt, dass das Zinn an beiden Enden noch kurze Zeit geschmolzen bleibt und man ihn vorsichtig zur Seite „wegwischen“ kann. Damit die Widerstände nicht verlorengehen, habe ich sie um 90 Grad gedreht und an dem LED-seitigen Pin nur mit einer Seite wieder angelötet.

Der Quarz wird am besten liegend auf dem Mikrocontroller platziert, wie auf dem Foto ersichtlich.
Nun zur DTR-Leitung. Das Schaltbild Abb. 7.2 auf Seite 31 des Handbuches enthält einen kleinen Fehler: am FT232 (IC8) sind RxD und DTR vertauscht. DTR ist nicht Pin5, sondern Pin2. Die Reset-Leitung des Mikrocontrollers ist also in Wahrheit an Pin2 des FT232 geführt.
Ein kurzes Stück der Leiterbahn verläuft auf der Unterseite der Platine geführt; ich habe sie dort vorsichtig unterbrochen und den 1,5-kOhm-Widerstand auf der Oberseite zwischen die beiden Durchführungen gelötet; netterweise haben sie zufällig den passenden Abstand.



Software

Das folgende kleine Beispiel zeigt, wie man den Uhrenquarz aktiviert:

' Einfaches Uhrenprogramm für die modifizierte LP- Bascom- Hardware
' (mit 32768- Hz- Uhrenquarz)
'
' Der Mikrocontroller- Takt wird weiterhin durch den internen
' RC- Oszillator geliefert; durch den Befehl ASSR.AS2 = 1 wird Timer2
' asynchron mit dem Takt des Uhrenquarzes betrieben.

' Als "optisches Lebenszeichen" wird eine LED an PB1 bei jedem
'Sekundentakt getoggelt
'
' Die Uhrzeit wird mit 19200 bit/s aufs Terminal gesendet
'
'----------------------------------------------------------
$regfile = "m88def.dat"
$crystal = 8000000 ' 8 MHz- Takt vom RC-Oszillator
$baud = 19200

On Timer2 Ontimer2 ' Interrupt-Routine für Timer2-Overflow

Dim S As Byte
Dim M As Byte
Dim H As Byte


Acsr.acd = 1 ' Analogen Komparator ausschalten
Assr.as2 = 1 ' Timer2- Asynchron- Betrieb
Tccr2b = &B00000101 ' Vorteiler für Timer2 auf 128 setzen
Timsk2.toie2 = 1 ' Timer2-Overflow-Interrupt an
Sreg.7 = 1 ' Interrupts global einschalten

Ddrb.1 = 1
Ddrb.2 = 0

Portb = &B11111101 ' Pullups einschalten, damit die Eingänge nicht floaten
Portc = &B11111111
Portd = &B11111111



' Hauptprogramm

Do
If S = 60 Then
S = 0
M = M + 1
If M = 60 Then
H = H + 1
' Waitms 200 ' falls die Uhr zu schnell geht
If H = 24 Then
H = 0
End If
End If
End If
Print H ; " : " ; M ; " : " ; S ; " {013}" ;
Idle
Loop


'Interrupt- Routine

Ontimer2:

S = S + 1
Portb.1 = Not Portb.1 ' LED an Portb.1 toggeln

Return

Download: Uhrenquarz.zip

Laut Datenblatt soll man auch bei einem Uhrenquarz zwei kleine Kondensatoren (12 - 22 pF)von den beiden Quarzanschlüssen gegen Masse schalten. Der Oszillator schwingt zwar ohne sie, läuft aber wahrscheinlich etwas zu schnell. Dies kann man ausgleichen, wenn man beim Stundenwechsel eine passende kleine Wartezeit einfügt.


Elektronik-Labor   Projekte   AVR