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