Ich habe vor für mein Techniker Abschlussprojekt ein "automatisiertes" Mensch Ärger dich nicht Brettspiel zu basteln. Soweit habe ich auch die Hardware zusammen und es sieht wie folgt aus:
Die 73 RGB-LED's sind auf einem Breadboard in Spielfeldform aufgestellt und verdrahtet.
Die Ansteuerung soll von einem Arduino Due kommen welcher Anweisungen zu den anzusteuernden Ausgängen von meinem Raspberry Pi bekommt. Auf dem läuft gewissermaßen das Spiel.
Da ich PWM benutzen muss und der Due nicht viele PWM Ausgänge hat habe ich mich schlau gemacht und die PCA9685 I/O Expander Boards gefunden und davon auch insgesamt 14 verbaut und beschaltet. Eine externe Spannungsversorgung (5V 2,4A) soll die LED's versorgen da ich nicht glaube das der Arduino das schafft.
Den I2C Bus habe ich durchgehend verschalten und habe auch bis zum letzten Chip Durchgang.
Habe den 3,3V Ausgang auf dem Due verwendet. Nach Rücksprache mit meinem Lehrer sollte die 5V externe Versorgung dem nicht in die Quere kommen also sind keine Level Shifter verbaut.
Jetzt zu meinem Problem:
Ich habe einen Testcode auf den Arduino geladen um die LED's und die Funktion im allgemeinen zu prüfen.
Dabei schalte ich die Grünen LED's abwechselnd an und aus. Das ganze funktioniert auch sehr gut bei 52 der LED's und ich dachte erst das es an der Versorgungsspannung liegt, aber mir fiel auf das die nicht funktionierenden LED's alle hinter dem 10. Chip verdrahtet sind. Und zwar exakt bis dahin. Habe es auch versucht nur die LED's ab dem 11. Chip anzusteuern und wie erwartet bleibt alles dunkel. Die Schaltungen sind durchgehend identisch was Widerstände etc. angeht und der Kabelweg ist an sich auch nicht lang. Das alles ist auf einem Brett 50cm*50cm platziert weshalb ich bezweifel das der Bus das nicht hinbekommt. Habe etwas mit Kapazitätsproblemen etc gefunden und dann auch verschiedene Pull-Up Widerstände probiert, normalerweise hatte ich 4,7k benutzt habe es aber auch mit 2,2k versucht und auch die Baudrathe im Programm von dem 1600 maximum gedrosselt. Tut sich aber nichts.
Mein Lehrer wirft nun mit Schlagworten wie "Subbusse", "Switch" und "I2C Repeater" um sich aber ich kenne mich da nicht wirklich aus. Hab auch noch einen Arduino Mega2560 hier rumliegen, weiß nicht ob ich den einfach dazuschalten kann und der quasi die 4 restlichen Chips übernimmt. Da widerum weiß ich auch nicht wie das mit der Seriellen Kommunikation mit dem Raspberry funktionieren wird.
Nebenbei bemerkt bin ich an sich absoluter Neuling was Mikrocontrollerprojekte angeht.
Im Anhang befinden sich Bilder des Aufbaus, zumindest für eine LED.
Habt ihr Ideen woran es liegt und wie ich es behebe?
Muss es nur irgendwie hinbekommen das ich alle LED's ansteuern kann damit ich an meinem Spielprogramm weitertüfteln kann:)
Danke im Voraus:)
Kabel stimmen, wie gesagt hab Durchgang bis zum Ende des Busses.
Bekommt der Due denn überhaupt was ab von den 5V? Bisher habe ich keine Probleme.
Auszug aus Datenblatt des PCA:
SCL - I2C clock pin, connect to your microcontrollers I2C clock line. Can use 3V or 5V logic, and has a weak
pullup to VCC
SDA - I2C data pin, connect to your microcontrollers I2C data line. Can use 3V or 5V logic, and has a weak pullup
to VCC
Allerdings habe ich es Anfangs ohne meine Pullups probiert und habe keine Adresse auf dem Bus finden können als ich einen I2C Scanner Code drüberlaufen lassen hab.
Und wie gesagt kenne mich wirklich nicht sonderlich gut aus, hab nur noch das eine Problem das mich vom eigentlichen Grund der Wahl des Projektes fernhält, dem Programmieren;D
Vielleicht hab ich auch ein wenig zu hoch gegriffen was das Projekt angeht.
Den Due habe ich bestellt weil ich dachte das der Code für den Speicher des Mega zu groß wird.
Bin jetzt anderer Meinung^^
Kann gerne mal versuchen ob der Mega einen Unterschied macht.
Weil nicht Wahr sein kann, was nicht Wahr sein darf!
? ? ?
Laut deinem Plan werden alle PCA und auch die zusätzlichen Pullup mit 5V versorgt.
Auf die Bemerkung, dass jedes PCA Board eigene Pullup hat, bist du erstaunlicher Weise gar nicht eingegangen.
Ist nicht so wichtig... nehme ich mal an....
combie:
Weil nicht Wahr sein kann, was nicht Wahr sein darf!
? ? ?
Laut deinem Plan werden alle PCA und auch die zusätzlichen Pullup mit 5V versorgt.
Auf die Bemerkung, dass jedes PCA Board eigene Pullup hat, bist du erstaunlicher Weise gar nicht eingegangen.
Ist nicht so wichtig... nehme ich mal an....
Doch, im Auszug aus dem Datenblatt steht das die eigene Pullups haben, habe es jetzt auch ohne meine zusätzlichen Widerstände versucht, kein Unterschied zu vorher. Funktioniert immer noch nur bis zum 10. Chip.
Das mit der Kurve kann ich leider nicht analysieren da ich kein Oszilloskop habe was man meines Wissens dazu braucht.
Und das mit den 5V war so gemeint das ich keine Ahnung hab ob das so ist. Laut meinem Betreuungslehrer welcher ein wenig mehr Ahnung hat als ich geht das so in Ordnung ist. Weiß nicht ob das wie ich es geschrieben habe irgendwie falsch rüber gekommen ist:) Benutze ab jetzt auch den Mega dann sollte das kein Problem sein, wenn ich mir nicht schon was zerschossen hab.
Ja die sind 4 angeschlossen, hab Durchgang der kabel gecheckt. Spannung funktioniert auch also die LED auf dem Board leuchtet. aber die Boards schalten keine LED's. Ich weiß nicht wie ich das überprüfen kann ob die Boards defekt sind. Außer einen neuen Chip einsetzten. Das wäre die letzte Option für mich da ich eigentlich nicht mehr allzu viel Zeit für das Projekt habe:P
Aber gut danke für die Denkanstöße mit dem Mega und den Widerständen werde da mal ein wenig rumprobieren. Vielleicht hab ich Glück und ich bin einfach nur doof und übersehe etwas ganz offensichtliches:p
Weshalb sollte hier der Arduino - egal Welcher - zu klein werden, wenn das eigentliche Programm eh extern läuft?
Viel mehr als Befehle umsetzen 'Stein ROT auf Feld 35' kann für den Arduino dann doch kaum über bleiben - was zum Belzebub verstopft bei Dir den Speicher?
Wie gesagt ich werde den Mega nehmen. Hab am Anfang des Projektes alles ein wenig anders vor gehabt aber das mit dem Speicher ist ja auch kein Problem, solang das System funktioniert ist es egal welcher von den beiden dranhängt:)
Ich hatte ihn dann nochmal drüberlaufen lassen und er hat mir jede Menge Adressen ausgespuckt die ich nicht kannte. Dennoch schafft er es irgendwie die 0x40-0x49 anzusprechen.
Okay Kommando zurück, ich habe eben nochmal gescannt und jetzt spuckt er auf einmal was logischeres aus--->Anhang
Ich kann euch wirklich nicht sagen was sich seit dem letzten Scan geändert hat, bis auf die Verdrahtung der LED's. Am Bus selbst hab ich nichts mehr geändert.
Allerdings hat die 0x70 da nichts verloren. Habe allen Chips fortlaufende Adressen zugewiesen.
Tommy56: @TO: Hast Du beim jetzigen Stand nochmal mit dem I2C-Scanner getestet? Die Erfahrung sagt: Was der nicht findet, kannst Du auch nicht ansprechen.
Gruß Tommy
Case solved
Danke das du mich nochmal auf den Scanner gebracht hast, es war was mit der Adressvergabe das ich leichtsinnig übersehen habe. Ich dachte leichtsinnig das es nach 0x49 mit 0x50 weiter geht aber es geht ja mit 0x4A weiter. Das mit dem Hexadezimal hab ich überhaupt nicht bedacht aber einen Blick auf die Liste der Adressvergabemöglichkeit hat das dann bestätigt. Hab jetzt bis auf 4 LED's alle an aber jeder Chip scheint immerhin zu funktionieren. Aber die 0x70 weiß ich immer noch nicht warum die beim scannen erkannt wird. Naja so lange es funktioniert und ich endlich weitermachen kann kann ich damit leben:)
Sorry an alle für meine Schusseligkeit:)
Und danke für die Hilfestellungen.