Hallo,
ich habe ein Problem, dass meine Leds nichts anzeigen.
Angeschlossen ist das ganze auf dem Steckbrett wie im oben hinterlegten
Schaltplan.
Der avr-gcc Code sieht wie folgt aus
Ich werde gleich noch einmal schauen, ob ich einen LogikAnalyser am
laufen bekomme, um zu schauen, wie der Datenfluss ist.
Hi
Deine Verdrahtung geht gar nicht.
Kannst du mal beschreiben was du machen wolltest?
(Beide einzeln ansprechen oder beide mit einem /CS betreiben, die
Telegramme durch einen Chip 'durchreichen'????)
Beide SO-Pins der MCP arbeiten gegen einander. Da beide nicht das
gleiche zurück geben werden, dürfte das Krach geben.
Löse bitte mal den SS von Chip mit A0=1 und teste dann die Software mit
nur einem Chip. Ich glaube da könnte sogar schon einiges laufen.(hab
noch nicht alles durch)
Das du MCP_HAEN nutzen möchtest ist gut und auch richtig, nur so lange
ist die default Adr des Chips immer 0!
Du hast in den Funktion Call aber eine 1 stehen.
Beide Chips haben die Adresse 0 (Default) dort werden die folgenden
Register gemeinsam gesetzt:
>BANK = 0, MCP_SEQOP = 1, MCP_HAEN = 1
ABER gut ist das nicht!
Ich habe nun gestern das Problem gehabt, dass ich überhaupt nicht mehr
senden konnte mit meinem Attiny. Fehler im Programm noch nicht weiter
rausgesucht. Am LogicAnalyer wurden die Signale nicht mehr
rausgeschickt.
Hab dann den ganzen Code deutlich verringert, und teste das ganze gerade
erst einmal mit einem Register. Das 2. folgt heute/morgen.
Mit der Problematik der Adressierung bin ich noch nicht wirklich weiter.
Wenn ich das Datenblatt richtig deute, ist es doch so, dass wenn ich die
Hardwareadressierung(A0 - A3) nutzte, alle Signale 1:1 durchgeschleift
werden dürfen. Das sollte doch gerade der große Vorteil sein bei den
Teilen. Die wären somit deutlich flexibler als HC595 Bausteine mit
entsprechenden Gegenstück für Parallel->Seriell. Die Kosten für die
Bausteine liegen bei Reichelt 1,30€, Großhändler wie Mouser bereits ab
25Stk 1,00€.
Da muss man sich dann auch nicht großartig mit den HC595 Modulen
herumschlagen, auch wenn hier die Preise noch etwas drunter liegen.
Hi
das wollte ich doch auch von dir wissen wie du arbeiten wolltest.
Du willst die Daten durch reichen ok, der Anschluß sieht wie folgt aus:
SCL - auf beide -> war Ok
AVR SS - auf beide -> war Ok
AVR MOSI -> SI (ADR:0) -> SO (ADR:0) -> SI (ADR:1) -> SO (ADR:1) -> AVR
MISO
Willst du das machen???
Für die SW ist es zu spät, ich schau mal morgen drüber.
Stephan schrieb:> Hi> das wollte ich doch auch von dir wissen wie du arbeiten wolltest.> Du willst die Daten durch reichen ok, der Anschluß sieht wie folgt aus:
Nein, dass wollte ich gerade nicht. Ich hatte gehofft, dass ich alles
parallel anschließen kann
Hallo Stephan,
ich habe das ganze nun doch noch mal schnell zusammengesetzt. An dem 2.
MCP habe ich nur einen Taster angeschlossen, sollte für den Test
reichen.
Es funktioniert wie ich es wollte.
einmal ausgeführt wird. Da nach dem Reset das Register im MCP nicht mehr
gesetzt wird, werden alle MCPs gleichzeitig angesprochen. Danach sind
diese über die Hardwareadressen ereichbar. SI, SO, SCK und CS können
zusammengeschaltet werden. Kaskadenschaltung wie bei dem HC595 o.ä. ist
NICHT notwendig und in meinen Fall auch nicht erwünscht. Mit 128 IOs
sollten für mich voll ausreichen am kleinen Attiny841 ;) Zur Not wird
ein weiter CS für die nächsten 128 IOs genutzt.
Der derzeitige Code belegt auch nicht sonderlich viel an Speicher.
1
ProgramMemoryUsage:328bytes4,0%Full
2
DataMemoryUsage:0bytes0,0%Full
P.S.: Der MCP scheint auch Taster bereits ganz gut zu entprellen!
1
staticuint8_tlast=0;
2
uint8_tnow=mcp_read_bit(1,MCP_GPIOA,0);
3
staticuint8_tct=0;
4
if(now!=last)
5
{
6
last=now;
7
if(now)ct++;
8
mcp_write_byte(0,MCP_GPIOB,ct);
9
}
Reicht schon aus. Das Programm läuft ohne Delay mit ca 65µs durch.
Stefan S. schrieb:> Nein, dass wollte ich gerade nicht. Ich hatte gehofft, dass ich alles> parallel anschließen kann
Ja kannst Du auch, dafür sind die Adresspins gedacht, I2C-Adressierung
auf SPI umgesetzt.
Eine Kaskadierung wie bei normalen Schieberegistern würde nicht
funktionieren, da keine Daten von SI nach SO durchgereicht werden.
Aber das hast Du ja jetzt schon selbst festgestellt.
Stephan schrieb:> Deine Verdrahtung geht gar nicht.
Das ist nur Deine Meinung.
So,
ich habe nun so einiges durchgetestet und bin der Meinung, es
funktioniert so, wie ich es mir gedacht habe. Der SPI Bus ist parallel
zu den MCPs angeschlossen. Die HWAdressen 0x00 und 0x01 wurden vergeben.
Im Anhang das Programm. Die eigentlich Libary ist kompakt gehalten, ohne
unnötig viele Funktionen bereit zustellen.
Das Testszenario besteht aus 3*8Leds an MCP0 PORTB, MCP1 PORTA und MCP1
PORTB. An MCP0 PORTA sind 6 Kodierschalter angeschlossen, die das Muster
bereitstellen. Mit den 2 Tastern kann das Muster nach Rechts oder Links
auf den Ledreihen verschoben werden.
Kurzes Video gibt es unter
https://www.dropbox.com/s/nrslobw8l60iv30/WP_20151006_22_20_49_Pro.mp4?dl=0
Hallo Mathias,
nach dem Spannungsverlust, bzw. nach dem Betätigen von Reset wird der
MCP wieder in Werkseinstellung gesetzt.
Im Datenblatt Seite 9/10 sind die Werte danach für das IOCON Register
wieder auf "0000 0000". Das heißt bei der Initialisierung werden zuerst
einmal alle MCPs gleichzeitig angesprochen. Erst nach der
Initialisierung sind die Hardwareaddressen aktiv.
P.S. Im Anhang noch eine etwas überarbeitete Version. Hauptsächlich
wurden aus der Dokumentation die Beschreibungen der Register lediglich
hinzugefügt.
Werde mich die Tage noch ein bisschen mit dem Teil auf dem Steckbrett
versuchen. Vorallem werde ich testen, ob es klappt bei der Adressierung,
dass diese 0x00 ist, wenn ich je Adressbit ein PullDown von 10-20k
setze. Dann müsste man nur noch 2 Pins (Solderpads) gebrauchen, um die
Adresse auf 1 zu setzen. Derzeit ist das noch mit 3 Pins geplant.
Das ganze soll dann eine 5x5cm Platine werden mit 2 Expandern. Optional
sollen dort Reset, sowie alle 4 Interrupts herausgeführt werden. Diese
ist getrennt von der eigentlichen SPI Schnittstelle. Sodass ich die SPI
Schnittstelle (2x3 Pinheader) direkt mit Flachband durchschleifen kann.
An der Platine ist noch einiges an Arbeit zu machen, aber hier einmal
der Vorab Entwurf.