Difference between revisions of "Porterweiterungen (Deutsch)"

From Ethersex_Wiki
Jump to: navigation, search
(74HC165 als Eingangserweiterung)
(74HC164 als Ausgangserweiterung)
 
(9 intermediate revisions by 3 users not shown)
Line 42: Line 42:
 
|-  
 
|-  
 
| io get pin NUM
 
| io get pin NUM
| Liefert als Rückgabewert den Hexadezimalwert vom 74HC595. Pin 4 ist der erste, Pin 5 der zweite etc.
+
| Liefert als Rückgabewert den Hexadezimalwert vom 74HC165. Pin 4 ist der erste, Pin 5 der zweite etc.
 
|-
 
|-
 
|}
 
|}
Line 52: Line 52:
  
 
==== Anschluss ====
 
==== Anschluss ====
 
+
<pre>
 
HC595_DATA: Serial Data Input (SI) (erster 74HC595)
 
HC595_DATA: Serial Data Input (SI) (erster 74HC595)
 
HC595_CLOCK: SCK (an alle)
 
HC595_CLOCK: SCK (an alle)
Line 58: Line 58:
  
 
QH* bzw. Q7*: Serial Data Input (SI) (zweiter 74HC595)
 
QH* bzw. Q7*: Serial Data Input (SI) (zweiter 74HC595)
 +
</pre>
  
 
[[File:Hc595_example.png|thumb|Schaltbild 74HC595]]
 
[[File:Hc595_example.png|thumb|Schaltbild 74HC595]]
Line 88: Line 89:
 
|-
 
|-
 
|}
 
|}
 +
 +
Hinweis zur Portnummer: Die internen Ports (IO_HARD_PORTS) werden soweit vorhanden von 0 .. n nummeriert. Beim ATMega8 also 0..2 ( B,C,D ). Die Porterweiterungen belegen die darauf folgenden Nummern; beim m8 also ab 3.
 +
 +
ECMD funktioniert mit den Porterweiterungen '''NUR WENN''' beim Konfigurieren ( make menuconfig ) unter I/O als "I/O abstraction model" '''Full-featured''' aktiviert wurde.
  
 
=== 74HC164 als Ausgangserweiterung ===
 
=== 74HC164 als Ausgangserweiterung ===
Line 102: Line 107:
 
==D/A-Wandler mit LTC1257==
 
==D/A-Wandler mit LTC1257==
  
Der LTC1257 ist ein 12bit Digital-Analog-Wandler mit seriellem Eingang und interner Referenzspannung. Zur Steuerung benötigt er lediglich 3 Portleitungen. Da er laut [http://cds.linear.com/docs/Datasheet/1257fb.pdf Datenblatt] mindestens 4,75 Volt Versorgungsspannung braucht, ist er nicht in Systemen mit 3,3 Volt einsetzbar. Die einfachste Form der Anbindung könnte so aussehen:
+
Der LTC1257 ist ein 12bit Digital-Analog-Wandler mit seriellem Eingang und interner Referenzspannung. Zur Steuerung benötigt er lediglich 3 Portleitungen. Da er laut [http://cds.linear.com/docs/Datasheet/1257fb.pdf Datenblatt] mindestens 4,75 Volt Versorgungsspannung braucht, ist er nicht in Systemen mit 3,3 Volt einsetzbar.  
 +
 
 +
=== Anschluss ===
 +
 
 +
Für eine einfache Form der Anbindung siehe Schaltbild.
 +
 
 +
[[File:LTC1257.png|thumb|Schaltbild LTC1257]]
  
[[Bild:LTC1257.png]]
+
=== Konfiguration ===
 +
 
 +
  │ │          I/O --->
 +
  ...
 +
  │ │              [*] digital-to-analog converter (DAC)  --->
 +
  ...
 +
  │ │                  [*] LTC1257 Output
 +
  │ │                  (4) LTC1257: Maximum number of devices
  
 
Das nötige Pinning ist für AVR-NET-IO bereits vorhanden, in der Zuordnung
 
Das nötige Pinning ist für AVR-NET-IO bereits vorhanden, in der Zuordnung
*PA0 = LOAD
+
<pre>
*PA1 = DATA
+
pin(LTC1257_CLK, PA2, OUTPUT)
*PA2 = CLK
+
pin(LTC1257_DATA, PA1, OUTPUT)
 +
pin(LTC1257_LOAD, PA0, OUTPUT)
 +
</pre>
  
 
Mit <code>ltc1257_init</code> werden die Portleitungen passend initialisiert (lt. Datenblatt).
 
Mit <code>ltc1257_init</code> werden die Portleitungen passend initialisiert (lt. Datenblatt).

Latest revision as of 23:01, 4 December 2016

Porterweiterungen

Wenn am AVR schon viele Erweiterungen angeschlossen sind und die freien Ports langsam zur Neige gehen, kann man mit Schieberegistern arbeiten. Zwei dieser Bausteine sind bereits in der SW vorgesehen und können per menuconfig freigeschaltet werden.

74HC165 als Eingangserweiterung

Der 74HC165 ist ein 8-bit Parallel-in/Seriell-out Schieberegister. Das kann man z.B. dazu benutzen um mehrere Schalteingänge seriell abzufragen. So könnte man z.B. 8 Taster mit nur 3 Leitungen abfragen und spart in diesem Fall 5 Portleitungen. Diese Schaltung ist kaskadierbar, so daß weitere Eingänge abgefragt werden können ohne mehr Portleitungen zu benötigen.

Anschluss

HC165_DATA: QH (erster 74HC165)
HC165_CLOCK: CLOCK (alle)
HC165_LOAD: Shift/Load (alle)
GND: Clock Inhibit

SERIAL INPUT: QH (zweiter 74HC165)

Schaltbild siehe bei www.mikrocontroller.net

Konfiguration

 │ │          I/O ---> 
 ...
 │ │              [*] HC165 input expansion --->
 ...
 │ │                  [ ] Inverse output
 │ │                  (1) Number of HC165 registers

In der bei "Hardware/Periphery Class" ausgewählten .m4-Datei muss angegeben werden, wo der erste 74HC165 angeschlossen ist, z.B.:

pin(HC165_DATA, PC3)
pin(HC165_CLOCK, PC4)
pin(HC165_LOAD, PC5)

ECMD

Syntax Kurze Beschreibung
io get pin NUM Liefert als Rückgabewert den Hexadezimalwert vom 74HC165. Pin 4 ist der erste, Pin 5 der zweite etc.

74HC595 als Ausgangserweiterung

Der 74HC595 ist ein 8-bit Seriell-in/Parallel-out Schieberegister mit Latch. Das Latch braucht man, damit beim seriellen reinschieben der Bits diese nicht nacheinander an den Ausgängen erscheinen, sondern erst wenn das ganze Datenwort reingeschoben ist. Der 74HC595 ist sogar kaskadierbar, d.h. man kann theoretisch beliebig viele Ausgänge realisieren, ohne weitere Portleitungen zu benötigen.

Anschluss

HC595_DATA: Serial Data Input (SI) (erster 74HC595)
HC595_CLOCK: SCK (an alle)
HC595_STORE: RCK (an alle)

QH* bzw. Q7*: Serial Data Input (SI) (zweiter 74HC595)
Schaltbild 74HC595

Weitere Informationen siehe bei www.mikrocontroller.net

Konfiguration

 │ │          I/O ---> 
 ...
 │ │              [*] HC595 output expansion --->
 ...
 │ │                  (1) Number of HC595 registers


In der bei "Hardware/Periphery Class" ausgewählten .m4-Datei muss angegeben werden, wo der erste 74HC595 angeschlossen ist, z.B.:

pin(HC595_DATA, PC0)
pin(HC595_CLOCK, PC1)
pin(HC595_STORE, PC2)

ECMD

Syntax Kurze Beschreibung
io set port NUM HEXVALUE [MASK] Setzt Port NUM auf den Wert HEXVALUE (ggf. wird die angegebene MASK verwendet). Port 4 ist der erste, Port 5 der zweite 74HC595 etc.

Hinweis zur Portnummer: Die internen Ports (IO_HARD_PORTS) werden soweit vorhanden von 0 .. n nummeriert. Beim ATMega8 also 0..2 ( B,C,D ). Die Porterweiterungen belegen die darauf folgenden Nummern; beim m8 also ab 3.

ECMD funktioniert mit den Porterweiterungen NUR WENN beim Konfigurieren ( make menuconfig ) unter I/O als "I/O abstraction model" Full-featured aktiviert wurde.

74HC164 als Ausgangserweiterung

Der 74HC164 ist ein 8-bit Seriell-in/Parallel-out Schieberegister. Das kann man z.B. dazu benutzen um ein handelsübliches LCD mit HD44780-Controller mit nur 3 Leitungen anzusteuern (bei direkter Ansteuerung würden 7 Portleitungen benötigt), so wird das bei U. Radig's Webserver gemacht.
In diesem Fall wird kein Latch benötigt, da das LCD erst beim Schalten seiner "E"-Leitung (enable) die Daten aus dem Schieberegister übernimmt.

Schaltbild siehe bei AVR Webserver Software

{ menuconfig todo }

{ pinning todo }

D/A-Wandler mit LTC1257

Der LTC1257 ist ein 12bit Digital-Analog-Wandler mit seriellem Eingang und interner Referenzspannung. Zur Steuerung benötigt er lediglich 3 Portleitungen. Da er laut Datenblatt mindestens 4,75 Volt Versorgungsspannung braucht, ist er nicht in Systemen mit 3,3 Volt einsetzbar.

Anschluss

Für eine einfache Form der Anbindung siehe Schaltbild.

Schaltbild LTC1257

Konfiguration

 │ │          I/O ---> 
 ...
 │ │              [*] digital-to-analog converter (DAC)  --->
 ...
 │ │                  [*] LTC1257 Output
 │ │                  (4) LTC1257: Maximum number of devices

Das nötige Pinning ist für AVR-NET-IO bereits vorhanden, in der Zuordnung

pin(LTC1257_CLK, PA2, OUTPUT)
pin(LTC1257_DATA, PA1, OUTPUT)
pin(LTC1257_LOAD, PA0, OUTPUT)

Mit ltc1257_init werden die Portleitungen passend initialisiert (lt. Datenblatt).

Mit ltc1257_delay kann die interne Wartezeit in µs gesetzt werden, die zum Erkennen des Flankenwechsels durch den DAC beim Schreiben eines Bits gewartet wird (ist vor allem hilfreich, wenn der LTC1257 über Optopkoppler (z.B. CNY17) entkoppelt ist).

Mit ltc1257_set werden die tatsächlichen Werte gesetzt, die der LTC1257 dann als Analogsignal ausgibt. Bei der Verwendung von mehreren LTC1257 im Daisy Chain muss die Reihenfolge der Werte für ltc1257_set in der umgekehrten Reihenfolge der DACs gesendet werden (d.h. das erste Argument ist für den letzten DAC).