Vuikie schreef op zaterdag 03 september 2016 @ 11:41:
Wat ik een beetje begrijp uit je verhaal wil jij een Arduino inzetten om een PCA9533 te emuleren.
Ik denk dat het het handigst is als je de datasheet van de PCA9533 erbij pakt en daar de werking van de chip probeert om te zetten in arduino code. Het moederbord van de 3D printer zal zich houden aan de specs van de LED-driver. Dus, als jij weet hoe de chip aangesproken wil worden, zal het ook makkelijker zijn om de code van de firmware te begrijpen. Als je dan de code van de firmware beter begrijpt, hoef je misschien niet de volledige chip te emuleren, maar dat is een inschatting die je zelf mag maken 😎
Ik probeer inderdaad met een Arduino (en later wellicht gewoon een ATTiny45/85) een PCA9533 te emuleren. Ik heb 'm toen op de I2C bus van 't mainboard gezet en laten luisteren naar 't zelfde adres als die LED driver.
Ondertussen ben ik al een flink eindje verder. Ik heb een andere firmware op de printer geflashed. Van origine zijn 't Makerbot klonen en de firmware daarvan is volledig open source. Echter de fabrikant van deze printer heeft die firmware aangepast (als was 't maar om de naam van de machine op 't splashscreen te vervangen). Ik had alleen niet gedacht dat ze ook de LED aansturing zouden veranderen aangezien ze dat per saldo geen winst oplevert.
Wel weet ik dat ze delen van een andere open source firmware (Sailfish) hebben overgenomen maar aangezien de uiteindelijke firmware die op de printer staat is nergens in te zien. Ik was er wel vanuit gegaan dat iets simpels als de RGB LED aansturing gewoon standaard Makerbot zou zijn.
Uiteindelijk heb ik afgelopen nacht maar gewoon de daadwerkelijke Sailfish firmware erop gezet (wat meerdere voordelen heeft, maar dat terzijde). En voilà!, ineens komen niet alleen de startbytes door maar ook de daadwerklijke data bytes.
@Costo zo'n start byte ziet er zo uit
De eerste 7 bits (MSB) zijn 't I2C adres, de laatste bit geeft aan of 't een lees (1) of schrijf (0) opdracht is. De Wire library kan aan de hand van die laaste bit dan de onReceive() of the onRequest() function aanroepen. Al zijn 't niet echt functions maar meer interrupts.
Op dit moment probeer ik echter aan de hand van de PDF (
click) te achterhalen wat de ontvangen signalen betekenen. Er zijn een paar dingen die me niet helemaal duidelijk zijn, zoals hoe die led driver 4 outputs heeft en alle 4 van een PWM signaal kan voorzien... maar slechts 2 PWM registers heeft
Er is namelijk een LED Selector register (LS0) waar elke LED / output 2 bits toegewezen krijgt:
code:
1
2
3
4
| 00 = output high - LED uit
01 = output low - LED aan
10 = output aan PWM0 register gekoppeld
11 = output aan PWM1 register gekoppeld |
Nu vraag ik me dus af hoe ik meer dan 2 outputs kan voorzien van verschillende pwm signalen. Bijvoorbeeld, als ik een RGB 100,125,171 waarde maak zou je 't eerste PWM register op 100 zetten, 't tweede op 125 maar waar laat ik de derde?
Toyota Supra 3.0i Turbo Targa in Panther Black Mica - 300D || 30D || 10-20 || 50mm 1.8 mk1 || 18-55 || 17-85 || 75-300 || Giottos || Manfrotto || Cullmann || Kenko || Hoya