Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
microcontrollertechnik:3_logische_funktionen [2022/09/19 15:47] tfischer |
microcontrollertechnik:3_logische_funktionen [2024/03/11 00:12] (aktuell) mexleadmin |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== 3. Logische Funktionen ====== | + | ====== 3 Logische Funktionen ====== |
===== Tasten einlesen | ===== Tasten einlesen | ||
Zeile 14: | Zeile 14: | ||
==== Video ==== | ==== Video ==== | ||
+ | {{youtube> | ||
+ | |||
+ | <WRAP hide> | ||
{{youtube> | {{youtube> | ||
+ | </ | ||
</ | </ | ||
Zeile 35: | Zeile 39: | ||
- Zunächst wird eine Startanzeige mit dem Namen des Programms dargestellt. | - Zunächst wird eine Startanzeige mit dem Namen des Programms dargestellt. | ||
- Als nächstes ist ein Displaybild zu sehen, in dem verschiedene logische Formeln mit Ergebnissen abgebildet sind: | - Als nächstes ist ein Displaybild zu sehen, in dem verschiedene logische Formeln mit Ergebnissen abgebildet sind: | ||
- | - AND-Verknüpfung: | + | - AND-Verknüpfung: |
- | - OR-Verknüpfung: | + | - OR-Verknüpfung: |
- | - NOT-Verknüpfung: | + | - NOT-Verknüpfung: |
- | - XOR-Verknüpfung: | + | - XOR-Verknüpfung: |
- Werden die Tasten S1 und S2 gedrückt, so werden die Ergebnisse aktualisiert. | - Werden die Tasten S1 und S2 gedrückt, so werden die Ergebnisse aktualisiert. | ||
- Das Programm zu diesem Hexfile soll nun erstellt werden | - Das Programm zu diesem Hexfile soll nun erstellt werden | ||
<-- | <-- | ||
- | --> III. Eingabe in Atmel Studio # | + | --> III. Eingabe in Microchip |
\\ \\ | \\ \\ | ||
<panel type=" | <panel type=" | ||
- | Beachten Sie, dass die '' | + | Beachten Sie, dass die '' |
</ | </ | ||
Zeile 94: | Zeile 98: | ||
// Festlegung der Quarzfrequenz | // Festlegung der Quarzfrequenz | ||
#ifndef F_CPU // | #ifndef F_CPU // | ||
- | #define F_CPU 8000000UL // ATmega | + | #define F_CPU 18432000UL // ATmega |
# | # | ||
Zeile 182: | Zeile 186: | ||
// Tastenwerte S1 und S2 (ohne Entprellen) einlesen | // Tastenwerte S1 und S2 (ohne Entprellen) einlesen | ||
void readButtons(void) | void readButtons(void) | ||
- | { | + | // |
- | | + | {// __76543210 |
- | // __76543210 | + | DDRC = DDRC & 0b11111100; |
- | DDRC = DDRC & 0b11111100; | + | PORTC = |
- | PORTC = | + | _delay_us(1); // Umschalten der Hardware-Signale abwarten |
- | _delay_us(5); // Umschalten der Hardware-Signale abwarten | + | |
- | | + | |
sw1 = !(PINC & (1 << PC0)); // Tasten invertiert in Bitspeicher einlesen | sw1 = !(PINC & (1 << PC0)); // Tasten invertiert in Bitspeicher einlesen | ||
sw2 = !(PINC & (1 << PC1)); // somit gedrueckte Taste =" | sw2 = !(PINC & (1 << PC1)); // somit gedrueckte Taste =" | ||
- | | + | DDRC = DDRC | 0b00000011; |
- | | + | |
} | } | ||
</ | </ | ||
Zeile 232: | Zeile 233: | ||
- Funktion '' | - Funktion '' | ||
- Durch die Änderung des Datenrichtungs-Register (DDR) wird die Richtung der Anschlüsse vorgegeben. Es sollen dabei die Schalter S1 und S2 einlesbar gestellt werden (in Simulide durch die Tasten '' | - Durch die Änderung des Datenrichtungs-Register (DDR) wird die Richtung der Anschlüsse vorgegeben. Es sollen dabei die Schalter S1 und S2 einlesbar gestellt werden (in Simulide durch die Tasten '' | ||
- | - Die Verzögerung '' | + | - Die Verzögerung '' |
- | - Mit der Zuweisung von '' | + | - Mit der Zuweisung von '' |
- Im Register '' | - Im Register '' | ||
- Zum Schluss müssen die Anschlüsse wieder auf Output geschaltet werden, damit danach die Daten für das Display sinnvoll übertragen werden können. \\ \\ \\ \\ | - Zum Schluss müssen die Anschlüsse wieder auf Output geschaltet werden, damit danach die Daten für das Display sinnvoll übertragen werden können. \\ \\ \\ \\ | ||
Zeile 250: | Zeile 251: | ||
--> Aufgaben# | --> Aufgaben# | ||
- | - Berechnungen zum '' | + | - Berechnungen zum '' |
- Suchen Sie den Wert des Pull-up Widerstands an einem I/O-Pin im Datenblatt des atmega 88 unter '' | - Suchen Sie den Wert des Pull-up Widerstands an einem I/O-Pin im Datenblatt des atmega 88 unter '' | ||
- | - Bestimmen Sie $\tau$ aus der Streukapazität von $C_s\approx | + | - Bestimmen Sie $\tau$ aus der Streukapazität von $C_{\rm s} \approx |
- | - die meisten Befehle des AVR-Microcontrollers benötigen 2 Takte. Bei $10 MHz$ benötigt ein Befehl etwa $2 \cdot {{1}\over{10 MHz}} = 2 \cdot 10^{-7}s = 0,2 \mu s$. \\ Wie weit ist nach einem Befehl der Streukondensator aufgeladen? | + | - die meisten Befehle des AVR-Microcontrollers benötigen 2 Takte. Bei $10~\rm MHz$ benötigt ein Befehl etwa $\rm 2 \cdot {{1}\over{10~ MHz}} = 2 \cdot 10^{-7}~ s = 0,2~ \mu s$. \\ Wie weit ist nach einem Befehl der Streukondensator aufgeladen? |
- Ab wann kann davon ausgegangen werden, dass die parasitäre Kapazität voll aufgeladen ist? | - Ab wann kann davon ausgegangen werden, dass die parasitäre Kapazität voll aufgeladen ist? | ||
- | - Wie viele Takte entsprechen $1\mu s$ bei einer Taktfrequenz von $8 MHz$? | + | - Wie viele Takte entsprechen $1~\rm \mu s$ bei einer Taktfrequenz von $8~\rm MHz$? |
- Wann wäre die Kapazität aufgeladen, wenn diese sich durch einen externen IC um ein 10faches erhöht? | - Wann wäre die Kapazität aufgeladen, wenn diese sich durch einen externen IC um ein 10faches erhöht? | ||
- | - Die Situation bei einem Eingangspin ist etwas anders: Hier existiert die parasitäre Kapazität auch. Diese wird aber mit ca. $20mA$ geladen. \\ Nehmen Sie eine High Spannung von $5V$ an. | + | - Die Situation bei einem Eingangspin ist etwas anders: Hier existiert die parasitäre Kapazität auch. Diese wird aber mit ca. $20~\rm mA$ geladen. \\ Nehmen Sie eine High Spannung von $5~\rm V$ an. |
- Wie lange dauert es nun bis die parasitäre Kapazität aufgeladen ist? | - Wie lange dauert es nun bis die parasitäre Kapazität aufgeladen ist? | ||
- | - Wie viele Takte entspricht das bei $10 MHz$? | + | - Wie viele Takte entspricht das bei $10~\rm |
- | - Generell müssen intern im Microcontroller in jedem Takt die Kapazitäten von MOSFETs geladen werden. \\ Wieso werden bei schnelleren Anwendungen (z.B. Mobilgeräten) geringere Versorgungsspannungen (z.B. $1,8V$) verwendet? | + | - Generell müssen intern im Microcontroller in jedem Takt die Kapazitäten von MOSFETs geladen werden. \\ Wieso werden bei schnelleren Anwendungen (z.B. Mobilgeräten) geringere Versorgungsspannungen (z.B. $1,8~\rm V$) verwendet? |
+ | - ASCII Code: Warum können nicht einfach die Zahlen $0...9$ übertragen werden? Stattdessen müssen diese in ein ASCII Format gewandelt werden. \\ Was würde ausgegeben werden, wenn tatsächlich die Zahlen $0...9$ gesendet werden würden? | ||
- Erweiterung der Schalteranzahl | - Erweiterung der Schalteranzahl | ||
- Fügen Sie zwei weitere Tasten mit Verbindung zu Masse und jeweils den Eingängen '' | - Fügen Sie zwei weitere Tasten mit Verbindung zu Masse und jeweils den Eingängen '' | ||
Zeile 266: | Zeile 268: | ||
- Ändern Sie den Code so, dass diese Schalter eingelesen werden können. Dazu sollten die Funktionen '' | - Ändern Sie den Code so, dass diese Schalter eingelesen werden können. Dazu sollten die Funktionen '' | ||
- Als ersten Test sollten die booleschen Funktionen statt den Schaltern '' | - Als ersten Test sollten die booleschen Funktionen statt den Schaltern '' | ||
- | - Im nächsten Programm sollen alle Schalter '' | + | - Im nächsten Programm sollen alle Schalter '' |
<-- | <-- | ||
+ | |||
+ | |||
+ | |||
+ | * Diese [[https:// | ||
+ | |||