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 der internen Pullup-Widerstände

Kann man auf die Zusatzwiderstände bei Tastern verzichten?

  • Das folgende Schaltbild zeigt die interne Anordnung an den digitalen Ein- und Ausgängen.
  • Neben den Verpolschutzdioden, gibt es dort auch einen Pullup-Widerstand, der mittels eines MOSFET-Transistors gegen die 5Volt Versorgungsspannung geschaltet werden kann.
  • Geschieht dies, so wird bei Nichtbeschaltung des entsprechenden Pins der Eingang auf einen definierten positiven Pegel gezogen. Er steht dann logisch auf 1.
  • Schließt man bei durchgeschaltetem Pullup-Widerstand einen Taster an, so muß man ihn gegen Masse schalten (vergl. Bild unten).
  • Bei Betätigen des Tasters wechselt der Eingangszustand dann von 1 auf 0. (...also umgekehrt als bei den Beispielen in der Einführung, wo ein "Pulldown"-Widerstand gegen Masse geschaltet wird und der Taster gegen +5Volt.)
ersatz.png

Bild 0-1: Ersatzschaltbild I/O-Pin

  • In Register SFIOR Bit 2 (3. Bit) wird PUD - "PullUp Disable" genannt.
  • Ist PUD gesetzt (1), so sind für alle Ports die Pullup-Widerstände deaktiviert.
  • Ist PUD nicht gesetzt (0), so sind für alle Ports die Pullup-Widerstände aktiviert.
  • Setzen von PUD ohne Beeinflussung der anderen Bits: SFIOR |= 1<<PUD;
  • Löschen von PUD ohne Beeinflussung der anderen Bits: SFIOR &= 255 - (1<<PUD);
  • Der folgende Auszug aus dem Datenblatt zeigt außerdem, dass auch noch die Bits des Port-Registers (PORTA, B, C, D) auf 1 gesetzt sein müssen, damit die Pullup-Widerstände aktiv sind:
ersatz.png

Bild 0-2: Auszug aus dem Datenblatt: Zur Aktivierung der Pullup-Widerstände muß auch das korrespondierende PORT-Bit gesetzt sein.

  • Zum Testen der Pullup-Widerstände, wird im folgenden Testprogramm Port A als Eingang verwendet.
  • Die Pullup-Widerstände werden für Port A aktiviert und der Zustand von PortA nach Port C geschrieben, um den aktuellen Zustand von Port A dezimal in der Anzeige zu sehen (2. Mikrocontroller).
#include<avr/io.h>

int main()
{
    DDRA = 0b00000000;
    DDRC = 0b11111111;

    SFIOR &= 255 - (1<<PUD);
    PORTA = 0b11111111;

    while(1)
    {
        PORTC = PINA;
    }

    return 0;
}
 

Code 0-1: Testen der Pullup-Widerstände.

Projekt Download pullup.zip
  • Folgendes Bild zeigt die Testanordnung, wobei Bit 7 und 0 von Port A hier über Drähte auf Masse gezogen sind.
  • Dadurch ergibt sich als Bitmuster 0b01111110, oder dezimal die angezeigte 126:
ersatz.png

Bild 0-1: Test mit Pullup-Widerständen am Experimentierboard unter Verwendung des obigen Programms.