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
kramann.info
© Guido Kramann

Login: Passwort:




Verwendung eines Timers als Zähler

Ergänzungen aus der Vorlesung vom 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

Aufgabe 1 - Programmieren Sie eine Stopuhr

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

Aufgabe 2 - Wechselblinkanlage

  • 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
Übung 3 zur Vorlesung vom 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<

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

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.

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

ENDE Übung 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 0-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 0-1: Beispiel

Projekt herunterladen