Vorwort
Dieses
Buch basiert im Kern auf meinem Lernpaket Mikrocontroller. Es ermöglicht Ihnen
einen einfachen und schnellen Einstieg in die Welt der Mikrocontroller am konkreten
Beispiel des ATtiny85. Sie benötigen keine Vorkenntnisse und können gleich
durchstarten. Die verwendete Platine mit USB-Anschluss kann bei AK Modul-Bus
bezogen werden. Sie können wahlweise mit dieser Platine arbeiten oder alles auf
einer Steckplatine aufbauen. Beide Alternativen werden im Detail erläutert.
Mikrocontroller
sind nichts anderes als vollständige kleine Computer mit Recheneinheit,
Speicher, Schnittstellen und allem was sonst noch dazu gehört. Die neuere
Entwicklung hat dazu geführt, dass immer mehr in einen kleinen Chip gepackt
wurde. Ein achtbeiniges IC wie der ATtiny85 bietet bereits so viele
Möglichkeiten, dass es praktisch unmöglich ist, sie alle zu nutzen.
Entwickeln
Sie Ihre eigenen Anwendungen und damit praktisch Ihr eigenes Spezial-IC. Sei es
eine spezielle Alarmanlage, ein Messgerät oder eine Robotersteuerung, mit den
vorgestellten Grundlagen können Sie Ihre Ideen umsetzen. Die Controller-Platine
ist zugleich Entwicklungsplattform und Programmiergerät. Sie können beliebig
viele Mikrocontroller programmieren und dann in Ihre Schaltungen einbauen.
Bleiben
sie kreativ!
Ihr
Burkhard Kainka
Software-Download:
LPmikro85.zip
Platine
und Bauteile: https://www.ak-modul-bus.de/stat/lernpaket_mikrocontroller.html
FT232-Platine: https://www.ak-modul-bus.de/stat/usb_experimentierplatine_mit_dem_ft232r,pd20!0,,FV45PL.html
Inhalt
1 Einleitung 1
1.1 Bauteile 1
1.2 Die Controller-Platine 2
1.3 Verwendung einer Steckplatine 5
1.4 Entwicklungs-Software 6
2 Interface-Experimente 13
2.1 Portausgänge 13
2.2 Porteingänge 15
2.3 Spannungsmessung 18
2.4 Pullup-Widerstände 20
2.5 Der Fototransistor 21
2.6 LED als Lichtsensor 22
2.7 Ladungsmessung 23
2.8 Messungen an einem Elko 25
2.9 Das Oszilloskop 27
2.10 Der PWM-Ausgang 29
2.11 Schaltschwellen 33
2.12 Programm-Upload 34
3 Bascom-Grundlagen und Portzugriffe 37
3.1 BASCOM-AVR 37
3.2 Der Bootloader 43
3.3 Ein Wechselblinker 47
3.4 Geschwindigkeitstest 49
3.5 Digitale Eingänge 50
3.6 Eingang mit Pullup 51
3.7 Die UND-Funktion 52
3.8 Das RS-Flipflop 54
3.9 Das D-Flipflop 55
3.10 Das Toggle-Flipflop 56
4 Die serielle Schnittstelle 59
4.1 Print-Ausgaben 59
4.3 Daten empfangen 64
4.5 Texteingabe 65
4.5 Byte-Empfang 66
5 Timer/Counter und Interrupts 68
5.1 Zeitmessung 68
5.2 Impulse zählen 70
5.3 Timer-Interrupt 71
5.4 Sekunden-Timer 73
5.5 PWM-Ausgang 75
5.6 Der weiche Blinker 76
5.7 Frequenzmessung 77
5.8 Interrupt-Eingang 0 81
5.9 Pin-Change-Interrupt 82
5.10 Watchdog und Power-Down 84
6 Der AD-Wandler 86
6.1 10-Bit-Messung 86
6.2 Messung an vier Kanälen 89
6.3 Interne Referenz 91
6.4 Differenzmessung 93
6.5 Temperaturmessung 95
6.6 Zweipunktregler 97
7 Interfaces und Datenlogger 101
7.1 Das universelle Interface 101
7.2 Das Oszilloskop 104
7.3 Ein Transientenrecorder 107
7.4 Langzeit-Datenlogger 110
7.5 Kennlinienschreiber 112
7.6 Der MCS-Bootloader 115
8 Messtechnik-Anwendungen 119
8.1 DC-Millivoltmeter 0.1 mV …1100.0 mV 119
8.2 RMS-Millivoltmeter 0.1 mV bis 250.0 mV 121
8.3 Widerstandsmessung 100 Ω bis 1 MΩ 124
8.4 Kapazitätsmessung 1 nF bis 1000 µF 126
8.7 Kapazitätsmessung 1 pF … 1000 pF 128
8.6 Sinusgenerator 0…5 kHz 131
9 Arduino-Anwendungen 135
9.1 Der ATtiny in der Arduino-IDE 135
9.2 Software Serial 140
9.3 Bascom auf dem Arduino UNO 141
9.4 SIOS-Emulation 146
9.5 Analoge Plotter 150
9.6 SIOS für den Tiny85 152
9.7 Programmieren mit CompactDefinition 156
Weitere Themen:Tipps und TricksKennlinienschreiber
Messung an Bauteilen und Schaltungen
Sound-Recorder
14.1.21:
Hardware
Das Buch verwendet im Schwerpunkt die Platine aus dem Lernpaket
Mikrocontroller. Sie soll nun bei AK Modul-Bus neu aufgelegt werden. Im
ersten Schritt wurde nur die Platine bestellt, um eventuelle Probleme
mit der Produktion zu erkennen. Zwei Platinen kamen heute zu mir.
Tatsächlich zeigte sich ein Problem im Bereich der USB-Buchse.
Vorhandene Micro-USB-Buchsen passen nicht problemlos rein. Für die neue
Produktion muss eine aktuelle Buchse verwendet werden. Trotzdem wollte
ich die Platinen komplett aufbauen, um auch den Rest genau testen zu
können. Mit etwas Mühe konnte ich andere Buchsen einlöten.
Die linke Platine habe mit den CH340G bestückt, im ersten Test nur
mit dem Quarz und noch ohne die Kondensatoren. Die Schnittstelle
funktionierte. In die rechte Platine habe ich den CH340C eingelötet,
der mit einem internen Oszillator arbeitet und ohne den Quarz auskommt.
Auch diese Schnittstelle arbeitet einwandfrei.
Dann wurden alle anderen Bauteile eingelötet. Beide Platinen wurden
komplett getestet und funktionieren einwandfrei. Ich schlage deshalb
Modul-Bus vor, die Platine mit den CH340C und ohne Quarz zu bestücken.
Es wird allerdings noch ein paar Wochen dauern, bis die Platine im
Online-Shop steht.
Im Buch wird ja auch noch eine andere Hardware vorgestellt, wobei ein
FT232 und ein Steckbrett zum Einsatz kommen. Falls jemand noch eine
weitere Variante im Einsatz hat, wäre ich über eine Info sehr dankbar.
Tiny85-Sound
Jetzt ist die
Platine zum Lernpaket Mikrocontroller
bei AK Modul-Bus erhältlich. Ich habe sie auf Herz und Nieren geprüft
und bin vollauf zufrieden. Zum Test habe ich das Interface-Programm
geladen und alle Funktionen durchgetestet. Als nächstes habe ich den
Bascom-Bootloader geladen und arbeite nun wieder mit Bascom.
Die Aufgabe ist die Erzeugung beliebiger Frequenzen mit einem
Timer des Tiny85. Das Thema fehlte eigentlich noch im Kapitel 5 des
Kurses und wird nun nachgereicht. Ich musste selbst erst intensiv
suchen, wie man es am besten macht. Der entscheidende Hinweis fand sich
im Datenblatt: Fast PWM bringt die Lösung. Für den Timer1 schreibt man
in OCR1C, welche Periode das Signal haben soll. Damit wird die Frequenz
festgelegt. Zusätzlich muss aber in OCR1A geschrieben werden, wie lange
innerhalb einer Periode der Ausgang an sein soll. Wenn der Inhalt von
OCR1A halb so groß ist wie der von OCR1C, bekommt man ein symmetrisches
Rechtecksignal am Ausgang OC1A = PB1. Das Beispiel zeigt, wie Töne
einer Tonleiter über drei Oktaven ausgegeben werden.
'Tiny85 Sound
$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
dim t1, t2 as byte
Declare Sub Ton
Config Timer1 = Pwm , Prescale = 256 , Compare A Pwm = Clear Up '8 MHz / 64 = 31,25 kHz
start timer1
ddrb = 255
do
Start timer1
t1 = 239: call ton : waitms 300
t1= 213: call ton : waitms 300
t1= 190: call ton : waitms 300
t1= 179: call ton : waitms 300
t1= 159: call ton : waitms 300
t1= 142: call ton : waitms 300
t1= 127: call ton : waitms 300
t1= 119: call ton : waitms 1300
t1= 106: call ton : waitms 300
t1= 95: call ton : waitms 300
t1= 89: call ton : waitms 300
t1= 80: call ton : waitms 300
t1= 71: call ton : waitms 300
t1= 63: call ton : waitms 300
t1= 60: call ton : waitms 1300
t1= 53: call ton : waitms 300
t1= 47: call ton : waitms 300
t1= 45: call ton : waitms 300
t1= 40: call ton : waitms 300
t1= 36: call ton : waitms 300
t1= 32: call ton : waitms 300
t1= 30: call ton : waitms 300
waitms 1300
Stop Timer1
loop
sub ton
do
loop until timer1< 10 ' kurz nach dem Überlauf
Ocr1c = t1-1
t2 = t1/ 2
Ocr1A = t2
end sub
End
Ein Martinshorn von Hermann Friedhoff
Hier ist ein kleines Programm, bei dem die Erfahrungen Ihrer Arbeit
eingeflossen sind, es ist ein RC-Modul mit einem einfachen Martin-Horn
und 2 abwechselnd blinkenden LEDs.
' Compiler: Bascom-Demo 2.0.7.5
'
' Dateiname: Martin-Horn A85.avr
' Funktion: ein Martin-Horn
auf einem Buzzer ausgeben und 2 LEDs abwechselnd aufleuchten lassen,
' oder eine LED einschalten
' Datum: Start 30.11.2021, Stand 30.11.2021
'
Von:
Naubaddi / Burkhard Kainka (Tonleiter für den ATtiny85,
www.elektronik-labor.de)
'
' ATtiny85 (B.5 RESET)
'
'
+----v----+
'
PCINT5/RESET/ADC0/dW B.5 | 1
8| VCC
' PCINT3/XTAL1/CLKI/OC1B/ADC3 B.3 |
2 7| B.2
SCK/USCK/SCL/ADC1/T0/INT0/PCINT2
' PCINT4/XTAL2/CLKO/OC1B/ADC2 B.4 |
3 6| B.1
MISO/DO/AIN1/OC0B/OC1A/PCINT1
'
GND |
4 5| B.0
MOSI/DI/SDA/AIN0/OC0A/OC1A/AREF/PCINT0
'
+---------+
'
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
' &HFF, &H62, &HDF, &HFF ' 1MHz
$PROG &HFF, &HE2, &HDF, &HFF ' 8MHz
' --- Deklarationen... -----------------------------------------------------------------------------------------
declare sub Ton
config timer1 = pwm , prescale = 256 , compare a pwm = clear
up
' 8 MHz / 64 = 31,25 kHz
start timer1
config portb.0 = output : LED_0 alias portb.0
config portb.1 =
output
' Plus für den Buzzer (OC1A)
config portb.2 = input : Eingang alias pinb.2
config portb.3 = output : LED_1 alias portb.3
config portb.4 = output : LED_2 alias portb.4
' --- Variablen... ---------------------------------------------------------------------------------------------
dim Signal as byte
dim t1 as byte
dim t2 as byte
' --- Vorbelegung der Variablen... -----------------------------------------------------------------------------
Signal = 0
LED_0 = 0
LED_1 = 0
LED_2 = 0
DDRB =
255
' B.0 (OC0A) auf 255 setzen
' --- Programm Anfang ------------------------------------------------------------------------------------------
do
pulsein Signal , Eingang , 2 , 1
if Signal > 160
then
' Martin-Horn und 2 LEDs
start timer1
LED_1 = 1
t1 = 53: call ton : waitms 300
LED_1 = 0
LED_2 = 1
t1 = 36: call ton : waitms 300
LED_2 = 0
stop timer1
endif
if Signal < 120
then
' eine LED einschalten
LED_0 = 1
else
LED_0 = 0
endif
loop
' --- Unterprogramme -------------------------------------------------------------------------------------------
sub Ton
do
loop until timer1<
10
' kurz nach dem Ãœberlauf
ocr1c = t1-1
t2 = t1/ 2
ocr1a = t2
end sub
' --- Programm Ende --------------------------------------------------------------------------------------------
end
' --------------------------------------------------------------------------------------------------------------