mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Proterweiterungen f. AVR


Autor: 123456789 987654321 (mia)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hast Du denn gefunden und warum passt es denn nicht?

Ansonsten: Schieberegister.

Autor: Kai Riek (kairiek)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht 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
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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! ).

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.