Pages: [1]   Go Down
Author Topic: Wie: I/O Multiplexing auf Digital Ports?  (Read 2120 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 36
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie hier in einem früheren Thread beschrieben, habe ich an einem Arduino UNO sowohl den Tlc5940 als auch das LCD 16x2 angeschlossen.
Damit sind die DigitalPins 2-11 und 13 belegt. Pin 0-1 sollten m.W. für die ser. Kommuikation frei bleiben. Pin 12 könnte evtl. verwendet werden, dazu wäre allerdings eine Änderung in der Tlc5940 Bibliothek notwendig, da Tlc.init() irgendwie den Pin 12 auf HIGH setzt. Pin 12 ist auch der PB4/MISO Pin des ATmega328.

Ich benötige nun noch wenigstens 3 reine Digtale Eingänge deren Zustände allerdings nicht in jedem Loop benötigt werden.

Ich stelle mir das so vor, dass z.B. in den geradzahligen Loop-Durchläufen die Pins 8, 7, und 6 auf OUTPUT gesetzt sind und dann zur Ausgabe der Informationen an das LCD verwendet werden können, im nächsten Loop werden diese dann auf INPUT gesetzt und die daran anliegenden Zustände abgefragt.

Dazu müssen natürlich die Pins gemultiplext werden mit einer geeigneten Schaltung, die wechselweise diese Pins an das LCD anschließt und dann wieder an die Eingangssignale und dieser wechsel muss natürlich mit dem Loop synchronisiert werden, wozu dann noch ein weiterer Digitaler Pin notwendig wäre (könnte eigentlich nur noch Pin 12 sein).

Hat jemand mal ein ähnliches Problem gelöst oder kennt jemand iregndeinen Link oder hat sonst einen Tipp?
« Last Edit: December 14, 2010, 01:56:55 pm by tomybyte » Logged

Oldenburg
Offline Offline
Sr. Member
****
Karma: 16
Posts: 270
Arduino, imagine the possibilities!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

evtl. kannst Du Dioden verwenden. Das kann Uwe vermutlich am besten beantworten.
Aber was anderes. Brauchst Du die serielle Kommunikation während dem Betrieb? Wenn nicht, kannst Du die Pins verwenden. Ansonsten gibt es noch die Möglichkeit ein LCD über nur drei Pins anzuschließen...


Gruß

Sebastian
Logged

Libraries:
  - multiCameraIrControl [V1.6]
  -

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 703
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst auch die Analog-Ports als digitale Pins verwenden, falls diese nicht bereits für analoge Aufgaben verwendet wurden.

http://www.arduino.cc/en/Tutorial/AnalogInputPins

Quote
..While the main function of the analog pins for most Arduino users is to read analog sensors, the analog pins also have all the functionality of general purpose input/output (GPIO) pins (the same as digital pins 0 - 13).

Pin mapping
The analog pins can be used identically to the digital pins, using the aliases A0 (for analog input 0), A1, etc. For example, the code would look like this to set analog pin 0 to an output, and to set it HIGH:

pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);


 
Logged

Oldenburg
Offline Offline
Sr. Member
****
Karma: 16
Posts: 270
Arduino, imagine the possibilities!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

...oder anstatt A0 geht auch 14. also pinMode(A0,OUTPUT) ist das gleiche wie pinMode(14,OUTPUT)
Logged

Libraries:
  - multiCameraIrControl [V1.6]
  -

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 703
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Genau und für alle analogen Ports heisst das dann:

A0-A5 ergibt das Port 14-19
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 36
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sehr schön, dann gibt es ja eine Reihe von möglichen Lösungen.
Herzlichen Dank für die Antworten!
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21649
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Tomybyte
Obwohl schon Lösungen genannt wurden, da ich direkt gefragt wurde:
Ich würde das mit gleichzeitig als Eingang und Ausgang verwendete Pin nicht verwenden, da der Ausgang zeitweise vom ATmega definiert ist (wenn das Pin Ausgang ist und es muß garantiert werden, daß da 2 Ausgänge zusammengeschaltet sind kein Kurzschluß entsteht; Ausgang vom Arduino und Ausgang von der Schaltung die gelesen wird) und teilweise (wenn das Pin Eingang ist) vom Zustand des "Eingangssignals" das der Atmega lesen soll. Auf diese Weise hast Du unter Umständen ein schönes Rechtecksignal.
Meine Vorschläge:
* Die Analogen Eingänge des Arduinos als digitale Eingänge bzw Ausgänge verwenden.
* LCD display über ein Schieberegister 74hc595 (beispiele sind auf der Arduino Seite)
* mit Schieberegister die Ausgänge/ Eingänge erweitern ( 74HC595 bzw 74HC165)
* I2C Port Expander

Grüße Uwe




« Last Edit: December 15, 2010, 11:12:42 am by uwefed » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 36
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Uwe,

danke für die Anregungen. Habe hier etwas zur Porterweiterung mit Schieberegistern gefunden:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister
Ist zwar recht gut geschrieben, aber gibt es da auch direkt was für den Arduino?
Hab mal vor vielen jahren was mit Schieberegistern gemacht, muss mich nun aber ganz neu reindenken!

Gruß Tom
« Last Edit: December 15, 2010, 06:49:02 am by tomybyte » Logged

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ist zwar recht gut geschrieben, aber gibt es da auch direkt was für den Arduino?


Etwa so? http://www.arduino.cc/en/Tutorial/ShiftOut

Korman
« Last Edit: December 15, 2010, 07:11:05 am by Korman » Logged

Pages: [1]   Go Up
Jump to: