Mikrocontroller-Praxis ATtiny85 


Elektronik-Labor   Projekte   AVR 





https://www.amazon.de/dp/B08S2YCJQX
https://www.ak-modul-bus.de/stat/buch_mikrocontroller_praxis_attiny_85.html
https://www.ak-modul-bus.de/stat/lernpaket_mikrocontroller.html

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 Tricks
Kennlinienschreiber
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

' --------------------------------------------------------------------------------------------------------------


Weitere Anwendugnen zum Tiny85:

Der Morse-Fuchs
Kapazitätsmessung


Elektronik-Labor   Projekte   AVR