Forum: Mikrocontroller und Digitale Elektronik Proterweiterungen f. AVR


von 123456789 9. (mia)


Lesenswert?

Hallo Leute!

Ich habe hier gerade wieder mal ein kleines Problem mit den verfügbaren
Ports an meinen AVRs.
Ich muss insgesammt 278 Digitale Ausgänge mit nem AVR ansteuern.
Matrix ist nicht möglich.
Auf der suche nach geeigneten Porterweiterungen habe ich einiges
gefunden, aber nichts davon ist so wirklich perfekt, ....

Wer kennt da noch möglichkeiten?

von Karl H. (kbuchegg)


Lesenswert?

Was hast Du denn gefunden und warum passt es denn nicht?

Ansonsten: Schieberegister.

von Kai R. (kairiek)


Lesenswert?

>aber nichts davon ist so wirklich perfekt, ....

Manchmal muss man eben Abstriche machen.

Wie Karl Heinz schon meinte:
Sag uns einfach deine Ideen/Suchergebnisse und versuche die Pros und
Cons abzuwägen.

MFG

Kai

von Roland P. (pram)


Lesenswert?

Wahrscheinlich ists zu langsam die Bits seriell raus zu schieben :-)

Evtl kannst ein 74HC573 Latch nehmen, da kannst dann an PortA-PortC
jeweils 15 Stück dran hängen (macht insg. 45 * 8 = 360 Ports) und an
PortD einen 74HC154 4 to 16 Line-Decoder mit dem du die einzelnen
Gruppen der Latches dann ansteuerst.

Die Daten gibst dann so aus:

char data[15*3];
char i;
for (i = 1; i <= 15; i++) {
PORTA=data[ 3*i + 0]; // Daten anlegen
PORTB=data[ 3*i + 1];
PORTC=data[ 3*i + 2];
PORTD=i; // Strobe-Impuls auf die Latch-Gruppe anlegen
PORTD=0; // das war der Impuls (evtl noch ein Dela davor setzen)
}

grob geschätzt wird das ca 200 CPU-Cycles verbrauchen (bei 360
Outputs).

Gruß
Roland
}

von Karl H. (kbuchegg)


Lesenswert?

> for (i = 1; i <= 15; i++)

Und der naechste der wieder mal den gleichen Fehler macht.
In C wird bei 0 zu zaehlen angefangen!

Gewoehnt Euch an, dass eine Schleife die ueber ein Array laeuft
immer so aussieht:

for( i = 0; i < MAXSIZE; i++ )

(MAXSIZE muss natuerlich angepasst werden. Ansonsten:
* bei 0 zu zaehlen anfangen.
* < , nicht <=

Alles andere führt unweigerlich immer wieder zu Fehlern.
(wie in diesem Fall: 3 * 15 + 0  -> Indexnummer hinter den Array:
Das Array ist definiert zu:
   char data[15*3]
hat also 45 Elemente. D.h. der Index des letzten definierten
Elements ist 44! ).

von Wegstabenverbuchsler (Gast)


Lesenswert?

@123456789 987654321 (MiA)
"Auf der suche nach geeigneten Porterweiterungen habe ich einiges
gefunden, aber nichts davon ist so wirklich perfekt, ....
Wer kennt da noch möglichkeiten?"

Mal ganz ernsthaft gefragt: Wie soll man deine Frage beantworten
könenn, wenn du nicht schreibst welche Lösungsansätze du bisher kennen
gelernt hast und für nicht so gut befindest?

PS: vielleicht sollte man vor dem Abschickken des "Submit" Knopfes
den Beitrag noch mal durchlesen, und sich selbst fragen ob den auch
jeder versteht und sinnhaft drauf antworten kann ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.