kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu

10.5 Verwendung eines Timers als Zähler

Ergänzungen aus der Vorlesung vom 02.04.2014
Additions from the lecture of 02.04.2014
Dodatki z wykładu z 02.04.2014
Lösungen der Aufgabe 1 und 2 von Übung 2 und Varianten zum Zähler-Programm.
  • zaehler.c - Original C++ Programm, 500Hz-Ton auf PD7
  • zaehler2.c - C-Variante
  • zaehler3.c - Zähler im 1-Sekunden-Takt auf PORTC

Übungsaufgaben

exercises

ćwiczenia

Aufgabe 1 - Programmieren Sie eine Stopuhr

Task 1 - Program a stopwatch

Zadanie 1 - Zaprogramuj stoper

  • Auf PORTC wird in Zehntelsekunden gezählt.
  • PB0: Start / Pause
  • PB1: Reset

Aufgabe 2 - Wechselblinkanlage

Task 2 - Alternating flashers

Zadanie 2 - Migacze naprzemienne

  • Schließen Sie an PORTA zwei LEDs mit integrierten Vorwiderständen an.
  • Schreiben Sie ein Programm, bei dem das Leuchten zwischen den LEDs alle 500ms wechselt.
ENDE Ergänzungen aus der Vorlesung vom 02.04.2014
END Supplements from the lecture of 02.04.2014
END Dodatki z wykładu z 02.04.2014
Übung 3 zur Vorlesung vom 09.04.2014
Exercise 3 for the lecture from 09.04.2014
Ćwiczenie 3 do wykładu od 09.04.2014

Lösen Sie die Aufgaben A2 und A4 der Übung zur Vorlesung vom 26.03. (Foto Tafelbild zu Beginn von Kapitel 3) unter Verwendung von Bitshift-Operatoren und unter Verwendung der Konstanten, die für jedes Bit der Register definiert sind. Beispielsweise würde man statt (PORTA & 0b00000001) folgendes schreiben: (PORTA & (1<

Complete tasks A2 and A4 of the exercise Lecture from 26.03. (Photo panel at the beginning of Chapter 3) usi Bitshift operators and using the Constants defined for each bit of the registers. For example, instead of (PORTA write: (PORTA

Wykonaj zadania A2 i A4 ćwiczenia Wykład z 26.03. (Panel ze zdjęciami na początku rozdziału 3) za pomo Operatorzy Bitshift i używanie Stałe zdefiniowane dla każdego bitu rejestrów. Na przykład zamiast (PORTA napisz: (PORTA

Die notwendigen Vergleichsbedingungen sollen direkt formuliert werden, wo sie benötigt werden, ohne die Verwendung von Hilfsfunktionen.

The necessary comparison conditions should be direct be formulated where they are needed without the Use of auxiliary functions.

Niezbędne warunki porównania powinny być bezpośrednie być sformułowane tam, gdzie są potrzebne bez Korzystanie z funkcji pomocniczych.

Die Aufgaben sollen somit in der Form gelöst werden, wie es in der Tabelle 3.3-1 in Kapitel 3.3 in der vierten Spalte (Alternative Umsetzung 3) angegeben ist.

The tasks should thus be solved in the form, as it in Table 3.3-1 in Chapter 3.3 in the fourth column (Alternative implementation 3) is indicated.

Zadania powinny zatem zostać rozwiązane w formie, jak w tabeli 3.3-1 w rozdziale 3.3 w czwartej kolumnie (Alternatywne wdrożenie 3) jest wskazane.

Orientieren Sie sich dabei an der Musterlösung zur Stopuhr-Aufgabe aus der Vorlesung vom 09.04.

Orient yourself to the model solution for Stopwatch task from the lecture of 09.04.

Skorzystaj z modelu rozwiązania dla Zadanie stopera z wykładu 09.04.

ENDE Übung 3
END Exercise 3
KONIEC Ćwiczenie 3

Nutzen des Beispiels

  • Erstellen eines Echtzeitfähigen Systems.
  • Das unten stehende Programm sorgt dafür, dass der Durchlauf der Endlosschleife jedesmal die gleiche Zeitdauer in Anspruch nimmt.
  • Das funktioniert, indem am Ende der Schleife eine Warteschleife kommt, die erst verlassen wird, wenn das Zählregister des Timers 2 einen bestimmten Wert hat (hier 36).

Verwendete Befehle und ihre Bedeutung

Befehl Bedeutung
TCCR2 Resgister zur Konfigurierung des Timers 2
DDRD |= (1<<PD7); Bit 7 von PortD in jedem Fall auf 1 setzen, ohne die anderen Bits zu beeinflussen.

Tabelle 10.5-1: Befehlsübersicht

Beispielprogramm

#include<avr/io.h>

using namespace std;

int main(void)
{
    bool toggel = false;

    //Timer 2 als Zähler mit Vorteilung von 256 definieren:

            //WGM20 = 0 WGM21 =0 => Zählbetrieb, zählt ständig von 0 bis 255
            //COM20 = 0 COM21 = 0 => Pin OC2 nicht verbunden
            //COM20 = 1 COM21 = 1 => Pin OC2 löschen on Top, setzen bei Compare
            //CS 22 21 20 : 000 gestoppt
            //CS 22 21 20 : 001 Vorteilung durch 1
            //CS 22 21 20 : 010 Vorteilung durch 8
            //...
    TCCR2 = (1<<FOC2) | (0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (1<<CS22) | (1<<CS21) | (0<<CS20);

    //OCR2 auf bestimmten Comparewert setzen, um Ton zu erzeugen: ???
    //OCR2 = 127; 

    DDRD |= (1<<PD7); //Pin mit Lautsprecher auf Ausgang setzen.

    toggel = false;

    TCNT2=0;
    while(true)
    {
        //Pin PD7 toggeln:
        if(toggel==true)
            PORTD |=0b10000000;
        else
            PORTD &=0b01111111;
        toggel=!toggel;

        while(TCNT2<36); //90->400Hz, 36->1kHz Durch das Toggeln hört man immer f/2
        TCNT2=0;
    }
    return 0;
}
 

Code 10.5-1: Beispiel

Projekt herunterladen